主机收到读写响应时,不用再次响应
This commit is contained in:
parent
ca69c35a8b
commit
d72a15e8e3
|
@ -1,6 +1,6 @@
|
|||
#include "DataMessage.h"
|
||||
|
||||
DataMessage::DataMessage(const Message& msg, Stream& dest) : _Src(msg.ToStream()), _Dest(dest)
|
||||
DataMessage::DataMessage(const Message& msg, Stream& dest) : _Src(msg.ToStream()), _Dest(&dest)
|
||||
{
|
||||
Offset = _Src.ReadEncodeInt();
|
||||
Length = 0;
|
||||
|
@ -20,9 +20,11 @@ bool DataMessage::ReadData(const DataStore& ds)
|
|||
// 读取数据
|
||||
bool DataMessage::ReadData(const Array& bs)
|
||||
{
|
||||
if(!_Dest) return false;
|
||||
|
||||
TS("DataMessage::ReadData");
|
||||
|
||||
auto& ms = _Dest;
|
||||
auto& ms = *_Dest;
|
||||
int remain = bs.Length() - Offset;
|
||||
if(remain < 0)
|
||||
{
|
||||
|
@ -48,31 +50,31 @@ bool DataMessage::WriteData(DataStore& ds, bool withData)
|
|||
TS("DataMessage::WriteData");
|
||||
|
||||
Length = _Src.Remain();
|
||||
if(!Write(ds.Data.Length() - Offset)) return false;
|
||||
if(_Dest && !Write(ds.Data.Length() - Offset)) return false;
|
||||
|
||||
Array dat(_Src.Current(), Length);
|
||||
ds.Write(Offset, dat);
|
||||
|
||||
// 如果携带数据,则把这一段数据附加到后面
|
||||
if(withData) _Dest.Write(ds.Data.GetBuffer(), Offset, Length);
|
||||
if(_Dest && withData) _Dest->Write(ds.Data.GetBuffer(), Offset, Length);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 写入数据
|
||||
bool DataMessage::WriteData(Array& bs, bool withData)
|
||||
bool DataMessage::WriteData(Array bs, bool withData)
|
||||
{
|
||||
TS("DataMessage::WriteData");
|
||||
|
||||
// 剩余可写字节数
|
||||
Length = _Src.Remain();
|
||||
if(!Write(bs.Length() - Offset)) return false;
|
||||
if(_Dest && !Write(bs.Length() - Offset)) return false;
|
||||
|
||||
Array dat(_Src.Current(), Length);
|
||||
bs.Copy(dat, Offset);
|
||||
|
||||
// 如果携带数据,则把这一段数据附加到后面
|
||||
if(withData) _Dest.Write(bs.GetBuffer(), Offset, Length);
|
||||
if(_Dest && withData) _Dest->Write(bs.GetBuffer(), Offset, Length);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -80,7 +82,7 @@ bool DataMessage::WriteData(Array& bs, bool withData)
|
|||
// 写入数据
|
||||
bool DataMessage::Write(int remain)
|
||||
{
|
||||
auto& ms = _Dest;
|
||||
auto& ms = *_Dest;
|
||||
// 剩余可写字节数
|
||||
if(remain < 0)
|
||||
{
|
||||
|
|
|
@ -12,17 +12,18 @@ public:
|
|||
uint Offset;
|
||||
uint Length;
|
||||
|
||||
DataMessage(const Message& msg);
|
||||
DataMessage(const Message& msg, Stream& dest);
|
||||
|
||||
bool ReadData(const DataStore& ds);
|
||||
bool WriteData(DataStore& ds, bool withData);
|
||||
|
||||
bool ReadData(const Array& bs);
|
||||
bool WriteData(Array& bs, bool withData);
|
||||
bool WriteData(Array bs, bool withData);
|
||||
|
||||
private:
|
||||
Stream _Src;
|
||||
Stream& _Dest;
|
||||
Stream* _Dest;
|
||||
|
||||
bool Write(int remain);
|
||||
};
|
||||
|
|
|
@ -124,19 +124,19 @@ bool TinyServer::OnReceive(TinyMessage& msg)
|
|||
// 修改最后读取时间
|
||||
if(msg.Reply) dv->LastRead = Sys.Seconds();
|
||||
|
||||
OnReadReply(msg, *dv);
|
||||
if(msg.Reply) OnReadReply(msg, *dv);
|
||||
break;
|
||||
case 6:
|
||||
// 系统指令不会被转发,这里修改为用户指令
|
||||
msg.Code = 0x16;
|
||||
case 0x16:
|
||||
if(!msg.Reply)
|
||||
if(msg.Reply)
|
||||
OnWriteReply(msg, *dv);
|
||||
else
|
||||
{
|
||||
auto rs = msg.CreateReply();
|
||||
if(OnWrite(msg, rs, *dv)) Send(rs);
|
||||
}
|
||||
else
|
||||
OnWriteReply(msg, *dv);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -171,9 +171,6 @@ bool TinyServer::Dispatch(TinyMessage& msg)
|
|||
bool rt = false; // 是否响应远程
|
||||
bool fw = true; // 是否转发给本地
|
||||
|
||||
// 响应消息不转发
|
||||
//if(msg.Reply) fw = false;
|
||||
|
||||
auto rs = msg.CreateReply();
|
||||
|
||||
// 缓存内存操作指令
|
||||
|
@ -198,22 +195,10 @@ bool TinyServer::Dispatch(TinyMessage& msg)
|
|||
}
|
||||
case 6:
|
||||
case 0x16:
|
||||
{
|
||||
/*auto now = Sys.Ms();
|
||||
rt = OnWrite(msg, rs, *dv);
|
||||
|
||||
// 避免频繁写入。间隔毫秒数
|
||||
if(dv->LastWrite + 500 < now)
|
||||
dv->LastWrite = now;
|
||||
else
|
||||
fw = false;*/
|
||||
rt = false;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//debug_printf("fw=%d \r\n", fw);
|
||||
if(fw && !rs.Error)
|
||||
{
|
||||
// 非休眠设备直接发送
|
||||
|
@ -539,15 +524,11 @@ bool TinyServer::OnWrite(const Message& msg, Message& rs, Device& dv)
|
|||
|
||||
bool rt = true;
|
||||
if(dm.Offset < 64)
|
||||
{
|
||||
auto bs = dv.GetStore();
|
||||
rt = dm.WriteData(bs, false);
|
||||
}
|
||||
rt = dm.WriteData(dv.GetStore(), false);
|
||||
else if(dm.Offset < 128)
|
||||
{
|
||||
dm.Offset -= 64;
|
||||
auto bs = dv.GetConfig();
|
||||
rt = dm.WriteData(bs, false);
|
||||
rt = dm.WriteData(dv.GetConfig(), false);
|
||||
}
|
||||
|
||||
rs.Error = !rt;
|
||||
|
@ -575,28 +556,17 @@ bool TinyServer::OnWriteReply(const Message& msg, Device& dv)
|
|||
|
||||
TS("TinyServer::OnWriteReply");
|
||||
|
||||
auto rs = ((TinyMessage&)msg).CreateReply();
|
||||
auto ms = rs.ToStream();
|
||||
DataMessage dm(msg);
|
||||
|
||||
DataMessage dm(msg, ms);
|
||||
|
||||
bool rt = true;
|
||||
if(dm.Offset < 64)
|
||||
{
|
||||
auto bs = dv.GetStore();
|
||||
rt = dm.WriteData(bs, false);
|
||||
}
|
||||
dm.WriteData(dv.GetStore(), false);
|
||||
else if(dm.Offset < 128)
|
||||
{
|
||||
dm.Offset -= 64;
|
||||
auto bs = dv.GetConfig();
|
||||
rt = dm.WriteData(bs, false);
|
||||
dm.WriteData(dv.GetConfig(), false);
|
||||
}
|
||||
|
||||
rs.Error = !rt;
|
||||
rs.Length = ms.Position();
|
||||
|
||||
return Send(rs);
|
||||
return true;
|
||||
}
|
||||
|
||||
//设置zigbee的通道,2401无效
|
||||
|
|
Loading…
Reference in New Issue