Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之三

问题点5:Android BLE具体连接flow 并问询DB的API flow 之第二阶段问询;

表示第二阶段的log Start service discovery: srvc_idx =”在Android9没有,但在Android 8.0中有,所以后续截图基于Android8.0。

 -->执行API bta_gattc_start_disc_include_srvc

-->执行API bta_gattc_discover_procedure,入参是GATT_DISC_INC_SRVC

最终执行的API 和第一阶段一致,也是GATTC_Discover

-->执行GATTC_Discover,内部执行API gatt_act_discovery

此时使用的Opcode是“Read By Type Request”,

原生BT中的宏是:GATT_REQ_READ_BY_TYPE;

此时使用的Attribute ID 是GATT_UUID_INCLUDE_SERVICE(0x2802)

-->问询结果在API gatt_client_handle_server_rsp中返回,如果此服务中没有包含Include,则返回的 opcode0x01(原生BT中使用GATT_RSP_ERROR表示0x01);执行到“case GATT_RSP_ERROR”

-->执行API gatt_process_error_rsp

 -->执行gatt_proc_disc_error_rsp,最终执行到gatt_end_operation,进而触发

p_disc_cmpl_cb,使得实作API bta_gattc_disc_cmpl_cback被执行;

-->执行到bta_gattc_disc_cmpl_cback,此时的disc_typeGATT_DISC_INC_SRVC

 -->此时执行触发第二阶段的第二步,使用Read By Type Request+ Attribute Type :Characteristic Declaration”问询是否支援Characteristic

执行API bta_gattc_incl_srvc_disc_cmpl;

-->第二阶段的第二步启动API bta_gattc_start_disc_char

此API 也是使用GATTC_Discover,设置的op_subtype是GATT_DISC_CHAR

对应的opcode是:GATT_REQ_READ_BY_TYPE

对应的Attribute ID是:GATT_UUID_CHAR_DECLARE

 

-->问询结果在API gatt_client_handle_server_rsp中返回:

若当前Service不包含特征时,返回的是response0x01 (GATT_RSP_ERROR);

 若当前Service 包含特征(Characteristic), 返回的reponse

0x09(GATT_RSP_READ_BY_GRP_TYPE),

 

 -->当前假定有特征值,此次执行gatt_process_read_by_type_rsp

(问询Read By Group Type Request 和Read By Type Request)返回内容的处理API是同一个:gatt_process_read_by_type_rsp

因此第二阶段的第二步也是在API gatt_process_read_by_type_rsp内部,使用

gatt_act_discovery自动后续问询当前Service中的其他特征;

-->当第二阶段的第二步全部问询完成时,callback API bta_gattc_disc_cmpl_cback被执行,此时的disc_type是GATT_DISC_CHAR,因此执行API bta_gattc_char_disc_cmpl;

-->执行 API bta_gattc_char_disc_cmpl

(需注意的是:第二阶段可能还有第三步操作:通过“Find Information Request”进行问询Information)

-->通过执行API bta_gattc_start_disc_char_dscp进行第二阶段的第三步问询;

 -->执行API bta_gattc_discover_procedure,入参是GATT_DISC_CHAR_DSCPT

最终执行的API GATTC_Discover

此时对应的opcode:GATT_REQ_FIND_INFO(0x04)

此时对应的Attribute:没有;

 

-->第二阶段第三步的问询结果通过gatt_client_handle_server_rsp返回,此时对应的op_codeGATT_RSP_FIND_INFO(0x05),

-->执行API gatt_process_read_info_rsp

 需注意的是:虽然API gatt_process_read_info_rsp最后也执行了gatt_act_discovery用于触发后续同类型的自动问询,但如果handle值已经满,那么也将通过执行gatt_end_operation,触发callback API bta_gattc_disc_cmpl_cback;

-->执行bta_gattc_disc_cmpl_cback, 此时disc_type GATT_DISC_CHAR_DSCPT;

-->执行API bta_gattc_char_dscpt_disc_cmpl

 当同一服务内的特征全部完成完成时,此时执行else部分,执行API bta_gattc_explore_srvc

-->当前假定全部问询结束,触发log “no more services found”;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值