前言:https://bbs.wireless-tech.cn/d/472-mode-id-opcodeupper-transport-layer/4
我在看完【BLE Mesh各层帧包格式详解】的前后两篇文章中没有找到关于model id的帧格式,一直到access PDU解释就停止了,不过这个PDU里应该就剩下消息的opcode和对应消息的payload了。所以model id在发送消息的时候是放在哪个地方呢?我在看上面的链接后没看到想要的答案。
换言之,我在应用层定义发送消息的函数时,我的形参上需要model id吗?还是只需要opcode就好了?
关于发送消息时model id的使用
darkerb model id和opcode都要,但是你说的发送消息函数是哪个?
int al_btmesh_msg_send(u16 addr_dst, u16 addr_src, u32 opcode, u8 *data,u16 len, u16 net_key_index, u16 app_key_index, u8 ttl, void (*cb)(int state, void *arg), void *arg);
这是我定义的通用消息发送函数,里面有目的地址(单播/组/虚拟地址),源地址(单播),操作码,payload内容,payload长度,netkey index,appkey index,ttl, 消息发送回调函数。所以按照你的说法是我仍需要再添加一个目标的model id对吧?
原来我的链接是无效的,我重新贴一个,抱歉https://bbs.wireless-tech.cn/d/472-mode-id-opcodeupper-transport-layer
另外因为我在这篇文章中看到有这个说法是opcode包含了操作码和model id,但是我看不出来是怎么拼在一起的https://blog.csdn.net/wang_yunpeng/article/details/103478672
- 已编辑
darkerb
他的理解是错的,操作码是操作码,模型ID是模型ID,一般模型ID在创建元素就已经初始化,在发送的时候没必要做为形参传入了,我认为发送函数便宜点,目标地址是谁,发送什么就行了。其他你在函数内部再去判断。
你可以参考我写的《创建红旭Model》和《Vendor Model浅析》,应该会更加了解一些。
而且对方收到数据并不会判断Model ID,只会判断是不是发给它,而要发给元素下的哪个模型,它是通过操作码来判断的。因为一个元素下不能存在两种同样类型的模型。不同的模型,其操作码都是不一样的。
感谢解答