|
本帖最后由 怂包BB 于 2018-3-6 13:31 编辑
做蓝牙传输,由于限制,每次最多20个字节。于是写了分相对通用的分包组包的代码。如果大家有项目可以用到这个,可以看看,如果有BUG和可以优化的地方,希望可以告诉我,谢谢!
功能说明
1、支持通信数据传输的分包以及组包
2、通用协议格式,同时支持协议头自定义配置
3、接口简单,使用方便
4、数据校验方式可选CRC32, CRC16等
协议格式说明
【协议头】【数据】【校验】
协议头格式:
- typedef struct
- {
- B_TP_HEAD_TYPE head;
- B_TP_FRAME_NUMBER_TYPE f_num;
- b_TPU8 number; /**< 自定义一项 */
- B_TP_TOTAL_LEN_TYPE total_len;
- }b_tp_head_t;
复制代码
- 非自定义的项变量名不能改变
- 头标志: 数据类型可以配置
- 分帧标志: 是否分帧传输
- 数据长度: 数据的长度,不包括协议头以及校验
- 校验: 校验方式可选,对协议头以及数据部分进行校验
使用接口说明
1、根据需求完成b_tp_config.h文件的配置
2、如果在协议头加入了自定义项,实现一下两个函数来操作自定义的部分:
- b_tp_err_code_t _b_tp_rec_check_head(b_tp_head_t *);
- void _b_tp_send_set_head(b_tp_head_t *);
复制代码
3、完成b_tp_port.c里数据发送
4、收到数据后将收到的数据通过b_tp_receive_data函数提交给b_tp进行解析
5、解析完成后调用回调,所以通过b_tp_reg_callback注册回调
写了测试代码进行逻辑的确认:
传送50个字节(1 ~ 50),分成三次传输:
- 165 1 0 50 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- 2 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
- 3 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 69 61
复制代码
同样三笔数据进行解析也是可以解析正确。
配置项:
- /** | B_TP_HEAD | B_TP_FRAME_NUMBER | TOTAL_LEN | DATA (N) | CHECK */
- /** configure start ----------------------------------------------------------*/
- #define B_TP_HEAD_TYPE b_TPU8
- #define B_TP_FRAME_NUMBER_TYPE b_TPU8
- #define B_TP_TOTAL_LEN_TYPE b_TPU8
- #define B_TP_CHECK_SELECT B_TP_CRC16 /**< B_TP_SUM / B_TP_CRC16 / B_TP_CRC32 */
- #define B_TP_HEAD 0XA5
- #define B_TP_MTU 20
- #define B_TP_SEND_REPEAT 1
- #define B_TP_SEND_LOCK_ENABLE 1
- #define B_TP_STATIC_BUF_ENABLE 1
- #if B_TP_SEND_LOCK_ENABLE
- #define B_TP_STATIC_BUF_LEN 160
- #else
- #define B_TP_STATIC_BUF_LEN 160
- #define B_TP_STATIC_REC_BUF_LEN 64
- #endif
- #define B_TP_DEBUG_NO_CHECK 0
- /** configure end ---------------------------------------------*/
- #pragma pack(1)
- typedef struct
- {
- B_TP_HEAD_TYPE head;
- B_TP_FRAME_NUMBER_TYPE f_num;
- b_TPU8 number;
- B_TP_TOTAL_LEN_TYPE total_len;
- }b_tp_head_t;
- #pragma pack()
- /**
- * @}
- */
复制代码
https://github.com/notrynohigh/b_tp
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|