跟进bsp 8266 未组网前打开了连接云端的通道。。
This commit is contained in:
parent
555f336c57
commit
300fe8656b
|
@ -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;
|
||||||
|
if (localPort == 0)
|
||||||
|
client->Master = ctrl;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
socket->Local.Port = localPort;
|
||||||
|
ctrl->ShowRemote = true;
|
||||||
client->Controls.Add(ctrl);
|
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");
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue