跟进bsp 8266 未组网前打开了连接云端的通道。。

This commit is contained in:
WangQiang 2016-06-30 01:47:54 +00:00
parent 555f336c57
commit 300fe8656b
2 changed files with 45 additions and 94 deletions

View File

@ -23,7 +23,7 @@ IOK027X::IOK027X()
Client = nullptr; Client = nullptr;
} }
void IOK027X::Setup(ushort code, cstring name, COM message, int baudRate) void IOK027X::Init(ushort code, cstring name, COM message, int baudRate)
{ {
auto& sys = (TSys&)Sys; auto& sys = (TSys&)Sys;
sys.Code = code; sys.Code = code;
@ -42,12 +42,6 @@ void IOK027X::Setup(ushort code, cstring name, COM message, int baudRate)
Config::Current = &Config::CreateFlash(); Config::Current = &Config::CreateFlash();
} }
// 网络就绪
void OnNetReady(IOK027X& ap, ISocketHost& host)
{
if (ap.Client) ap.Client->Open();
}
void* IOK027X::InitData(void* data, int size) void* IOK027X::InitData(void* data, int size)
{ {
// 启动信息 // 启动信息
@ -68,23 +62,28 @@ void* IOK027X::InitData(void* data, int size)
return data; return data;
} }
// static void SetWiFiTask(void* param)
static void SetWiFiTask(void* param) // {
{ // auto ap = (IOK027X*)param;
auto ap = (IOK027X*)param; // auto client = ap->Client;
auto client = ap->Client; // auto esp = (Esp8266*)ap->HostAP;
auto esp = (Esp8266*)ap->HostAP; //
// client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
client->Register("SetWiFi", &Esp8266::SetWiFi, esp); // }
}
ISocketHost* IOK027X::Create8266(bool apOnly) ISocketHost* IOK027X::Create8266(bool apOnly)
{ {
auto host = new Esp8266(COM2,PB2,PA1); auto host = new Esp8266(COM2,PB2,PA1);
// APOnly且不是AP模式时强制AP模式
if (apOnly && !host->IsAP()) host->WorkMode = SocketMode::AP;
// 绑定委托避免5500没有连接时导致没有启动客户端
host->NetReady.Bind(&IOK027X::OpenClient, this); host->NetReady.Bind(&IOK027X::OpenClient, this);
Sys.AddTask(SetWiFiTask, this, 0, -1, "SetWiFi"); //Sys.AddTask(SetWiFiTask, this, 0, -1, "SetWiFi");
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
host->OpenAsync(); host->OpenAsync();
@ -123,27 +122,24 @@ void IOK027X::Register(int index, IDataPort& dp)
void IOK027X::OpenClient(ISocketHost& host) void IOK027X::OpenClient(ISocketHost& host)
{ {
debug_printf("\r\n OpenClient \r\n");
assert(HostAP, "HostAP");
assert(Client, "Client"); assert(Client, "Client");
debug_printf("\r\n OpenClient \r\n");
// auto esp = dynamic_cast<Esp8266*>(&host);
auto tk = TokenConfig::Current; auto tk = TokenConfig::Current;
AddControl(*HostAP, tk->Uri());
NetUri uri(NetType::Udp, IPAddress::Broadcast(), 3355); NetUri uri(NetType::Udp, IPAddress::Broadcast(), 3355);
auto socket = AddControl(*HostAP, uri);
socket->Local.Port = tk->Port;
if (HostAP) if (HostAP)
{ {
socket = AddControl(*HostAP, uri); AddControl(*HostAP, tk->Uri(), 0);
socket->Local.Port = tk->Port; AddControl(*HostAP, uri, tk->Port);
}
Client->Open(); Client->Open();
}
} }
ISocket* IOK027X::AddControl(ISocketHost& host, const NetUri& uri) TokenController* IOK027X::AddControl(ISocketHost& host, const NetUri& uri, ushort localPort)
{ {
// 创建连接服务器的Socket // 创建连接服务器的Socket
auto socket = host.CreateRemote(uri); auto socket = host.CreateRemote(uri);
@ -155,73 +151,27 @@ ISocket* IOK027X::AddControl(ISocketHost& host, const NetUri& uri)
// 创建客户端 // 创建客户端
auto client = Client; auto client = Client;
client->Controls.Add(ctrl); if (localPort == 0)
client->Master = ctrl;
else
{
socket->Local.Port = localPort;
ctrl->ShowRemote = true;
client->Controls.Add(ctrl);
}
// 如果不是第一个,则打开远程 return ctrl;
if (client->Controls.Count() > 1) ctrl->ShowRemote = true;
return socket;
} }
void OnInitNet(void* param) void OnInitNet(void* param)
{ {
/* auto& bsp = *(IOK027X*)param;
使
5500线 // 没有接网线需要完整WiFi通道
线 auto esp = bsp.Create8266(false);
DHCP bsp.HostAP = esp;
Host
Host为空 AP/STA_AP
8266
Host为空
Host
else STA_AP
= AP
*/
auto& ap = *(IOK027X*)param;
// 如果Host已存在则8266仅作为AP
ap.HostAP = ap.Create8266(true);
// 打开DHCP完成时会打开客户端
ap.HostAP->EnableDHCP();
//auto& ap = *(IOK027X*)param;
//auto host = (W5500*)ap.Create5500();
//if (host->Open())
//{
// host->EnableDNS();
// ap.Host = host;
//}
//else
//{
// delete host;
//}
//if (!ap.Host || host->IsAP())
//{
// // 如果Host已存在则8266仅作为AP
// auto esp = ap.Create8266(ap.Host);
// if (esp)
// {
// if (!ap.Host)
// ap.Host = esp;
// else
// ap.HostAP = esp;
// }
//}
//
//// 打开DHCP完成时会打开客户端
//if (ap.Host) ap.Host->EnableDHCP();
} }
void IOK027X::InitNet() void IOK027X::InitNet()
{ {
Sys.AddTask(OnInitNet, this, 0, -1, "InitNet"); Sys.AddTask(OnInitNet, this, 0, -1, "InitNet");

View File

@ -15,20 +15,21 @@ public:
IOK027X(); IOK027X();
void Setup(ushort code, cstring name, COM message = COM1, int baudRate = 0); void Init(ushort code, cstring name, COM message = COM1, int baudRate = 0);
void* InitData(void* data, int size);
void Register(int index, IDataPort& dp);
ISocketHost* Create8266(bool apOnly);
void InitClient(); void InitClient();
void InitNet(); void InitNet();
ISocketHost* Create8266(bool apOnly);
void* InitData(void* data, int size);
void Register(int index, IDataPort& dp);
private: private:
void * Data; void * Data;
int Size; int Size;
void OpenClient(ISocketHost& host); void OpenClient(ISocketHost& host);
ISocket* AddControl(ISocketHost& host, const NetUri& uri); TokenController* AddControl(ISocketHost& host, const NetUri& uri, ushort localPort);
}; };
#endif #endif