一步步教您如何在DA14580 cust profile基础上实现大量notify的发送Word文档下载推荐.docx
《一步步教您如何在DA14580 cust profile基础上实现大量notify的发送Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《一步步教您如何在DA14580 cust profile基础上实现大量notify的发送Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
2.基本的软件开发环境,如Keil等;
3.支持BLE的手机或者其他平台。
以上工具是DA14580开发必备,如果没有,请自行百度相关资料解决。
准备工作完毕后,我们就可以开始了:
一、custprofile的添加。
首先我们来看看custprofile添加完毕后的结果,用lightblue搜索并与芯片建立连接后,会出现以下服务:
19
首先,我们打开prox_reporter工程,然后,添加custservice服务所必须文件到我们的工程中:
这几个文件分别在以下位置:
sdk\ble_stack\profiles\custom\custs\custs1.csdk\ble_stack\profiles\custom\custs\custs1_task.csdk\ble_stack\profiles\custom\custom_common.csdk\ble_stack\host\att\attm\attm_db_128.c
然后我们在prox_reporter\src\config文件夹中建立一个新文件user_custs_config.h
并加入到工程中:
完毕后,我们在工程属性中加入一个宏定义,以便后续方便查找我们本次修改的代码,当然,你也可以不加此宏定义:
好了,现在开始我们添加代码。
首先打开user_proxr.c文件,并加入以下代码:
其中char_value我们用作存放read和write数据的地方,notify_timer作为发送notify的定时器。
在user_proxr.c文件的最后面,加入以下4个函数:
其中,user_app_on_connection用来定义连接建立后需要添加的代码;
user_app_on_disconnect为连接断开后需要做的工作;
user_on_db_init_complete为database初始化完毕后的接口函数;
user_catch_rest_hndl我们用来处理由主机(可以是手机)往下发送的msg,这里我们用来处理CUSTS1_VAL_WRITE_IND请求。
我们来一步步添加每一个函数体:
Default_app_on_connection为系统默认的connection处理函数,我们保留它的所有功能,接下去我们开启notify_timer,利用的是app_easy_timer,这个函数是SDK5里面新的设置定时器的函数,如果用老的SDK,是没有这个函数的,可以利用其它的方法实现;
函数的第一个参数1000,我们设置了定时器触发的时间为1000*10ms也就是10s,第二个参数notify_charactertistic_update为触发时调用的函数,一旦定时器到达10s,则会直接跳转到notify_charactertistic_update函数。
按照字面理解,此函数为disconnect处理函数,同样的道理,我们保留
default_app_on_disconnect的所有功能,然后我们关闭之前开启的timer,因为连接端口后,再发送notify是没有任何意义的。
此函数只在database完成初始化后调用一次,这里我们设置了之前定义的
char_value值到数据库中,以便主机发起read请求后能够得到有效数据。
此函数处理主机发送的消息,这里只处理CUSTS1_VAL_WRITE_IND,我们将得到的数据写入char_value,并用attmdb_att_set_value函数将数据更新到底层。
然后在user_app_on_connection上面添加timer回调函数:
此函数里面暂时只做一件事情:
开启一个10ms的定时器,回调函数是它自己,也就是说每10ms调用一次此函数。
后续我们会利用此函数来发送Notify,现在暂时留空。
好了,user_proxr.c文件的工作暂时结束,然后在user_proxr.h中添加函数声明:
接下去在user_profiles_config.h中添加代码:
修改user_config.h中的广播数据:
这个修改并不是必须的,没有这个系统也能正常工作,只是广播数据中少了
custprofile信息,为了避免表里不一,还是建议修改一下吧。
刚才我们在user_proxr.c添加了user_app_on_connection、
user_app_on_disconnect、user_on_db_init_complete和user_catch_rest_hndl,我们必须告诉系统我们要调用这些函数,而不是默认,所以我们需要修改
user_callback_config.h:
添加头文件:
修改以下callback函数:
修改以下定义:
staticvoid(*constapp_process_catch_rest_cb)(ke_msg_id_tconstmsgid,voidconst*param,ke_task_id_tconstdest_id,ke_task_id_tconstsrc_id)=NULL;
为
staticvoid(*constapp_process_catch_rest_cb)(ke_msg_id_tconstmsgid,voidconst*param,ke_task_id_tconstdest_id,ke_task_id_tconstsrc_id)=(catch_rest_event_func_t)user_catch_rest_hndl;
修改完毕后我们需要编辑user_custs_config.h文件,这里代码有点多,我直接贴出来:
#ifndef_USER_CUSTS_CONFIG_H_
#define_USER_CUSTS_CONFIG_H_
#include<
stdint.h>
#include"
prf_types.h"
attm_db_128.h"
app_prf_types.h"
#include"
app_customs.h"
#defineDEF_CUST_SVC_UUID_128
0x99,0x2E,0xC6,0xFE,0xED}
{0x2F,0x2A,0x93,0xA6,0xBD,0xD8,0x41,0x52,0xAC,0x0B,0x10,
#defineDEF_CUST_WRITE_CHAR_UUID_128
0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F}
#defineDEF_CUST_READ_CHAR_UUID_1280x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F}
#defineDEF_CUST_NOTIFY_CHAR_UUID_128
0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F}
{0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,
#defineDEF_CUST_CHAR_LEN
20
#defineCUST_CHAR_USER_DESC
"
Custom"
///CUSTOMServiceDataBaseCharacteristicenumenum
{
CUST_IDX_SVC=0,
CUST_IDX_WRITE_CHAR,CUST_IDX_WRITE_CHAR_VAL,
CUST_IDX_READ_CHAR,
CUST_IDX_READ_CHAR_VAL,
CUST_IDX_NOTIFY_CHAR,
CUST_IDX_NOTIFY_CHAR_VAL,
CUST_IDX_NB,
};
staticconstuint8_tcustoms_att_max_size[CUST_IDX_NB]=
[CUST_IDX_SVC] =0,
[CUST_IDX_WRITE_CHAR] =0,
[CUST_IDX_WRITE_CHAR_VAL] =DEF_CUST_CHAR_LEN,
[CUST_IDX_READ_CHAR] =0,[CUST_IDX_READ_CHAR_VAL] =DEF_CUST_CHAR_LEN,
[CUST_IDX_NOTIFY_CHAR] =0,
[CUST_IDX_NOTIFY_CHAR_VAL] =DEF_CUST_CHAR_LEN,
staticconstatt_svc_desc128_tcustom_svc
=DEF_CUST_SVC_UUID_128;
staticuint8_tCUST_WRITE_CHAR_UUID_128[ATT_UUID_128_LEN]
DEF_CUST_WRITE_CHAR_UUID_128;
staticuint8_tCUST_READ_CHAR_UUID_128[ATT_UUID_128_LEN]DEF_CUST_READ_CHAR_UUID_128;
staticuint8_tCUST_NOTIFY_CHAR_UUID_128[ATT_UUID_128_LEN]
DEF_CUST_NOTIFY_CHAR_UUID_128;
=
staticconststructatt_char128_desccustom_write_char
={ATT_CHAR_PROP_WR,
{0,0},
DEF_CUST_WRITE_CHAR_UUID_128};
staticcon