在ble_app_peripheral添加自定义的服务/特征数据库

11个员额/ 0新
最后一篇
dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
在ble_app_peripheral添加自定义的服务/特征数据库

你好,

我要添加自定义服务,在SDK不存在,(灯泡 - 128位) - 在ble_app_peripheral示例和其单个特征(128位ON)。
我已删除现有的服务/特征存在于该应用的。
如果我没有错,我需要添加user_prf_funcs一个条目[],然后写两个功能:
空隙app_lb_db_create(无效)
空隙app_lb_db_enable(uint16_t)

另外,我需要补充那些TASK_ID下?TASK_CUSTS1或别的什么吗?

我想创建服务和使用attmdb_add_service()和attmdb_add_attribute在app_lb_db_create特性()()。但是,当我执行的代码,我认为看门狗超时。
此外,应该是什么app_lb_db_enable(uint16_t)的内容。
有一些文档或者样品例如,它可以帮助我在这方面。

注:在我的情况关贸总协定数据库会从主机在UART发送。所以,我不能使用任何已经在示例应用程序中使用const的结构。雷竞技安卓下载
我需要通过解析对UART数据动态添加GATT数据库。

谢谢,
Hrishikesh

设备:
MT_dialog
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨dhrishi,

嗨dhrishi,

您可以留下自定义任务,并仅修改特性,只需删除您不需要的那些,还有一个关于您可以使用的自定义服务的教程修改示例(教程3:构建自定义配置文件)。您还可以查看使用自定义配置文件和重命名作为DSP专用配置文件的DSP示例,并且还使用自定义启用和创建数据库函数。

由于MT_dialog

dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
感谢您的回复。一世

感谢您的回复。我编辑的外围关贸总协定数据库CUST1并加入我的服务及特点,它工作得很好。这是已知的服务和特征(2个服务与每个1个特性)

现在,我要送过来UART相同的服务/特征和动态分配关贸总协定数据库。这可能吗?
随着我所看到的,在结构cust_prf_func_callbacks的att_db指针是const的结构cust_prf_func_callbacks *类型。
那么,我该怎么做?
有没有在这当我收到过来UART我可以加入关贸总协定的数据库中动态任何其他方式?

谢谢,
Hrishikesh

MT_dialog
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨dhrishi,

嗨dhrishi,

如果以上的答案是有益的,请把它标记为接受。

关于你的第二个问题,我不知道我知道(我假设你使用的是完全托管的设计,您的应用程序位于580也一样),所以,随着SDK的结构normaly数据库配置之后创建该设备,这不是强制性的(创作于设备配置的数据库),但你可以在通过UART命令发送触发数据库的创建。或者,如果你想你的数据库不被固定在设备,但通过一个外部设备,你可以使用由RW-BLE-GATT-IS_1.pdf记录的内核信息来配置它。

由于MT_dialog

dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
你好,

你好,

谢谢回复。第一个答案是在某种程度上帮助。但是,我没有,因为我提到的,需要动态地添加他们的静态服务/特性。
我正想通过RW-BLE-GATT-IS.pdf和我找到的事件GATTM_ADD_SVC_REQ,GATTM_ADD_ATTRIBUTE_REQ,我认为我需要发送。
是否有一个示例应用程序,它展示了相同的。我无法找到样品应用程序或SDK中的任何位置的Gattm_add_svc_req。我需要知道如何以及在哪里发送这些消息并处理他们的答复?

一个适当的出发点,这可能会帮助我在按照正确的方式将是有益的。

谢谢,
Hrishikesh

MT_dialog
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨dhrishi,

嗨dhrishi,

可惜的是不存在的例子,使用这些信息,以创建数据库,但逻辑是像所有内核交换的其他消息一样,从你的应用程序的任务,你将消息发送到ATTM_TASK,你会得到相应的响应。您可以在user_catch_rest_hndl处理赶上消息,并触发你的下一个操作,添加该服务,然后让该服务创建用于添加创建服务会像下面的示例中的属性等。消息的响应后:

空隙create_service_database(无效)
{
结构gattm_add_svc_req * REQ = KE_MSG_ALLOC(GATTM_ADD_SVC_REQ,TASK_ATTM,TASK_APP,gattm_add_svc_req);
req-> start_hdl = 0;
req-> TASK_ID = 56;
req-> TOTAL_SIZE = 3;
req-> nb_att_uuid_16 = 2;
req-> nb_att_uuid_128 = 1;
ke_msg_send(REQ);
}

在user_catch_rest_hndl你可以捕捉你的反应

案例GATTM_ADD_SVC_RSP:
{
结构gattm_add_svc_rsp常量* msg_param =(结构gattm_add_svc_rsp常量*)(PARAM);
//赶上服务数据库已分配的消息,并开始添加属性
}休息;

由于MT_dialog

dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
谢谢!这正是我

谢谢!这正是我一直在寻找。使用上面我试图加1个服务(128位)和1个字符(128位)。当连接到外设,I可以看到在NRF应用服务而不是特性(空服务)。你有什么可能是错怎么回事线索?

从添加服务开始,我在每一个适当的响应添加的所有属性。
有关服务详情,并在其中我召他们相同的序列的属性如下所示。能否请你检查什么可能会错过:

**************************************** SVC **************************************************
//添加服务(GATTM_ADD_SVC_REQ)
req-> start_hdl = 0;
req-> TASK_ID = TASK_APP;
req-> TOTAL_SIZE = 36;// 16 + 19 + 1
req-> nb_att_uuid_16 = 2;
req-> nb_att_uuid_32 = 0;
req-> nb_att_uuid_128 = 1;

******************************* 属性 *****************************************************************
//添加SVC东方电气属性(GATTM_ADD_ATTRIBUTE_REQ)
req-> start_hdl = svc_handle;//从SVC成功RSP以上填充
req->烫发= PERM(RD,ENABLE);
req-> uuid_len = ATT_UUID_16_LEN;
req-> max_data_size = ATT_UUID_128_LEN;
的memcpy(req-> UUID,&att_decl_svc,的sizeof(att_decl_svc));

//设置SVC UUID值(GATTM_ATT_SET_VALUE_REQ)
req->手柄= svc_handle;
req->长度= ATT_UUID_128_LEN;
的memcpy(req->值,svc_uuid,的sizeof(svc_uuid));// uint8_t svc_uuid [16];

//添加字符东方电气属性(GATTM_ADD_ATTRIBUTE_REQ)
req-> start_hdl = svc_handle;//从SVC成功RSP填充
req->烫发= PERM(RD,ENABLE);
req-> uuid_len = ATT_UUID_16_LEN;
req-> max_data_size = ATT_UUID_128_LEN + 3;
的memcpy(req-> UUID,&att_decl_char,的sizeof(att_decl_char));

//添加char值属性(GATTM_ADD_ATTRIBUTE_REQ)
req-> start_hdl = svc_handle;
req->烫发= PERM(RD,ENABLE)|PERM(WR,ENABLE);
req-> uuid_len = ATT_UUID_128_LEN;
req-> max_data_size =的sizeof(uint8_t);
的memcpy(req-> UUID,char_uuid,的sizeof(char_uuid));// uint8_t char_uuid [16];

//设置初始值(GATTM_ATT_SET_VALUE_REQ)
req->手柄= char_decl_handle //填充从炭DECL RSP
req->长度=的sizeof(on_char);
的memcpy(req->值,&on_char,的sizeof(on_char));// on_char - 结构att_char128_desc on_char = {ATT_CHAR_PROP_RD |ATT_CHAR_PROP_WR,{0,0},{16字节字符UUID}};

谢谢,
Hrishikesh

MT_dialog
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨dhrishi,

嗨dhrishi,

我没有看到任何东西,可能可能是错的,你的执行似乎正确。这functionallity有点隐藏在最新的SDK,但你要能够检查数据库是如何在SDK 3中创建还有就是AN-B-029与有关创作的一些例子走来文件自定义配置文件(包括文档和示例文件可以在文档选项卡中找到在停产应用笔记)。在该.zip文件存在于sample128_create_db_req_handler()函数,你就能够找到关于如何创建一个128自定义配置文件(使用的命令本质上是相同的例子在sample128_task.c文件中SDK3的自定义配置文件的例子命令的堆栈,当它接收到您正在使用的命令)执行。

由于MT_dialog

dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
你好,

你好,

我不得不提到同样写上面的代码。此外,在大多数地方,我看到了PERM(SVC,禁用)的设置服务权限一个多个呼叫。这是为什么需要?我试着用ENABLE和DISABLE但仍没有运气。此外,在我的代码的总规模和nb_att_uuid_ *值中值是合适的,对不对?

此外,获得AN-B-029似乎受到限制。能否请您发送电子邮件上。

谢谢,
Hrishikesh

MT_dialog
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨dhrishi,

嗨dhrishi,

烫发(SVC,XXX),以便创建后设置该服务的正确的使用(在禁用它只是禁用该服务,而你是悬空),当你为了连接你应该能够与PERM此服务(SVC,ENABLE)至从中心访问或设定的安全性级别(例如,该服务要求,以便安全被访问)。是您的服务队的总大小是适当的服务1(16)+ 1特性(19)+ 1特性值(+1)和属性的数量是合适的16位2个UUID值和1个128位UUID值。

关于AN-B-029的限制,没有对我已经提到的文件没有限制,但我可以看到你没有权限访问任何文件或SDK本身,所以请到产品DA14580和导航软件和工具。在那里,你会看到一个挂锁图标 - 单击,接受该协议,你将被授予将SDK在一两天的访问。

由于MT_dialog

dhrishi
离线
最后一次露面:3年3个月前
加入:2017年2月10日09:56
你好,

你好,

好的。我能做到这一点,以获得访问文件。
最后,我能够使它发挥作用。我错过了填充特征值手柄att_char128_desc on_char,因此看到服务为空。有了这个变化现在我可以看到我的服务和特色。谢谢你的帮助。:-)

- Hrishikesh