nanopb的repeated消息如何使用callback的方式进行编码解码encode decode

文章介绍了在资源有限的平台上,如何使用nanopb库处理包含多层repeated消息的数据结构。通过callback方式实现编码和解码,特别是在btActionMsg消息中嵌套了repeatedDatapoint消息的情况下,提供了具体的实现方案。示例代码已上传至gitcode,帮助开发者理解和应用这一技术。
  • 由于nanopb在资源受限平台的应用很适合,很多人就考虑使用nanopb进行数据消息的编解码,但是由于RAM受限,不像protobuf-c的实现,可以随意使用RAM,nanopb对于repeated消息的处理,可以分为两种方案,一种是通过额外的*.options描述文件来指定特殊成员的max_size大小,另外一种方案,就是callback的方式来实现,不指定大小,而是由编码阶段决定具体的大小。
  • nanopb官方提供的test以及example示例程序,都没有提到repeated消息包含多层repeated消息时,如何使用callback的方式实现encode和decode,这里给大家演示一下具体的实现方案,详细代码已经放到gitcode
  • 比如,这里的测试程序,gwDevSceneInfo消息里面包含的btActionMsg消息就是repeated,这都很正常,一层repeated很容易就使用callback实现,但是btActionMsg消息里面,又包含了repeated Datapoint 消息,这样在encode和decode时候,很多人就不知道怎么实现了。
syntax = "proto3";

enum messageDpType{
	DP_TYPE_RAW=0;
	DP_TYPE_BOOL=1;
	DP_TYPE_VALUE=2;
	DP_TYPE_STRING=3;
	DP_TYPE_ENUM=4;
}

message Datapoint{
	uint32 dpid=1;
	messageDpType type=2;
	uint32 len=3;
	oneof t_value{
		string v_raw=4;
		bool v_bool=5;
		int32 v_value=6;
		string v_string=7;
		int32 v_enum=8;
	}
}

message btActionMsg{
    oneof actionId{
        string deviceId=1;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值