gpt4 book ai didi

c - Z-wave 协议(protocol)与 C : Questions about Z-wave frame structure & programming in general

转载 作者:太空狗 更新时间:2023-10-29 17:20:31 25 4
gpt4 key购买 nike

(在我问我的问题之前;我真的不知道是否有人可以回答我的问题,因为 Z-wave 协议(protocol)应该是 secret 信息,但如果它确实违反了任何类型的法规,那么我会觉得免费删除此帖子。)

我目前正在尝试编写一个 C 程序,它简单地构造一个由原始二进制数据组成的 Z-wave 消息,然后将该消息发送到连接 Z-wave Controller 的 USB 接口(interface)(我正在使用 AEOTEC Z- Aeon Labs 的 Stick USB 加密狗)。我也在使用 this指南作为引用,并尝试用纯 C 语言重写示例代码。但是,如果您查看指南,特别是他试图发送到 USB Controller 的消息:

/*
0x01, 0x09, 0x00, 0x13, nodeId, 0x03, 0x20, 0x01, state, 0x05, checksum
*/

...也许只是我的问题,但似乎缺少来自通常 Z 波框架的一些信息。我的猜测是前 4 个字节代表 Home ID,后跟节点 ID,但我无法弄清楚之后的“0x03”是什么意思,假设该字节之后的其余部分代表“基本”命令类(' 0x20',1 字节)和相应的“设置”应用命令('0x01',1 字节)。校验和位之前的“0x05”代表什么?那么传输 header 信息呢,为什么不包括在内?似乎他不需要包含它……或者我只是完全错误地解释了数据包。谁能赐教一下?

另外,如果您从 USB 端口读取数据(例如,使用 C 中的 open() 和 read() 命令),您只能从 USB 端口检索应用层信息,这是否正确?

提前致谢!

最佳答案

我认为通过学习您可以节省大量时间和精力OpenZWave's source code .这是一个用于 ZWave 的开源 C++ 库,它非常成熟且功能齐全。您可以从纯 C 轻松使用它。

您要问的部分内容可以在 Msg class constructor 中看到它构造帧的开始(0x01),然后是消息长度(0x09 == 9 字节)、消息类型(0x00 == REQUEST)和函数(FUNC_ID_ZW_SEND_DATA == 0x013),然后是目标节点 ID,然后是实际节点 ID命令体,我想这是一个基本命令:

./src/Defs.h:#define COMMAND_CLASS_BASIC 0x20:

bool Basic::SetValue
...
Msg* msg = new Msg( "BasicCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true );
msg->SetInstance( this, _value.GetID().GetInstance() );
msg->Append( GetNodeId() );
msg->Append( 3 );
msg->Append( GetCommandClassId() );
msg->Append( BasicCmd_Set );
msg->Append( value->GetValue() );
msg->Append( GetDriver()->GetTransmitOptions() );
GetDriver()->SendMsg( msg, Driver::MsgQueue_Send );
return true;
}

return false;
}

关于c - Z-wave 协议(protocol)与 C : Questions about Z-wave frame structure & programming in general,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com