Protocol Buffers(nanopb)笔记之.proto文件repeated字段

nanopb-0.3.6-linux-x86.tar.gz 这个文件里有很多protocol buffers的例子以及将.proto文件生成.pb.c .pb.h文件

//control_api.proto协议文档
//设置定时喂食任务(APP, 硬件协议)
message SetFeedTimerTaskListReq {
repeated FeedTimerTask rpt_feed_timer_task_list = 1; //定时喂食任务列表
}

message SetFeedTimerTaskListRsp {
}

//喂食任务
message FeedTimerTask {
required int32 ui_time = 1; //投放时间
required int32 ui_feed_weight = 2; //投放量,单位克
required int32 ui_feed_duration = 3; //投放时长,单位分钟
required int32 ui_feed_state = 4; //喂食任务执行状态,参考FeedState
}
//
//control_api.pb.h

typedef struct _hxy_control_SetFeedTimerTaskListReq {
pb_callback_t rpt_feed_timer_task_list;
/* @@protoc_insertion_point(struct:hxy_control_SetFeedTimerTaskListReq) */
} hxy_control_SetFeedTimerTaskListReq;

typedef struct _hxy_control_FeedTimerTask {
int32_t ui_time;
int32_t ui_feed_weight;
int32_t ui_feed_duration;
int32_t ui_feed_state;
/* @@protoc_insertion_point(struct:hxy_control_FeedTimerTask) */
} hxy_control_FeedTimerTask;

//control_api.pb.c
const pb_field_t hxy_control_SetFeedTimerTaskListReq_fields[2] = {
PB_FIELD( 1, MESSAGE , REPEATED, CALLBACK, FIRST, hxy_control_SetFeedTimerTaskListReq, rpt_feed_timer_task_list, rpt_feed_timer_task_list, &hxy_control_FeedTimerTask_fields),
PB_LAST_FIELD
};

const pb_field_t hxy_control_FeedTimerTask_fields[5] = {
PB_FIELD( 1, INT32 , REQUIRED, STATIC , FIRST, hxy_control_FeedTimerTask, ui_time, ui_time, 0),
PB_FIELD( 2, INT32 , REQUIRED, STATIC , OTHER, hxy_control_FeedTimerTask, ui_feed_weight, ui_time, 0),
PB_FIELD( 3, INT32 , REQUIRED, STATIC , OTHER, hxy_control_FeedTimerTask, ui_feed_duration, ui_feed_weight, 0),
PB_FIELD( 4, INT32 , REQUIRED, STATIC , OTHER, hxy_control_FeedTimerTask, ui_feed_state, ui_feed_duration, 0),
PB_LAST_FIELD
};
///
解码代码如下:

        pb_istream_t stream = pb_istream_from_buffer(buffer, body_length);

        hxy_control_SetFeedTimerTaskListReq  setfeedtimertaskListreq ={NULL};;
        setfeedtimertaskListreq.rpt_feed_timer_task_list.funcs.decode = &decode_setfeedtimertaskListreq;
        setfeedtimertaskListreq.rpt_feed_timer_task_list.arg= "wangwenwen\n\0";
        if (!pb_decode(&stream, hxy_control_SetFeedTimerTaskListReq_fields, &setfeedtimertaskListreq)){
                db("pb_decode ,hxy_control_SetFeedTimerTaskListReq ERROR\0");
                return 1;
        }


bool decode_setfeedtimertaskListreq(pb_istream_t *stream, const pb_field_t *field, void **arg)
{
db(“decode_setfeedtimertaskListreq ::%s \n”,*arg);

hxy_control_FeedTimerTask feedtimetask  = {};
    if (!pb_decode(stream, hxy_control_FeedTimerTask_fields, &feedtimetask))
    return false;


db("ui_time == %d\n",feedtimetask.ui_time);
db("ui_feed_weight == %d\n",feedtimetask.ui_feed_weight);
    db("ui_feed_duration == %d\n",feedtimetask.ui_feed_duration);
db("ui_feed_state == %d\n",feedtimetask.ui_feed_state);


return true;

}
/

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xx-xx-xxx-xxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值