快速创建W5500

This commit is contained in:
Stone 2016-06-28 14:53:53 +00:00
parent f77a1659ca
commit 75c07b7d8a
4 changed files with 36 additions and 26 deletions

View File

@ -28,8 +28,8 @@ static FlushPort* CreateFlushPort(OutputPort* led)
AP0801::AP0801()
{
EthernetLed = nullptr;
WirelessLed = nullptr;
EthernetLed = P0;
WirelessLed = P0;
Host = nullptr;
HostAP = nullptr;
@ -113,10 +113,10 @@ void OnNetReady(AP0801& ap, ISocketHost& host)
ISocketHost* AP0801::Open5500()
{
IDataPort* led = nullptr;
if(EthernetLed) led = CreateFlushPort(EthernetLed);
debug_printf("\r\nW5500::Create \r\n");
auto host = (W5500*)Create5500(Spi2, PE1, PD13, led);
auto host = new W5500(Spi2, PE1, PD13);
host->SetLed(EthernetLed);
host->NetReady = Delegate<ISocketHost&>(OnNetReady, this);
if(host->Open()) return host;
@ -125,19 +125,6 @@ ISocketHost* AP0801::Open5500()
return nullptr;
}
ISocketHost* AP0801::Create5500(SPI spi, Pin irq, Pin rst, IDataPort* led)
{
debug_printf("\r\nW5500::Create \r\n");
auto spi_ = new Spi(spi, 36000000);
auto net = new W5500();
net->LoadConfig();
net->Init(spi_, irq, rst);
return net;
}
static void SetWiFiTask(void* param)
{
auto ap = (AP0801*)param;
@ -151,7 +138,7 @@ ISocketHost* AP0801::Open8266(bool apOnly)
{
auto host = (Esp8266*)Create8266(COM4, PE2, PD3);
if(WirelessLed) host->Led = CreateFlushPort(WirelessLed);
//if(WirelessLed) host->Led = CreateFlushPort(WirelessLed);
if(apOnly) host->WorkMode = SocketMode::AP;

View File

@ -10,11 +10,11 @@
class AP0801
{
public:
OutputPort Leds[2];
Pin Leds[2];
InputPort Buttons[2];
OutputPort* EthernetLed; // 以太网指示灯
OutputPort* WirelessLed; // 无线指示灯
Pin EthernetLed; // 以太网指示灯
Pin WirelessLed; // 无线指示灯
ISocketHost* Host; // 网络主机
ISocketHost* HostAP; // 网络主机

View File

@ -14,6 +14,8 @@
#include "TTime.h"
#include "Task.h"
#include "App\FlushPort.h"
#define NET_DEBUG DEBUG
//#define NET_DEBUG 0
#if NET_DEBUG
@ -211,6 +213,14 @@ W5500::W5500(Spi* spi, Pin irq, Pin rst)
Init(spi, irq, rst);
}
W5500::W5500(SPI spi, Pin irq, Pin rst)
{
auto spi_ = new Spi(spi, 36000000);
LoadConfig();
Init(spi_, irq, rst);
}
W5500::~W5500()
{
Close();
@ -267,6 +277,17 @@ void W5500::Init(Spi* spi, Pin irq, Pin rst)
_spi = spi;
}
void W5500::SetLed(Pin led)
{
if(led != P0)
{
auto fp = new FlushPort();
fp->Port = new OutputPort(led);
fp->Start();
Led = fp;
}
}
bool W5500::Open()
{
if(Opened) return true;

View File

@ -22,12 +22,14 @@ public:
// 构造
W5500();
W5500(Spi* spi, Pin irq = P0, Pin rst = P0); // 必须具备复位引脚 否则寄存器不能读
W5500(Spi* spi, Pin irq, Pin rst);
W5500(SPI spi, Pin irq, Pin rst);
virtual ~W5500();
// 初始化
void Init();
void Init(Spi* spi, Pin irq = P0, Pin rst = P0); // 必须给出 rst 控制引脚
void Init(Spi* spi, Pin irq, Pin rst);
void SetLed(Pin led);
bool Open();
bool Close();