快速创建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() AP0801::AP0801()
{ {
EthernetLed = nullptr; EthernetLed = P0;
WirelessLed = nullptr; WirelessLed = P0;
Host = nullptr; Host = nullptr;
HostAP = nullptr; HostAP = nullptr;
@ -113,10 +113,10 @@ void OnNetReady(AP0801& ap, ISocketHost& host)
ISocketHost* AP0801::Open5500() ISocketHost* AP0801::Open5500()
{ {
IDataPort* led = nullptr; debug_printf("\r\nW5500::Create \r\n");
if(EthernetLed) led = CreateFlushPort(EthernetLed);
auto host = (W5500*)Create5500(Spi2, PE1, PD13, led); auto host = new W5500(Spi2, PE1, PD13);
host->SetLed(EthernetLed);
host->NetReady = Delegate<ISocketHost&>(OnNetReady, this); host->NetReady = Delegate<ISocketHost&>(OnNetReady, this);
if(host->Open()) return host; if(host->Open()) return host;
@ -125,19 +125,6 @@ ISocketHost* AP0801::Open5500()
return nullptr; 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) static void SetWiFiTask(void* param)
{ {
auto ap = (AP0801*)param; auto ap = (AP0801*)param;
@ -151,7 +138,7 @@ ISocketHost* AP0801::Open8266(bool apOnly)
{ {
auto host = (Esp8266*)Create8266(COM4, PE2, PD3); 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; if(apOnly) host->WorkMode = SocketMode::AP;

View File

@ -10,11 +10,11 @@
class AP0801 class AP0801
{ {
public: public:
OutputPort Leds[2]; Pin Leds[2];
InputPort Buttons[2]; InputPort Buttons[2];
OutputPort* EthernetLed; // 以太网指示灯 Pin EthernetLed; // 以太网指示灯
OutputPort* WirelessLed; // 无线指示灯 Pin WirelessLed; // 无线指示灯
ISocketHost* Host; // 网络主机 ISocketHost* Host; // 网络主机
ISocketHost* HostAP; // 网络主机 ISocketHost* HostAP; // 网络主机
@ -24,7 +24,7 @@ public:
// 设置系统参数 // 设置系统参数
void Setup(ushort code, cstring name, COM message = COM1, int baudRate = 0); void Setup(ushort code, cstring name, COM message = COM1, int baudRate = 0);
// 设置数据区 // 设置数据区
void* SetData(void* data, int size); void* SetData(void* data, int size);
void Register(int index, IDataPort* dps, int count); void Register(int index, IDataPort* dps, int count);
@ -42,7 +42,7 @@ public:
void CreateClient(); void CreateClient();
void OpenClient(); void OpenClient();
ISocket* AddControl(ISocketHost& host, const NetUri& uri); ISocket* AddControl(ISocketHost& host, const NetUri& uri);
private: private:
void* Data; void* Data;
int Size; int Size;

View File

@ -14,6 +14,8 @@
#include "TTime.h" #include "TTime.h"
#include "Task.h" #include "Task.h"
#include "App\FlushPort.h"
#define NET_DEBUG DEBUG #define NET_DEBUG DEBUG
//#define NET_DEBUG 0 //#define NET_DEBUG 0
#if NET_DEBUG #if NET_DEBUG
@ -211,6 +213,14 @@ W5500::W5500(Spi* spi, Pin irq, Pin rst)
Init(spi, irq, 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() W5500::~W5500()
{ {
Close(); Close();
@ -267,6 +277,17 @@ void W5500::Init(Spi* spi, Pin irq, Pin rst)
_spi = spi; _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() bool W5500::Open()
{ {
if(Opened) return true; if(Opened) return true;

View File

@ -22,12 +22,14 @@ public:
// 构造 // 构造
W5500(); 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(); virtual ~W5500();
// 初始化 // 初始化
void Init(); 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 Open();
bool Close(); bool Close();