Revert "Merge branch 'master' of http://git.wslink.cn/Embed/SmartOS"
This reverts commita53379c89a
, reversing changes made to7e367ed9aa
. # Conflicts: # Board/Pandora.cpp
This commit is contained in:
parent
be55364584
commit
135a736a9a
151
Board/AP0103.cpp
151
Board/AP0103.cpp
|
@ -19,6 +19,7 @@
|
|||
#include "App\FlushPort.h"
|
||||
|
||||
AP0103* AP0103::Current = nullptr;
|
||||
static TokenClient* Client = nullptr; // 令牌客户端
|
||||
|
||||
AP0103::AP0103()
|
||||
{
|
||||
|
@ -28,9 +29,7 @@ AP0103::AP0103()
|
|||
ButtonPins.Add(PE9);
|
||||
ButtonPins.Add(PA1);
|
||||
|
||||
Host = nullptr;
|
||||
HostAP = nullptr;
|
||||
Client = nullptr;
|
||||
AlarmObj = nullptr;
|
||||
|
||||
Nrf = nullptr;
|
||||
Server = nullptr;
|
||||
|
@ -127,84 +126,68 @@ void AP0103::InitButtons(const Delegate2<InputPort&, bool>& press)
|
|||
NetworkInterface* AP0103::Create5500()
|
||||
{
|
||||
debug_printf("\r\nW5500::Create \r\n");
|
||||
|
||||
auto tc = TinyConfig::Create();
|
||||
W5500 * host = nullptr;
|
||||
W5500 * net = nullptr;
|
||||
|
||||
if(tc->HardVer >=5)
|
||||
host = new W5500(Spi1, PE7, PB2);
|
||||
net = new W5500(Spi1, PE7, PB2);
|
||||
else
|
||||
host = new W5500(Spi1, PE8, PE7);
|
||||
net = new W5500(Spi1, PE8, PE7);
|
||||
if(!net->Open())
|
||||
{
|
||||
delete net;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return host;
|
||||
net->EnableDNS();
|
||||
net->EnableDHCP();
|
||||
|
||||
return net;
|
||||
}
|
||||
|
||||
NetworkInterface* AP0103::Create8266(bool apOnly)
|
||||
{
|
||||
auto host = new Esp8266(COM4, P0, P0);
|
||||
auto esp = new Esp8266(COM4, P0, P0);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
void AP0103::InitClient()
|
||||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
// 需要使用本地连接
|
||||
//client->UseLocal();
|
||||
Client = tc;
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
|
||||
// 如果若干分钟后仍然没有打开令牌客户端,则重启系统
|
||||
Sys.AddTask(
|
||||
[](void* p) {
|
||||
auto& client = *(TokenClient*)p;
|
||||
if (!client.Opened)
|
||||
{
|
||||
debug_printf("联网超时,准备重启系统!\r\n\r\n");
|
||||
Sys.Reboot();
|
||||
}
|
||||
},
|
||||
client, 8 * 60 * 1000, -1, "check connet net");
|
||||
InitAlarm();
|
||||
}
|
||||
|
||||
void AP0103::Register(int index, IDataPort& dp)
|
||||
|
@ -215,35 +198,14 @@ void AP0103::Register(int index, IDataPort& dp)
|
|||
ds.Register(index, dp);
|
||||
}
|
||||
|
||||
/*
|
||||
网络使用流程:
|
||||
|
||||
5500网线检测
|
||||
网线连通
|
||||
启动DHCP/DNS
|
||||
作为Host
|
||||
Host为空 或 AP/STA_AP
|
||||
创建8266,加载配置
|
||||
Host为空
|
||||
作为Host
|
||||
else STA_AP
|
||||
工作模式 = AP
|
||||
|
||||
令牌客户端主通道
|
||||
令牌客户端内网通道
|
||||
*/
|
||||
void OnInitNet(void* param)
|
||||
{
|
||||
auto& bsp = *(AP0103*)param;
|
||||
auto& bsp = *(AP0103*)param;
|
||||
|
||||
// 检查是否连接网线
|
||||
auto host = (W5500*)bsp.Create5500();
|
||||
// 软路由的DHCP要求很严格,必须先把自己IP设为0
|
||||
host->IP = IPAddress::Any();
|
||||
host->Open();
|
||||
host->EnableDNS();
|
||||
host->EnableDHCP();
|
||||
bsp.Host = host;
|
||||
bsp.Create5500();
|
||||
bsp.Create8266(false);
|
||||
|
||||
Client->Open();
|
||||
}
|
||||
|
||||
void AP0103::InitNet()
|
||||
|
@ -251,6 +213,35 @@ void AP0103::InitNet()
|
|||
Sys.AddTask(OnInitNet, this, 0, -1, "InitNet");
|
||||
}
|
||||
|
||||
static void OnAlarm(AlarmItem& item)
|
||||
{
|
||||
// 1长度n + 1类型 + 1偏移 + (n-2)数据
|
||||
auto bs = item.GetData();
|
||||
debug_printf("OnAlarm ");
|
||||
bs.Show(true);
|
||||
|
||||
if(bs[1] == 0x06)
|
||||
{
|
||||
auto client = Client;
|
||||
client->Store.Write(bs[2], bs.Sub(3, bs[0] - 2));
|
||||
|
||||
// 主动上报状态
|
||||
client->ReportAsync(bs[2], bs[0] - 2);
|
||||
}
|
||||
}
|
||||
|
||||
void AP0103::InitAlarm()
|
||||
{
|
||||
if (!Client)return;
|
||||
|
||||
if (!AlarmObj) AlarmObj = new Alarm();
|
||||
Client->Register("Policy/AlarmSet", &Alarm::Set, AlarmObj);
|
||||
Client->Register("Policy/AlarmGet", &Alarm::Get, AlarmObj);
|
||||
|
||||
AlarmObj->OnAlarm = OnAlarm;
|
||||
AlarmObj->Start();
|
||||
}
|
||||
|
||||
|
||||
/******************************** Tiny *******************************/
|
||||
|
||||
|
@ -372,7 +363,7 @@ void AP0103::OnLongPress(InputPort* port, bool down)
|
|||
debug_printf("Press P%c%d Time=%d ms\r\n", _PIN_NAME(port->_Pin), port->PressTime);
|
||||
|
||||
ushort time = port->PressTime;
|
||||
auto client = AP0103::Current->Client;
|
||||
auto client = Client;
|
||||
if (time >= 5000 && time < 10000)
|
||||
{
|
||||
if(client) client->Reset("按键重置");
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include "Net\ITransport.h"
|
||||
#include "Net\Socket.h"
|
||||
|
||||
#include "TokenNet\TokenClient.h"
|
||||
#include "TinyNet\TinyServer.h"
|
||||
#include "TokenNet\GateWay.h"
|
||||
|
||||
|
@ -25,17 +24,13 @@ public:
|
|||
List<OutputPort*> Outputs;
|
||||
List<InputPort*> Inputs;
|
||||
|
||||
NetworkInterface* Host; // 网络主机
|
||||
NetworkInterface* HostAP; // 网络主机
|
||||
TokenClient* Client; // 令牌客户端
|
||||
|
||||
ITransport* Nrf; // NRF24L01传输口
|
||||
TinyServer* Server; // TinyServer服务
|
||||
|
||||
Gateway* _GateWay; // 网关
|
||||
|
||||
// ProxyFactory* ProxyFac; // 透传管理器
|
||||
// Alarm* AlarmObj;
|
||||
Alarm* AlarmObj;
|
||||
|
||||
AP0103();
|
||||
|
||||
|
@ -56,6 +51,7 @@ public:
|
|||
|
||||
void InitClient();
|
||||
void InitNet();
|
||||
void InitAlarm();
|
||||
|
||||
// 打开NRF24L01
|
||||
ITransport* Create2401();
|
||||
|
|
153
Board/AP0104.cpp
153
Board/AP0104.cpp
|
@ -19,6 +19,7 @@
|
|||
#include "App\FlushPort.h"
|
||||
|
||||
AP0104* AP0104::Current = nullptr;
|
||||
static TokenClient* Client = nullptr; // 令牌客户端
|
||||
|
||||
AP0104::AP0104()
|
||||
{
|
||||
|
@ -28,9 +29,7 @@ AP0104::AP0104()
|
|||
ButtonPins.Add(PE9);
|
||||
ButtonPins.Add(PA1);
|
||||
|
||||
Host = nullptr;
|
||||
HostAP = nullptr;
|
||||
Client = nullptr;
|
||||
AlarmObj = nullptr;
|
||||
|
||||
Nrf = nullptr;
|
||||
Server = nullptr;
|
||||
|
@ -128,66 +127,61 @@ NetworkInterface* AP0104::Create5500()
|
|||
{
|
||||
debug_printf("\r\nW5500::Create \r\n");
|
||||
|
||||
auto host = new W5500(Spi1, PE7, PB2);
|
||||
auto net = new W5500(Spi1, PE7, PB2);
|
||||
if(!net->Open())
|
||||
{
|
||||
delete net;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return host;
|
||||
net->EnableDNS();
|
||||
net->EnableDHCP();
|
||||
|
||||
return net;
|
||||
}
|
||||
|
||||
NetworkInterface* AP0104::Create8266(bool apOnly)
|
||||
{
|
||||
auto host = new Esp8266(COM4, P0, P0);
|
||||
auto esp = new Esp8266(COM4, P0, P0);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
void AP0104::InitClient()
|
||||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
// 需要使用本地连接
|
||||
//client->UseLocal();
|
||||
Client = tc;
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
InitAlarm();
|
||||
}
|
||||
|
||||
void AP0104::Register(int index, IDataPort& dp)
|
||||
|
@ -198,56 +192,14 @@ void AP0104::Register(int index, IDataPort& dp)
|
|||
ds.Register(index, dp);
|
||||
}
|
||||
|
||||
/*
|
||||
网络使用流程:
|
||||
|
||||
5500网线检测
|
||||
网线连通
|
||||
启动DHCP/DNS
|
||||
作为Host
|
||||
Host为空 或 AP/STA_AP
|
||||
创建8266,加载配置
|
||||
Host为空
|
||||
作为Host
|
||||
else STA_AP
|
||||
工作模式 = AP
|
||||
|
||||
令牌客户端主通道
|
||||
令牌客户端内网通道
|
||||
*/
|
||||
void OnInitNet(void* param)
|
||||
{
|
||||
auto& bsp = *(AP0104*)param;
|
||||
auto& bsp = *(AP0104*)param;
|
||||
|
||||
// 检查是否连接网线
|
||||
auto host = (W5500*)bsp.Create5500();
|
||||
// 软路由的DHCP要求很严格,必须先把自己IP设为0
|
||||
host->IP = IPAddress::Any();
|
||||
if (host->Open())
|
||||
{
|
||||
host->EnableDNS();
|
||||
host->EnableDHCP();
|
||||
bsp.Host = host;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete host;
|
||||
}
|
||||
bsp.Create5500();
|
||||
bsp.Create8266(false);
|
||||
|
||||
// 没有接网线,需要完整WiFi通道
|
||||
if (!bsp.Host)
|
||||
{
|
||||
auto esp = (WiFiInterface*)bsp.Create8266(false);
|
||||
if (esp)
|
||||
{
|
||||
// 未组网时,主机留空,仅保留AP主机
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
if (join && esp->IsStation())
|
||||
bsp.Host = esp;
|
||||
else
|
||||
bsp.HostAP = esp;
|
||||
}
|
||||
}
|
||||
Client->Open();
|
||||
}
|
||||
|
||||
void AP0104::InitNet()
|
||||
|
@ -255,6 +207,35 @@ void AP0104::InitNet()
|
|||
Sys.AddTask(OnInitNet, this, 0, -1, "InitNet");
|
||||
}
|
||||
|
||||
static void OnAlarm(AlarmItem& item)
|
||||
{
|
||||
// 1长度n + 1类型 + 1偏移 + (n-2)数据
|
||||
auto bs = item.GetData();
|
||||
debug_printf("OnAlarm ");
|
||||
bs.Show(true);
|
||||
|
||||
if(bs[1] == 0x06)
|
||||
{
|
||||
auto client = Client;
|
||||
client->Store.Write(bs[2], bs.Sub(3, bs[0] - 2));
|
||||
|
||||
// 主动上报状态
|
||||
client->ReportAsync(bs[2], bs[0] - 2);
|
||||
}
|
||||
}
|
||||
|
||||
void AP0104::InitAlarm()
|
||||
{
|
||||
if (!Client)return;
|
||||
|
||||
if (!AlarmObj) AlarmObj = new Alarm();
|
||||
Client->Register("Policy/AlarmSet", &Alarm::Set, AlarmObj);
|
||||
Client->Register("Policy/AlarmGet", &Alarm::Get, AlarmObj);
|
||||
|
||||
AlarmObj->OnAlarm = OnAlarm;
|
||||
AlarmObj->Start();
|
||||
}
|
||||
|
||||
|
||||
/******************************** Tiny *******************************/
|
||||
|
||||
|
@ -374,7 +355,7 @@ void AP0104::OnLongPress(InputPort* port, bool down)
|
|||
debug_printf("Press P%c%d Time=%d ms\r\n", _PIN_NAME(port->_Pin), port->PressTime);
|
||||
|
||||
ushort time = port->PressTime;
|
||||
auto client = AP0104::Current->Client;
|
||||
auto client = Client;
|
||||
if (time >= 5000 && time < 10000)
|
||||
{
|
||||
if(client) client->Reset("按键重置");
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include "Net\ITransport.h"
|
||||
#include "Net\Socket.h"
|
||||
|
||||
#include "TokenNet\TokenClient.h"
|
||||
#include "TinyNet\TinyServer.h"
|
||||
#include "TokenNet\GateWay.h"
|
||||
|
||||
|
@ -25,17 +24,13 @@ public:
|
|||
List<OutputPort*> Outputs;
|
||||
List<InputPort*> Inputs;
|
||||
|
||||
NetworkInterface* Host; // 网络主机
|
||||
NetworkInterface* HostAP; // 网络主机
|
||||
TokenClient* Client; // 令牌客户端
|
||||
|
||||
ITransport* Nrf; // NRF24L01传输口
|
||||
TinyServer* Server; // TinyServer服务
|
||||
|
||||
Gateway* _GateWay; // 网关
|
||||
|
||||
// ProxyFactory* ProxyFac; // 透传管理器
|
||||
// Alarm* AlarmObj;
|
||||
Alarm* AlarmObj;
|
||||
|
||||
AP0104();
|
||||
// 设置系统参数
|
||||
|
@ -55,6 +50,7 @@ public:
|
|||
|
||||
void InitClient();
|
||||
void InitNet();
|
||||
void InitAlarm();
|
||||
|
||||
// 打开NRF24L01
|
||||
ITransport* Create2401();
|
||||
|
|
|
@ -28,8 +28,7 @@ AP0801::AP0801()
|
|||
LedPins.Add(PE15);
|
||||
ButtonPins.Add(PE13);
|
||||
ButtonPins.Add(PE14);
|
||||
Host = nullptr;
|
||||
HostAP = nullptr;
|
||||
|
||||
Client = nullptr;
|
||||
ProxyFac = nullptr;
|
||||
AlarmObj = nullptr;
|
||||
|
@ -130,9 +129,6 @@ NetworkInterface* AP0801::Create5500()
|
|||
debug_printf("\r\nW5500::Create \r\n");
|
||||
|
||||
auto net = new W5500(Spi2, PE1, PD13);
|
||||
// 必须先把自己IP设为0,否则本地IP段与路由器不一致时将得不到分配
|
||||
//net->IP = IPAddress::Any();
|
||||
|
||||
if(!net->Open())
|
||||
{
|
||||
delete net;
|
||||
|
@ -184,33 +180,13 @@ void AP0801::InitClient()
|
|||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto tc = new TokenClient();
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = tc;
|
||||
|
||||
tc->MaxNotActive = 480000;
|
||||
InitAlarm();
|
||||
// 重启
|
||||
tc->Register("Gateway/Restart", &TokenClient::InvokeRestart, tc);
|
||||
// 重置
|
||||
tc->Register("Gateway/Reset", &TokenClient::InvokeReset, tc);
|
||||
// 设置远程地址
|
||||
tc->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, tc);
|
||||
// 获取远程配置信息
|
||||
tc->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, tc);
|
||||
// 获取所有Invoke命令
|
||||
tc->Register("Api/All", &TokenClient::InvokeGetAllApi, tc);
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = tc->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
|
||||
tc->UseLocal();
|
||||
|
||||
//tc->Open();
|
||||
}
|
||||
|
||||
void AP0801::Register(uint offset, IDataPort& dp)
|
||||
|
@ -289,7 +265,7 @@ void AP0801::InitAlarm()
|
|||
{
|
||||
if (!Client)return;
|
||||
|
||||
if (!AlarmObj)AlarmObj = new Alarm();
|
||||
if (!AlarmObj) AlarmObj = new Alarm();
|
||||
Client->Register("Policy/AlarmSet", &Alarm::Set, AlarmObj);
|
||||
Client->Register("Policy/AlarmGet", &Alarm::Get, AlarmObj);
|
||||
|
||||
|
@ -380,32 +356,6 @@ void AP0801::OnLongPress(InputPort* port, bool down)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
网络使用流程:
|
||||
|
||||
5500网线检测
|
||||
网线连通
|
||||
启动DHCP
|
||||
作为Host
|
||||
Host为空 或 AP/STA_AP
|
||||
创建8266,加载配置
|
||||
Host为空
|
||||
作为Host
|
||||
else STA_AP
|
||||
工作模式 = AP
|
||||
打开8266
|
||||
STA/STA_AP
|
||||
SSID != null
|
||||
JoinWiFi
|
||||
else
|
||||
工作模式 = AP
|
||||
AP/STA_AP
|
||||
SetAP
|
||||
|
||||
令牌客户端主通道
|
||||
令牌客户端内网通道
|
||||
*/
|
||||
|
||||
/*
|
||||
NRF24L01+ (SPI3) | W5500 (SPI2) | TOUCH (SPI3)
|
||||
NSS | NSS | PD6 NSS
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
#include "Net\ITransport.h"
|
||||
#include "Net\Socket.h"
|
||||
|
||||
//#include "TokenNet\TokenClient.h"
|
||||
//#include "Message\ProxyFactory.h"
|
||||
#include "App\Alarm.h"
|
||||
|
||||
// 阿波罗0801/0802
|
||||
|
@ -21,8 +19,6 @@ public:
|
|||
List<OutputPort*> Outputs;
|
||||
List<InputPort*> Inputs;
|
||||
|
||||
NetworkInterface* Host; // 网络主机
|
||||
NetworkInterface* HostAP; // 网络主机
|
||||
Alarm* AlarmObj;
|
||||
|
||||
AP0801();
|
||||
|
@ -43,7 +39,6 @@ public:
|
|||
|
||||
void InitLeds();
|
||||
void InitButtons(const Delegate2<InputPort&, bool>& press);
|
||||
// void InitPort();
|
||||
|
||||
// 打开以太网W5500
|
||||
NetworkInterface* Create5500();
|
||||
|
|
148
Board/AP0802.cpp
148
Board/AP0802.cpp
|
@ -20,8 +20,6 @@ static TokenClient* Client = nullptr; // 令牌客户端
|
|||
|
||||
AP0802::AP0802()
|
||||
{
|
||||
Host = nullptr;
|
||||
HostAP = nullptr;
|
||||
Client = nullptr;
|
||||
|
||||
Data = nullptr;
|
||||
|
@ -162,33 +160,45 @@ NetworkInterface* AP0802::Create5500()
|
|||
{
|
||||
debug_printf("\r\nW5500::Create \r\n");
|
||||
|
||||
auto host = new W5500(Spi2, PE1, PD13);
|
||||
auto net = new W5500(Spi2, PE1, PD13);
|
||||
if(!net->Open())
|
||||
{
|
||||
delete net;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return host;
|
||||
net->EnableDNS();
|
||||
net->EnableDHCP();
|
||||
|
||||
return net;
|
||||
}
|
||||
|
||||
NetworkInterface* AP0802::Create8266(bool apOnly)
|
||||
{
|
||||
auto host = new Esp8266(COM4, PE0, PD3);
|
||||
auto esp = new Esp8266(COM4, PE0, PD3);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
host->WorkMode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
esp->WorkMode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -197,35 +207,17 @@ void AP0802::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = tc;
|
||||
|
||||
// 需要使用本地连接
|
||||
//client->UseLocal();
|
||||
//配置闹钟
|
||||
InitAlarm();
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
}
|
||||
|
||||
void AP0802::Register(int index, IDataPort& dp)
|
||||
|
@ -236,56 +228,14 @@ void AP0802::Register(int index, IDataPort& dp)
|
|||
ds.Register(index, dp);
|
||||
}
|
||||
|
||||
/*
|
||||
网络使用流程:
|
||||
|
||||
5500网线检测
|
||||
网线连通
|
||||
启动DHCP/DNS
|
||||
作为Host
|
||||
Host为空 或 AP/STA_AP
|
||||
创建8266,加载配置
|
||||
Host为空
|
||||
作为Host
|
||||
else STA_AP
|
||||
工作模式 = AP
|
||||
|
||||
令牌客户端主通道
|
||||
令牌客户端内网通道
|
||||
*/
|
||||
void OnInitNet(void* param)
|
||||
{
|
||||
auto& bsp = *(AP0802*)param;
|
||||
auto& bsp = *(AP0802*)param;
|
||||
|
||||
// 检查是否连接网线
|
||||
auto host = (W5500*)bsp.Create5500();
|
||||
// 软路由的DHCP要求很严格,必须先把自己IP设为0
|
||||
host->IP = IPAddress::Any();
|
||||
if (host->Open())
|
||||
{
|
||||
host->EnableDNS();
|
||||
host->EnableDHCP();
|
||||
bsp.Host = host;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete host;
|
||||
}
|
||||
bsp.Create5500();
|
||||
bsp.Create8266(false);
|
||||
|
||||
// 没有接网线,需要完整WiFi通道
|
||||
if (!bsp.Host)
|
||||
{
|
||||
auto esp = (WiFiInterface*)bsp.Create8266(false);
|
||||
if (esp)
|
||||
{
|
||||
// 未组网时,主机留空,仅保留AP主机
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
if (join && esp->IsStation())
|
||||
bsp.Host = esp;
|
||||
else
|
||||
bsp.HostAP = esp;
|
||||
}
|
||||
}
|
||||
Client->Open();
|
||||
}
|
||||
|
||||
void AP0802::InitNet()
|
||||
|
@ -375,32 +325,6 @@ void AP0802::OnLongPress(InputPort* port, bool down)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
网络使用流程:
|
||||
|
||||
5500网线检测
|
||||
网线连通
|
||||
启动DHCP
|
||||
作为Host
|
||||
Host为空 或 AP/STA_AP
|
||||
创建8266,加载配置
|
||||
Host为空
|
||||
作为Host
|
||||
else STA_AP
|
||||
工作模式 = AP
|
||||
打开8266
|
||||
STA/STA_AP
|
||||
SSID != null
|
||||
JoinWiFi
|
||||
else
|
||||
工作模式 = AP
|
||||
AP/STA_AP
|
||||
SetAP
|
||||
|
||||
令牌客户端主通道
|
||||
令牌客户端内网通道
|
||||
*/
|
||||
|
||||
/*
|
||||
NRF24L01+ (SPI3) | W5500 (SPI2)
|
||||
NSS | NSS
|
||||
|
|
|
@ -25,8 +25,6 @@ public:
|
|||
List<OutputPort*> Outputs;
|
||||
List<InputPort*> Inputs;
|
||||
|
||||
NetworkInterface* Host; // 网络主机
|
||||
NetworkInterface* HostAP; // 网络主机
|
||||
byte HardwareVer;
|
||||
|
||||
AP0802();
|
||||
|
|
|
@ -94,29 +94,33 @@ void IOK026X::InitLeds()
|
|||
}
|
||||
}
|
||||
|
||||
NetworkInterface* IOK026X::CreateNet()
|
||||
NetworkInterface* IOK026X::Create8266()
|
||||
{
|
||||
auto host = new Esp8266(COM2, PB2, PA1);
|
||||
auto esp = new Esp8266(COM2, PB2, PA1);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
Client->Register("GetAPs", &Esp8266::GetAPs, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
Client->Register("GetAPs", &Esp8266::GetAPs, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -125,43 +129,17 @@ void IOK026X::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
Client = tc;
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
|
||||
// 如果若干分钟后仍然没有打开令牌客户端,则重启系统
|
||||
Sys.AddTask(
|
||||
[](void* p) {
|
||||
auto & bsp = *(IOK026X*)p;
|
||||
auto & client = *bsp.Client;
|
||||
if (!client.Opened)
|
||||
{
|
||||
debug_printf("联网超时,准备重启Esp!\r\n\r\n");
|
||||
// Sys.Reboot();
|
||||
auto port = dynamic_cast<Esp8266*>(bsp.Host);
|
||||
port->Close();
|
||||
Sys.Sleep(1000);
|
||||
port->Open();
|
||||
}
|
||||
},
|
||||
this, 8 * 60 * 1000, -1, "联网检查");
|
||||
InitAlarm();
|
||||
}
|
||||
|
||||
void IOK026X::Register(int index, IDataPort& dp)
|
||||
|
@ -174,7 +152,7 @@ void IOK026X::Register(int index, IDataPort& dp)
|
|||
|
||||
void IOK026X::InitNet()
|
||||
{
|
||||
Host = CreateNet();
|
||||
Host = Create8266();
|
||||
}
|
||||
|
||||
static void OnAlarm(AlarmItem& item)
|
||||
|
|
|
@ -35,7 +35,7 @@ public:
|
|||
|
||||
byte LedStat(byte showmode);
|
||||
|
||||
NetworkInterface* CreateNet();
|
||||
NetworkInterface* Create8266();
|
||||
|
||||
void InitClient();
|
||||
void InitNet();
|
||||
|
|
|
@ -95,27 +95,30 @@ void IOK027X::InitLeds()
|
|||
|
||||
NetworkInterface* IOK027X::Create8266(Pin power)
|
||||
{
|
||||
auto host = new Esp8266(COM2, power, PA1);
|
||||
auto esp = new Esp8266(COM2, power, PA1);
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
//auto host = new Esp8266(COM4, PE2, PD3);
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
Client->Register("GetAPs", &Esp8266::GetAPs, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
Client->Register("GetAPs", &Esp8266::GetAPs, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -124,26 +127,17 @@ void IOK027X::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
Client = tc;
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
InitAlarm();
|
||||
}
|
||||
|
||||
void IOK027X::Register(int index, IDataPort& dp)
|
||||
|
|
|
@ -116,27 +116,27 @@ void IOK0612::InitButtons(const Delegate2<InputPort&, bool>& press)
|
|||
|
||||
NetworkInterface* IOK0612::Create8266()
|
||||
{
|
||||
// auto host = new Esp8266(COM2, PB2, PA1); // 触摸开关的
|
||||
auto host = new Esp8266(COM2, PB12, PA1);
|
||||
// auto esp = new Esp8266(COM2, PB2, PA1); // 触摸开关的
|
||||
auto esp = new Esp8266(COM2, PB12, PA1);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
host->Open();
|
||||
esp->Open();
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -145,32 +145,17 @@ void IOK0612::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
Client = tc;
|
||||
|
||||
InitAlarm();
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
}
|
||||
|
||||
void IOK0612::Register(int index, IDataPort& dp)
|
||||
|
|
|
@ -116,27 +116,31 @@ void NH3_0317::InitButtons(const Delegate2<InputPort&, bool>& press)
|
|||
|
||||
NetworkInterface* NH3_0317::Create8266()
|
||||
{
|
||||
// auto host = new Esp8266(COM2, PB2, PA1); // 触摸开关的
|
||||
auto host = new Esp8266(COM3, P0, PA5);
|
||||
// auto esp = new Esp8266(COM2, PB2, PA1); // 触摸开关的
|
||||
auto esp = new Esp8266(COM3, P0, PA5);
|
||||
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
//if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
//if (!join) esp->Mode = NetworkType::AP;
|
||||
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
host->Open();
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
return host;
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -151,30 +155,17 @@ void NH3_0317::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
client->UseLocal();
|
||||
Client = client;
|
||||
Client->MaxNotActive = 480000;
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
if (Data && Size > 0)
|
||||
{
|
||||
auto& ds = Client->Store;
|
||||
ds.Data.Set(Data, Size);
|
||||
}
|
||||
Client = tc;
|
||||
|
||||
InitAlarm();
|
||||
}
|
||||
|
||||
void NH3_0317::Register(int index, IDataPort& dp)
|
||||
|
|
|
@ -13,16 +13,16 @@
|
|||
#include "Device\RTC.h"
|
||||
|
||||
PA0903* PA0903::Current = nullptr;
|
||||
static TokenClient* Client = nullptr; // 令牌客户端
|
||||
|
||||
PA0903::PA0903()
|
||||
{
|
||||
LedPins.Add(PB1);
|
||||
LedPins.Add(PB14);
|
||||
|
||||
Host = nullptr;
|
||||
Client = nullptr;
|
||||
ProxyFac = nullptr;
|
||||
AlarmObj = nullptr;
|
||||
Client = nullptr;
|
||||
ProxyFac = nullptr;
|
||||
AlarmObj = nullptr;
|
||||
|
||||
Data = nullptr;
|
||||
Size = 0;
|
||||
|
@ -90,33 +90,45 @@ NetworkInterface* PA0903::Create5500()
|
|||
{
|
||||
debug_printf("\r\nW5500::Create \r\n");
|
||||
|
||||
auto host = new W5500(Spi1, PA8, PA0);
|
||||
auto net = new W5500(Spi1, PA8, PA0);
|
||||
if(!net->Open())
|
||||
{
|
||||
delete net;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return host;
|
||||
net->EnableDNS();
|
||||
net->EnableDHCP();
|
||||
|
||||
return net;
|
||||
}
|
||||
|
||||
NetworkInterface* PA0903::Create8266()
|
||||
{
|
||||
auto host = new Esp8266(COM4, PE2, PD3);
|
||||
auto esp = new Esp8266(COM4, PE2, PD3);
|
||||
// 初次需要指定模式 否则为 Wire
|
||||
bool join = host->SSID && *host->SSID;
|
||||
// host->Mode = NetworkType::Station;
|
||||
// if (!join) host->Mode = NetworkType::AP;
|
||||
bool join = esp->SSID && *esp->SSID;
|
||||
// esp->Mode = NetworkType::Station;
|
||||
// if (!join) esp->Mode = NetworkType::AP;
|
||||
if (!join)
|
||||
{
|
||||
*host->SSID = "WSWL";
|
||||
*host->Pass = "12345678";
|
||||
*esp->SSID = "WSWL";
|
||||
*esp->Pass = "12345678";
|
||||
|
||||
host->Mode = NetworkType::STA_AP;
|
||||
host->WorkMode = NetworkType::STA_AP;
|
||||
esp->Mode = NetworkType::STA_AP;
|
||||
esp->WorkMode = NetworkType::STA_AP;
|
||||
}
|
||||
|
||||
//Sys.AddTask(SetWiFiTask, this, 0, -1, "SetWiFi");
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, host);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, host);
|
||||
host->Open();
|
||||
if(!esp->Open())
|
||||
{
|
||||
delete esp;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return host;
|
||||
Client->Register("SetWiFi", &Esp8266::SetWiFi, esp);
|
||||
Client->Register("GetWiFi", &Esp8266::GetWiFi, esp);
|
||||
|
||||
return esp;
|
||||
}
|
||||
|
||||
/******************************** Token ********************************/
|
||||
|
@ -125,25 +137,17 @@ void PA0903::InitClient()
|
|||
{
|
||||
if (Client) return;
|
||||
|
||||
auto tk = TokenConfig::Current;
|
||||
// 初始化令牌网
|
||||
auto tk = TokenConfig::Create("smart.wslink.cn", NetType::Udp, 33333, 3377);
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
client->Cfg = tk;
|
||||
auto tc = TokenClient::CreateFast(Buffer(Data, Size));
|
||||
tc->Cfg = tk;
|
||||
tc->MaxNotActive = 8 * 60 * 1000;
|
||||
|
||||
Client = client;
|
||||
Client = tc;
|
||||
|
||||
InitAlarm();
|
||||
// 重启
|
||||
Client->Register("Gateway/Restart", &TokenClient::InvokeRestart, Client);
|
||||
// 重置
|
||||
Client->Register("Gateway/Reset", &TokenClient::InvokeReset, Client);
|
||||
// 设置远程地址
|
||||
Client->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, Client);
|
||||
// 获取远程配置信息
|
||||
Client->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, Client);
|
||||
// 获取所有Ivoke命令
|
||||
Client->Register("Api/All", &TokenClient::InvokeGetAllApi, Client);
|
||||
}
|
||||
|
||||
void PA0903::Register(int index, IDataPort& dp)
|
||||
|
@ -154,22 +158,20 @@ void PA0903::Register(int index, IDataPort& dp)
|
|||
ds.Register(index, dp);
|
||||
}
|
||||
|
||||
//void OnInitNet(void* param)
|
||||
//{
|
||||
// auto& bsp = *(PA0903*)param;
|
||||
//
|
||||
// /*// 检查是否连接网线
|
||||
// auto host = (W5500*)bsp.Create5500();
|
||||
// // 软路由的DHCP要求很严格,必须先把自己IP设为0
|
||||
// host->IP = IPAddress::Any();
|
||||
//
|
||||
// host->EnableDNS();
|
||||
// host->EnableDHCP();
|
||||
// bsp.Host = host;*/
|
||||
//
|
||||
//
|
||||
//
|
||||
//}
|
||||
void OnInitNet(void* param)
|
||||
{
|
||||
auto& bsp = *(PA0903*)param;
|
||||
|
||||
bsp.Create5500();
|
||||
bsp.Create8266();
|
||||
|
||||
Client->Open();
|
||||
}
|
||||
|
||||
void PA0903::InitNet()
|
||||
{
|
||||
Sys.AddTask(OnInitNet, this, 0, -1, "InitNet");
|
||||
}
|
||||
|
||||
void PA0903::InitProxy()
|
||||
{
|
||||
|
@ -196,7 +198,7 @@ static void OnAlarm(AlarmItem& item)
|
|||
|
||||
if (bs[1] == 0x06)
|
||||
{
|
||||
auto client = PA0903::Current->Client;
|
||||
auto client = Client;
|
||||
client->Store.Write(bs[2], bs.Sub(3, bs[0] - 2));
|
||||
|
||||
// 主动上报状态
|
||||
|
@ -216,13 +218,6 @@ void PA0903::InitAlarm()
|
|||
AlarmObj->Start();
|
||||
}
|
||||
|
||||
void PA0903::InitNet()
|
||||
{
|
||||
Create5500();
|
||||
Create8266();
|
||||
Client->Open();
|
||||
}
|
||||
|
||||
void PA0903::Restore()
|
||||
{
|
||||
if (Client) Client->Reset("按键重置");
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include "Net\Socket.h"
|
||||
|
||||
#include "Device\RTC.h"
|
||||
#include "TokenNet\TokenClient.h"
|
||||
#include "Message\ProxyFactory.h"
|
||||
#include "App\Alarm.h"
|
||||
|
||||
|
@ -23,9 +22,6 @@ public:
|
|||
List<OutputPort*> Outputs;
|
||||
List<InputPort*> Inputs;
|
||||
|
||||
NetworkInterface* Host; // 网络主机
|
||||
//NetworkInterface* HostAP; // 网络主机
|
||||
TokenClient* Client; // 令牌客户端
|
||||
ProxyFactory* ProxyFac; // 透传管理器
|
||||
Alarm* AlarmObj;
|
||||
|
||||
|
|
|
@ -365,9 +365,7 @@ void W5500::Init(Spi* spi, Pin irq, Pin rst)
|
|||
Irq.Pull = InputPort::UP;
|
||||
//Irq.Mode = InputPort::Rising;
|
||||
Irq.HardEvent = true;
|
||||
//Irq.Set(irq);
|
||||
Irq.Init(irq, true);
|
||||
//if(!Irq.Register(OnIRQ, this)) Irq.HardEvent = false;
|
||||
Irq.Press.Bind(&W5500::OnIRQ, this);
|
||||
Irq.UsePress();
|
||||
}
|
||||
|
@ -507,7 +505,7 @@ bool W5500::OnLink(uint retry)
|
|||
// 为解决芯片有时候无法接收数据的问题,需要守护任务辅助
|
||||
if(!TaskID)
|
||||
{
|
||||
int time = (Irq.Empty() || !Irq.HardEvent) ? 10 : 500;
|
||||
int time = (Irq.Empty() || !Irq.HardEvent) ? 10 : -1;
|
||||
TaskID = Sys.AddTask([](void* p){ ((W5500*)p)->OnIRQ(); }, this, time, time, "W5500中断");
|
||||
auto task = Task::Get(TaskID);
|
||||
task->MaxDeepth = 2; // 以太网允许重入,因为有时候在接收里面等待下一次接收
|
||||
|
|
|
@ -193,7 +193,7 @@ void TokenClient::CheckNet()
|
|||
// 在该接口上创建控制器
|
||||
if(!flag)
|
||||
{
|
||||
debug_printf("TokenClient::CheckNet %s 创建本地监听\r\n", nis[k]->Name);
|
||||
debug_printf("TokenClient::CheckNet %s 创建本地监听 ", nis[k]->Name);
|
||||
|
||||
NetUri uri(NetType::Udp, IPAddress::Broadcast(), Cfg->Port);
|
||||
auto ctrl = AddControl(*this, nis[k], uri, Cfg->Port);
|
||||
|
@ -201,6 +201,12 @@ void TokenClient::CheckNet()
|
|||
{
|
||||
ctrl->Received = _LocalReceive;
|
||||
ctrl->Open();
|
||||
|
||||
debug_printf("成功\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_printf("失败\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1121,6 +1127,29 @@ void TokenClient::Register(cstring action, InvokeHandler handler, void* param)
|
|||
}
|
||||
}
|
||||
|
||||
// 快速建立令牌客户端,注册默认Api
|
||||
TokenClient* TokenClient::CreateFast(const Buffer& store)
|
||||
{
|
||||
auto tc = new TokenClient();
|
||||
|
||||
// 重启
|
||||
tc->Register("Gateway/Restart", &TokenClient::InvokeRestart, tc);
|
||||
// 重置
|
||||
tc->Register("Gateway/Reset", &TokenClient::InvokeReset, tc);
|
||||
// 设置远程地址
|
||||
tc->Register("Gateway/SetRemote", &TokenClient::InvokeSetRemote, tc);
|
||||
// 获取远程配置信息
|
||||
tc->Register("Gateway/GetRemote", &TokenClient::InvokeGetRemote, tc);
|
||||
// 获取所有Invoke命令
|
||||
tc->Register("Api/All", &TokenClient::InvokeGetAllApi, tc);
|
||||
|
||||
if(store.Length()) tc->Store.Data.Set(store.GetBuffer(), store.Length());
|
||||
|
||||
tc->UseLocal();
|
||||
|
||||
return tc;
|
||||
}
|
||||
|
||||
bool TokenClient::InvokeRestart(void * param, const Pair& args, Stream& result)
|
||||
{
|
||||
|
||||
|
|
|
@ -91,12 +91,15 @@ public:
|
|||
|
||||
static TokenClient* Current;
|
||||
|
||||
// 快速建立令牌客户端,注册默认Api
|
||||
static TokenClient* CreateFast(const Buffer& store);
|
||||
|
||||
// 重启,重置
|
||||
static bool InvokeRestart(void * param, const Pair& args, Stream& result);
|
||||
static bool InvokeReset(void * param, const Pair& args, Stream& result);
|
||||
//设置远程服务器地址
|
||||
// 设置远程服务器地址
|
||||
static bool InvokeSetRemote(void * param, const Pair& args, Stream& result);
|
||||
//获取远程服务器地址
|
||||
// 获取远程服务器地址
|
||||
static bool InvokeGetRemote(void * param, const Pair& args, Stream& result);
|
||||
// 获取所有API
|
||||
static bool InvokeGetAllApi(void * param, const Pair& args, Stream& result);
|
||||
|
|
Loading…
Reference in New Issue