前言: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就好了?

    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对吧?

        darkerb
        他的理解是错的,操作码是操作码,模型ID是模型ID,一般模型ID在创建元素就已经初始化,在发送的时候没必要做为形参传入了,我认为发送函数便宜点,目标地址是谁,发送什么就行了。其他你在函数内部再去判断。

        你可以参考我写的《创建红旭Model》和《Vendor Model浅析》,应该会更加了解一些。

        而且对方收到数据并不会判断Model ID,只会判断是不是发给它,而要发给元素下的哪个模型,它是通过操作码来判断的。因为一个元素下不能存在两种同样类型的模型。不同的模型,其操作码都是不一样的。

        感谢解答

          撰写回复...