跟进bsp 8266 open失败
This commit is contained in:
parent
850969ca03
commit
226e81ddd0
|
@ -19,9 +19,8 @@
|
||||||
|
|
||||||
IOK027X::IOK027X()
|
IOK027X::IOK027X()
|
||||||
{
|
{
|
||||||
Host = nullptr;
|
|
||||||
Client = nullptr;
|
|
||||||
HostAP = nullptr; // 网络主机
|
HostAP = nullptr; // 网络主机
|
||||||
|
Client = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IOK027X::Setup(ushort code, cstring name, COM message, int baudRate)
|
void IOK027X::Setup(ushort code, cstring name, COM message, int baudRate)
|
||||||
|
@ -49,20 +48,44 @@ void OnNetReady(IOK027X& ap, ISocketHost& host)
|
||||||
if (ap.Client) ap.Client->Open();
|
if (ap.Client) ap.Client->Open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* IOK027X::InitData(void* data, int size)
|
||||||
|
{
|
||||||
|
// 启动信息
|
||||||
|
auto hot = &HotConfig::Current();
|
||||||
|
hot->Times++;
|
||||||
|
|
||||||
|
data = hot->Next();
|
||||||
|
if (hot->Times == 1)
|
||||||
|
{
|
||||||
|
Buffer ds(data, size);
|
||||||
|
ds.Clear();
|
||||||
|
ds[0] = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
Data = data;
|
||||||
|
Size = size;
|
||||||
|
|
||||||
|
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->Host;
|
auto esp = (Esp8266*)ap->HostAP;
|
||||||
|
|
||||||
client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||||
}
|
}
|
||||||
|
|
||||||
ISocketHost* IOK027X::Open8266(bool apOnly)
|
ISocketHost* IOK027X::Create8266(bool apOnly)
|
||||||
{
|
{
|
||||||
auto host = (Esp8266*)Create8266();
|
auto host = new Esp8266(COM4,PB2,PA1);
|
||||||
|
|
||||||
if(apOnly) host->WorkMode = SocketMode::AP;
|
if (apOnly)
|
||||||
|
host->WorkMode = SocketMode::AP;
|
||||||
|
else
|
||||||
|
host->NetReady = Delegate<ISocketHost&>(&IOK027X::OpenClient, this);
|
||||||
|
|
||||||
Sys.AddTask(SetWiFiTask, this, 0, -1, "SetWiFi");
|
Sys.AddTask(SetWiFiTask, this, 0, -1, "SetWiFi");
|
||||||
host->NetReady.Bind(OnNetReady, this);
|
host->NetReady.Bind(OnNetReady, this);
|
||||||
|
@ -72,28 +95,10 @@ ISocketHost* IOK027X::Open8266(bool apOnly)
|
||||||
return host;
|
return host;
|
||||||
}
|
}
|
||||||
|
|
||||||
ISocketHost* IOK027X::Create8266()
|
|
||||||
{
|
|
||||||
debug_printf("\r\nEsp8266::Create \r\n");
|
|
||||||
|
|
||||||
auto srp = new SerialPort(COM2, 115200);
|
|
||||||
srp->Tx.SetCapacity(0x100);
|
|
||||||
srp->Rx.SetCapacity(0x100);
|
|
||||||
|
|
||||||
auto net = new Esp8266(srp, PB2, PA1);
|
|
||||||
net->InitConfig();
|
|
||||||
net->LoadConfig();
|
|
||||||
|
|
||||||
// 配置模式作为工作模式
|
|
||||||
net->WorkMode = net->Mode;
|
|
||||||
|
|
||||||
return net;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/******************************** Token ********************************/
|
/******************************** Token ********************************/
|
||||||
|
|
||||||
void IOK027X::CreateClient()
|
void IOK027X::InitClient()
|
||||||
{
|
{
|
||||||
if (Client) return;
|
if (Client) return;
|
||||||
|
|
||||||
|
@ -101,37 +106,51 @@ void IOK027X::CreateClient()
|
||||||
|
|
||||||
// 创建客户端
|
// 创建客户端
|
||||||
auto client = new TokenClient();
|
auto client = new TokenClient();
|
||||||
//client->Control = ctrl;
|
|
||||||
//client->Local = ctrl;
|
|
||||||
client->Cfg = tk;
|
client->Cfg = tk;
|
||||||
|
|
||||||
Client = client;
|
Client = client;
|
||||||
|
|
||||||
|
if (Data && Size > 0)
|
||||||
|
{
|
||||||
|
auto& ds = Client->Store;
|
||||||
|
ds.Data.Set(Data, Size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IOK027X::OpenClient()
|
void IOK027X::Register(int index, IDataPort& dp)
|
||||||
|
{
|
||||||
|
if (!Client) return;
|
||||||
|
|
||||||
|
auto& ds = Client->Store;
|
||||||
|
ds.Register(index, dp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IOK027X::OpenClient(ISocketHost& host)
|
||||||
{
|
{
|
||||||
debug_printf("\r\n OpenClient \r\n");
|
debug_printf("\r\n OpenClient \r\n");
|
||||||
assert(Host, "Host");
|
assert(HostAP, "HostAP");
|
||||||
|
assert(Client, "Client");
|
||||||
|
|
||||||
auto tk = TokenConfig::Current;
|
auto tk = TokenConfig::Current;
|
||||||
AddControl(*Host, *tk);
|
AddControl(*HostAP, tk->Uri());
|
||||||
|
|
||||||
TokenConfig cfg;
|
NetUri uri(NetType::Udp, IPAddress::Broadcast(), 3355);
|
||||||
cfg.Protocol = NetType::Udp;
|
auto socket = AddControl(*HostAP, uri);
|
||||||
cfg.ServerIP = IPAddress::Broadcast().Value;
|
socket->Local.Port = tk->Port;
|
||||||
cfg.ServerPort = 3355;
|
|
||||||
AddControl(*Host, cfg);
|
|
||||||
|
|
||||||
if(HostAP) AddControl(*HostAP, cfg);
|
// if (HostAP)
|
||||||
|
// {
|
||||||
|
// socket = AddControl(*HostAP, uri);
|
||||||
|
// socket->Local.Port = tk->Port;
|
||||||
|
// }
|
||||||
|
|
||||||
|
Client->Open();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IOK027X::AddControl(ISocketHost& host, TokenConfig& cfg)
|
ISocket* IOK027X::AddControl(ISocketHost& host, const NetUri& uri)
|
||||||
{
|
{
|
||||||
// 创建连接服务器的Socket
|
// 创建连接服务器的Socket
|
||||||
auto socket = host.CreateSocket(cfg.Protocol);
|
auto socket = host.CreateRemote(uri);
|
||||||
socket->Remote.Port = cfg.ServerPort;
|
|
||||||
socket->Remote.Address = IPAddress(cfg.ServerIP);
|
|
||||||
socket->Server = cfg.Server();
|
|
||||||
|
|
||||||
// 创建连接服务器的控制器
|
// 创建连接服务器的控制器
|
||||||
auto ctrl = new TokenController();
|
auto ctrl = new TokenController();
|
||||||
|
@ -144,8 +163,73 @@ void IOK027X::AddControl(ISocketHost& host, TokenConfig& cfg)
|
||||||
|
|
||||||
// 如果不是第一个,则打开远程
|
// 如果不是第一个,则打开远程
|
||||||
if (client->Controls.Count() > 1) ctrl->ShowRemote = true;
|
if (client->Controls.Count() > 1) ctrl->ShowRemote = true;
|
||||||
|
|
||||||
|
return socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OnInitNet(void* param)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
网络使用流程:
|
||||||
|
|
||||||
|
5500网线检测
|
||||||
|
网线连通
|
||||||
|
启动DHCP
|
||||||
|
作为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()
|
||||||
|
{
|
||||||
|
Sys.AddTask(OnInitNet, this, 0, -1, "InitNet");
|
||||||
|
}
|
||||||
/******************************** 2401 ********************************/
|
/******************************** 2401 ********************************/
|
||||||
|
|
||||||
/*int Fix2401(const Buffer& bs)
|
/*int Fix2401(const Buffer& bs)
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
class IOK027X
|
class IOK027X
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ISocketHost* Host; // 网络主机
|
|
||||||
ISocketHost* HostAP; // 网络主机
|
ISocketHost* HostAP; // 网络主机
|
||||||
TokenClient* Client; //
|
TokenClient* Client; //
|
||||||
|
|
||||||
|
@ -18,14 +17,18 @@ 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);
|
||||||
|
|
||||||
static ISocketHost* Create8266();
|
void InitClient();
|
||||||
|
void InitNet();
|
||||||
|
|
||||||
ISocketHost* Open8266(bool apOnly);
|
ISocketHost* Create8266(bool apOnly);
|
||||||
|
void* InitData(void* data, int size);
|
||||||
|
void Register(int index, IDataPort& dp);
|
||||||
|
|
||||||
void CreateClient();
|
private:
|
||||||
|
void * Data;
|
||||||
void OpenClient();
|
int Size;
|
||||||
void AddControl(ISocketHost& host, TokenConfig& cfg);
|
void OpenClient(ISocketHost& host);
|
||||||
|
ISocket* AddControl(ISocketHost& host, const NetUri& uri);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue