一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx

上传人:b****1 文档编号:134650 上传时间:2022-10-04 格式:DOCX 页数:19 大小:2.01MB
下载 相关 举报
一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx_第1页
第1页 / 共19页
一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx_第2页
第2页 / 共19页
一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx_第3页
第3页 / 共19页
一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx_第4页
第4页 / 共19页
一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx

《一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx》由会员分享,可在线阅读,更多相关《一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx(19页珍藏版)》请在冰豆网上搜索。

一步步教您如何在DA14580 cust profile基础上实现大量notify的发送.docx

中电港:

钟志峰

BDF001-一步步教您如何在DA14580custprofile基础上实现大量notify的发送文档版本:

v0.0.1

本文主要介绍如何在DA14580SDK5.0.3的prox_reporter例子基础上添加custprofile,并最终利用notify给手机发送大量数据。

主要的内容分三个部分:

1.custprofile的添加;

2.connparamupdate代码添加;

3.大量Notify数据发送丢包严重问题缓解。

需要准备的工具:

1.DA14580开发板,或者其他可以运行代码的DA14580板子;

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#include"prf_types.h"#include"attm_db_128.h"#include"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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1