//========================================================================================================
/*版权声明:本文为樱桃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 转载请注明出处*/
//========================================================================================================
2016-12-23 微信硬件 ble_wechat_util.h移植记录二
最新推荐文章于 2024-04-01 09:52:21 发布