2016-12-23 微信硬件 ble_wechat_util.h移植记录二

//========================================================================================================
/*版权声明:本文为樱桃BLE原创文章,Q群:376066563 转载请注明出处*/
/*
ble_wechat_util.h 移植更改比较简单  
打开ble_wechat_util.h用之前修改过的头文件  #include "main.h"  替换掉头文件  #include <stdint.h>
*/
/*
ble_wechat_util
这里定义了微信服务与注册设备、转序等有关的函数以及结构体等。


设备存储链表节点
节点里定义了设备函数接口与参数等内容。


typedef struct data_handler{
int m_product_type;
data_produce_func m_data_produce_func;
data_free_func m_data_free_func;
data_consume_func m_data_consume_func;
data_error_func m_data_error_func;

data_on_ble_evt_func m_data_on_ble_evt_func;
data_init_func m_data_init_func;
data_main_process_func m_data_main_process_func;
data_button_handler_func m_data_button_handler_func;
void *m_data_produce_args;
struct data_handler *next;
} data_handler;


//========================================================================================================


注册设备宏
通过设备名称把设备接口节点存储到链表
#define REGISTER(NAME) \
do { \
data_handler *tmp = &NAME##_data_handler;\
tmp->next = first_handler.next; \
first_handler.next = tmp;\
} while(0)


//========================================================================================================


参数设置宏
把相应的命令、参数初始化到设备结构体中,如mpbledemo2_info


#define ARGS_ITEM_SET(ARGS_TYPE, ARGS_POINTER, ITEM_NAME, ITEM_VALUE)\
do { \
ARGS_TYPE *tmp = (ARGS_TYPE *)ARGS_POINTER;\
tmp->ITEM_NAME = ITEM_VALUE;\
} while(0)


//========================================================================================================


固定头
该固定头是设备与微信通信格式的固定头
typedef struct
{
unsigned char bMagicNumber;
unsigned char bVer;
unsigned short nLength;
unsigned short nCmdId;
unsigned short nSeq;
} BpFixHead;


//========================================================================================================


通过类型查找设备
通过定义的设备类型在链表中查找注册进来并返回节点指针。
data_handler* get_handler_by_type(int type)
{
data_handler* handler = &first_handler;
while(handler->next != NULL) {
handler = handler->next;
if (handler->m_product_type == type) {
return handler;
}
}
return NULL;
}


//========================================================================================================


转序函数
这里定义了转序函数,此用来据中的short shortshort或者 longlong 型数据。
将一个无符号短整型或者长整型的主机数值转换为网络字节顺序


unsigned short htons(unsigned short h)
{
       return checkCPUendian() ? h : BigLittleSwap16(h);
}


//========================================================================================================


将一个无符号短整形数从网络字节顺序转换为主机字节顺序。
unsigned short ntohs(unsigned short n)
{
       return checkCPUendian() ? n : BigLittleSwap16(n);
}


//========================================================================================================


*/
/*版权声明:本文为樱桃BLE原创文章,Q群:376066563 转载请注明出处*/
//========================================================================================================

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值