4个帖子/ 0个新
最后发表
ziv324
离线
最后看到:2个月前2天前
加入:2016-01-08 07:36
da14585讀取資料方法

您好
目前已完成在DA14580透過atts_read_req_ind_handlerd,编写特点後讀取資料的功能。
現在考慮要轉移到da14585。

但在程式上的搬移,da14585 sdk和da14580缺少的部分太多的…

有建議的方法或步驟嗎?

设备:
CYibin
离线
最后看到:9个月前1个星期
工作人员
加入:2017-12-14 02:48
你好,

你好,

可以参考以下文档:

//www.xmece.com/sites/default/files/training_03_cus..。

ziv324
离线
最后看到:2个月前2天前
加入:2016-01-08 07:36
你好,謝謝回覆。

你好,謝謝回覆。

但這份文件裡面只有註明怎麼對自定义配置文件去写数据。
並沒有針對如何读取数据做任何的說明。

目前清楚使用通知也可以回覆,但現在需要的是读取数据。

CYibin
离线
最后看到:9个月前1个星期
工作人员
加入:2017-12-14 02:48
你好,

你好,

抱歉误解你的意思,你想问的是,如何在外围端支持中央发送过来的gatt_read命令吧?

首先,需要给态度添加读属性,例如下面的CUST1_IDX_RECV_VALUE态度:

struct attm_desc_128 custs1_att_db [CUST1_IDX_NB] = {[CUST1_IDX_SVC] = {(uint8_t *) &att_decl_svc ATT_UUID_16_LEN,烫(RD,启用),sizeof (custs1_svc), sizeof (custs1_svc), (uint8_t *) &custs1_svc}, [CUST1_IDX_SEND_CHAR] = {(uint8_t *) &att_decl_char ATT_UUID_16_LEN,烫(RD,启用),sizeof (custs1_send_char), sizeof (custs1_send_char), (uint8_t *) &custs1_send_char}, [CUST1_IDX_SEND_VALUE] = {CUST1_SEND_UUID_128 ATT_UUID_128_LEN,烫(RD,使)|烫(WR,启用),DEF_CUST1_SEND_CHAR_LEN, 0,NULL}, [CUST1_IDX_RECV_CHAR] = {(uint8_t*)&att_decl_char, ATT_UUID_16_LEN, PERM(RD, ENABLE), sizeof(custs1_recv_char), sizeof(custs1_recv_char), (cust8_t *)& custs1_recv_len}, [CUST1_IDX_RECV_VALUE] = {cust1_recv_128, ATT_UUID_128_LEN, PERM(NTF, ENABLE), DEF_CUST1_RECV_CHAR_LEN, 0, NULL}, [cust1_idx_recv_cfg] = {(uint8_t*)&att_decl_cfg, ATT_UUID_16_LEN, PERM(RD, ENABLE), | PERM(WR, ENABLE), sizeof(uint16_t), 0, NULL},};

然后,在概要文件的任务文件中,添加GATTC_READ_CMD_IND命令,和其对应的处理程序,例如:

//在cust1_task.c中const struct ke_msg_handler custs1_connected[] = {GATTC_READ_CMD_IND, (ke_msg_func_t)gattc_read_cmd_ind_handler}, {GATTC_WRITE_CMD_IND, (ke_msg_func_t)gattc_write_cmd_ind_handler}, {GATTC_CMP_EVT, (ke_msg_func_t) gattc_cmp_ev_handler}, {CUSTS1_VAL_NTF_REQ, (ke_msg_func_t)custs1_val_set_req_handler}, {CUSTS1_VAL_IND_REQ, (ke_msg_func_t)custs1_val_set_req_handler},};静态int gattc_read_cmd_ind_handler(ke_msg_id_t const msgstr, struct gattc_read_cmd_ind const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) {uint16_t att_idx, value_hdl;if (KE_IDX_GET(src_id) == custs1_env.con_info.conidx) {att_idx = param->handle - custs1_env.shdl;if(att_idx == CUST1_IDX_RECV_VALUE) {// got a read request,表示数据库中的数据已经被读取。}}返回(ke_msg_consuming);}

以上。

每次中央(手机应用)发起一次读取请求,外围(580)的协议栈就会把相应的attitube数据库的内容返回给中央。数据返回成功后,协议栈就会向上层发送一条gattc_read_cmd_ind消息。

注意,阅读是被动的,周边无法知道中央发起阅读的时机而提前将数据准备好,然后交给中央去阅读