Device 不允许手动 Load 避免重复 Load 造成设备数量不对
This commit is contained in:
parent
cb73ba8580
commit
5c6585d9a4
|
@ -63,12 +63,12 @@ void TinyServer::Start()
|
||||||
//const uint DevSize = 4 << 10;
|
//const uint DevSize = 4 << 10;
|
||||||
//pDevMgmt->SetFlashCfg(DevAddr,DevSize);
|
//pDevMgmt->SetFlashCfg(DevAddr,DevSize);
|
||||||
|
|
||||||
if (DevicesManagement::Current)
|
pDevMgmt = DevicesManagement::CreateDevMgmt();
|
||||||
pDevMgmt = DevicesManagement::Current;
|
|
||||||
else
|
|
||||||
pDevMgmt = new DevicesManagement();
|
|
||||||
|
|
||||||
auto count = pDevMgmt->LoadDev();
|
//if (DevicesManagement::Current)
|
||||||
|
// pDevMgmt = DevicesManagement::Current;
|
||||||
|
//else
|
||||||
|
// pDevMgmt = new DevicesManagement();
|
||||||
|
|
||||||
// 添加网关这一条设备信息
|
// 添加网关这一条设备信息
|
||||||
if (!pDevMgmt->FindDev(Cfg->Address))
|
if (!pDevMgmt->FindDev(Cfg->Address))
|
||||||
|
|
|
@ -5,11 +5,12 @@ DevicesManagement* DevicesManagement::Current = nullptr;
|
||||||
|
|
||||||
/******************************** 功能代码 ********************************/
|
/******************************** 功能代码 ********************************/
|
||||||
|
|
||||||
DevicesManagement::DevicesManagement()
|
//DevicesManagement::DevicesManagement()
|
||||||
{
|
//{
|
||||||
//DevArr.SetLength(0);
|
// //DevArr.SetLength(0);
|
||||||
Current = this;
|
// Current = this;
|
||||||
}
|
// LoadDev();
|
||||||
|
//}
|
||||||
|
|
||||||
DevicesManagement::~DevicesManagement()
|
DevicesManagement::~DevicesManagement()
|
||||||
{
|
{
|
||||||
|
@ -574,3 +575,12 @@ void DevicesManagement::MaintainState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DevicesManagement* DevicesManagement::CreateDevMgmt()
|
||||||
|
{
|
||||||
|
if (Current)return Current;
|
||||||
|
Current = new DevicesManagement();
|
||||||
|
Current->LoadDev();
|
||||||
|
return Current;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
static bool InvokeDelete(void * param, const Pair& args, Stream& result);
|
static bool InvokeDelete(void * param, const Pair& args, Stream& result);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DevicesManagement();
|
// DevicesManagement();
|
||||||
~DevicesManagement();
|
~DevicesManagement();
|
||||||
|
|
||||||
bool SetFlashCfg(uint addr, uint size);
|
bool SetFlashCfg(uint addr, uint size);
|
||||||
|
@ -32,11 +32,12 @@ public:
|
||||||
Device* FindDev(byte id)const;
|
Device* FindDev(byte id)const;
|
||||||
Device* FindDev(const Buffer& hardid) const;
|
Device* FindDev(const Buffer& hardid) const;
|
||||||
|
|
||||||
int LoadDev();
|
|
||||||
void ClearDev();
|
void ClearDev();
|
||||||
void ShowDev();
|
void ShowDev();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// 不允许外部调用 避免重复LoadDev()
|
||||||
|
int LoadDev();
|
||||||
// 外部操作使用 DeviceRequest
|
// 外部操作使用 DeviceRequest
|
||||||
void SaveDev();
|
void SaveDev();
|
||||||
bool DeleteDev(byte id);
|
bool DeleteDev(byte id);
|
||||||
|
@ -79,6 +80,9 @@ private:
|
||||||
|
|
||||||
DevPrsCallback _DevProcess = nullptr;
|
DevPrsCallback _DevProcess = nullptr;
|
||||||
void * _ClbkParam = nullptr;
|
void * _ClbkParam = nullptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static DevicesManagement* CreateDevMgmt();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "Security\Crc.h"
|
#include "Security\Crc.h"
|
||||||
|
|
||||||
// 循环间隔
|
// 循环间隔
|
||||||
#define LOOP_Interval 10000
|
#define LOOP_Interval 20000
|
||||||
|
|
||||||
bool TokenToTiny(const TokenMessage& msg, TinyMessage& msg2);
|
bool TokenToTiny(const TokenMessage& msg, TinyMessage& msg2);
|
||||||
void TinyToToken(const TinyMessage& msg, TokenMessage& msg2);
|
void TinyToToken(const TinyMessage& msg, TokenMessage& msg2);
|
||||||
|
@ -37,6 +37,7 @@ Gateway::~Gateway()
|
||||||
void Gateway::Start()
|
void Gateway::Start()
|
||||||
{
|
{
|
||||||
if (Running) return;
|
if (Running) return;
|
||||||
|
Running = true;
|
||||||
|
|
||||||
TS("Gateway::Start");
|
TS("Gateway::Start");
|
||||||
|
|
||||||
|
@ -50,13 +51,12 @@ void Gateway::Start()
|
||||||
Client->Param = this;
|
Client->Param = this;
|
||||||
debug_printf("\r\nGateway::Start \r\n");
|
debug_printf("\r\nGateway::Start \r\n");
|
||||||
|
|
||||||
Server->Start();
|
pDevMgmt = DevicesManagement::CreateDevMgmt();
|
||||||
|
|
||||||
// 如果全局都没有设备列表,那就直接创建一个
|
// 如果全局都没有设备列表,那就直接创建一个
|
||||||
if (DevicesManagement::Current)
|
//if (DevicesManagement::Current)
|
||||||
pDevMgmt = DevicesManagement::Current;
|
// pDevMgmt = DevicesManagement::Current;
|
||||||
else
|
//else
|
||||||
pDevMgmt = new DevicesManagement();
|
// pDevMgmt = new DevicesManagement();
|
||||||
|
|
||||||
// 设备列表服务于Token 保存token的“联系方式”
|
// 设备列表服务于Token 保存token的“联系方式”
|
||||||
//pDevMgmt->Port = Client;
|
//pDevMgmt->Port = Client;
|
||||||
|
@ -64,21 +64,47 @@ void Gateway::Start()
|
||||||
|
|
||||||
if (pDevMgmt->Length() == 0)
|
if (pDevMgmt->Length() == 0)
|
||||||
{
|
{
|
||||||
// 如果全局设备列表为空,则添加一条Addr=1的设备
|
// // 如果全局设备列表为空,则添加一条Addr=1的设备
|
||||||
auto dv = new Device();
|
// auto dv = new Device();
|
||||||
dv->Address = 1;
|
// dv->Address = 1;
|
||||||
dv->Kind = Sys.Code;
|
// dv->Kind = Sys.Code;
|
||||||
dv->LastTime = Sys.Seconds();
|
// dv->LastTime = Sys.Seconds();
|
||||||
|
//
|
||||||
|
// dv->HardID = Sys.ID;
|
||||||
|
// dv->Name = Sys.Name;
|
||||||
|
//
|
||||||
|
// //pDevMgmt->PushDev(dv);
|
||||||
|
// // 标记为永久在线设备
|
||||||
|
// dv->Flag.BitFlag.OnlineAlws = 1;
|
||||||
|
// pDevMgmt->DeviceRequest(DeviceAtions::Register, dv);
|
||||||
|
|
||||||
dv->HardID = Sys.ID;
|
|
||||||
dv->Name = Sys.Name;
|
ushort kinds[] = { 0x0201,0x0202,0x0203,0x0431 };
|
||||||
|
byte ids[12];
|
||||||
|
Buffer bufids(ids, sizeof(ids));
|
||||||
|
bufids = Sys.ID;
|
||||||
|
byte Addr = Sys.Ms();
|
||||||
|
|
||||||
|
for (int i = 0; i < ArrayLength(kinds); i++)
|
||||||
|
{
|
||||||
|
// 如果全局设备列表为空,则添加一条Addr=1的设备
|
||||||
|
auto dv2 = new Device();
|
||||||
|
dv2->Address = Addr + i;
|
||||||
|
dv2->Kind = kinds[i];
|
||||||
|
dv2->LastTime = Sys.Seconds();
|
||||||
|
|
||||||
|
ids[11] += Sys.Ms();
|
||||||
|
dv2->HardID = ids;
|
||||||
|
dv2->Name = "测试设备";
|
||||||
|
|
||||||
//pDevMgmt->PushDev(dv);
|
//pDevMgmt->PushDev(dv);
|
||||||
// 标记为永久在线设备
|
// 标记为永久在线设备
|
||||||
dv->Flag.BitFlag.OnlineAlws = 1;
|
dv2->Flag.BitFlag.OnlineAlws = 0;
|
||||||
pDevMgmt->DeviceRequest(DeviceAtions::Register, dv);
|
pDevMgmt->DeviceRequest(DeviceAtions::Register, dv2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Server->Start();
|
||||||
Client->Open();
|
Client->Open();
|
||||||
_task = Sys.AddTask(Loop, this, 10000, LOOP_Interval, "设备任务");
|
_task = Sys.AddTask(Loop, this, 10000, LOOP_Interval, "设备任务");
|
||||||
|
|
||||||
|
@ -331,6 +357,6 @@ void Gateway::Loop(void* param)
|
||||||
gw->SetMode(0);
|
gw->SetMode(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// gw->pDevMgmt->MaintainState();
|
gw->pDevMgmt->MaintainState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue