美文网首页
蓝牙学习-GAP

蓝牙学习-GAP

作者: 集韵增广 | 来源:发表于2022-05-04 21:33 被阅读0次

GAP - Generic Access Profifile

GAP提供设备发现和建立安全连接的功能。GAP的功能分为客户端功能和服务端功能。

配置可被发现

所有的蓝牙端设备都可配成“discoverable”,这样别的蓝牙设备在扫描(inquiry scan)时可判断此设备是可被发现的。配置成可被发现需调用:gap_discoverable_control(1)。如果想用个特殊的名字,可调用:gap_set_local_name。如果想要省电,在被发现和连接后可以关闭此状态:gap_discoverable_control(1)。伪代码如下:

int main ( void ) {
  . . .
  // make discoverable
  gap_discoverable_control(1) ;
  btstack_run_loop_execute( ) ;
  return 0 ;
}
void packethandler ( uint8_t packettype , uint8_t ∗packet , uint16_tsize ) {
  . . .
  switch (state) {
     case W4_CHANNEL_COMPLETE:
     // if connection is successful , make device undiscover able
     gap_discoverable_control(0) ;
   . . .
} }

发现远端设备

蓝牙主设备在需要发现外围设备的使用使用hci_inquiry命令,发现设备的回调有以下几种类型:

* HCI_EVENT_INQUIRY_RESULT
* HCI_EVENT_INQUIRY_RESULT_WITH_RSSI
* HCI_EVENT_EXTENDED_INQUIRY_RESPONSE

返回值包括:address(6字节,mac地址),classOfDevice(2字节),repetitionMode(1字节),clockOffset(2字节),rssi(1字节),EIR(Extended Inquiry Result)

*注意:默认的rssi和EIR是不上报的。蓝牙协议2.1和更高版本,hci_write_inquiry_mode(0,标准上报;1,带RSSI上报,2,RSSI和EIR)命令用来控制查询的返回内容。

配对设备

默认的蓝牙通信是没有身份认证的。手机在使用蓝牙连接外设的时候可以要求使用身份认证服务(类似于拨号上网服务),建立身份认证的过程就叫配对。蓝牙提供两种配对机制:

1,使用PIN码(16字节的ASCII)进行身份验证(2.0之前),两端均默认设置了PIN码。此方法对嵌入式设备不太友好,没有使用全部的IO能力。
     HCI EVENT PIN CODE REQUEST:
     hci_event_pin_code_request_get_bd_addr(packet, bd_addr)
     hci_send_cmd(&hci_pin_code_request_reply, &bd_addr, 4, "0000");

注意:“0000”就是预设的PIN码

2,使用SSP(Secure Simple Pairing)进行身份验证(2.1后),此方法对嵌入式设备更好。
     设备会首先沟通他们之间的IO能力然后处理配对的有效性。如果蓝牙设备支持SSP,蓝牙协议栈会默认使用SSP配对。但是基于蓝牙协议栈的具体实现,默认SSP配对的逻辑可能会被通知用户进行配对确认的实现代替。

当配对成功后两个设备都会生成link key。这个link key会被存储在设备的持久化存储空间里。下次重启连接就可以直接使用这个link key。

专用型绑定

不同于常规绑定,专用型绑定会在绑定动作完成后断开连接。

相关文章

  • 蓝牙学习-GAP

    GAP - Generic Access Profifile GAP提供设备发现和建立安全连接的功能。GAP的功能...

  • BLE相关协议(GAP&GATT)

    一、GAP GAP全名是Generic Access Profile,通用访问配置文件,它定义了蓝牙设备的角色,中...

  • 蓝牙BLE协议栈基础知识

    这次介绍一下蓝牙协议栈(BLE)的基础知识,蓝牙协议栈组成如下图所示,首先我们说说GAP和GATT 1. G...

  • BLE系列-GAP

    书接上文,我们知道,低功耗蓝牙开发,基本就是在与GAP和GATT这两层打交道。 本文,讲一讲GAP。 通用访问配...

  • phyloseq: Explore microbiome pro

    本节主要是在PhyloseqTutorials学习Gap Statistic的函数功能. Gap Statisti...

  • 极客时间第7天打卡

    打卡 今天学习了<>里面提到了gap锁,以前基本不懂什么是gap锁,现在明白一些些了. gap...

  • 【Objective-c】_蓝牙开发

    ios蓝牙开发学习笔记(一)蓝牙概述 ios蓝牙开发学习笔记(二)central角色的实现 ios蓝牙开发学习笔记...

  • 蓝牙外设连接原理

    一、苹果系统底层蓝牙扫描设备名称原理 1、第一次连接设备,系统无GAP层设备名称缓存,此时扫描到的设备名称为设备广...

  • iOS蓝牙开发学习笔记 - 系列

    详见我的csdn: iOS蓝牙开发学习笔记(一)蓝牙概述 iOS蓝牙开发学习笔记(二)central角色的实现 i...

  • Lecture 2 | Image Classification

    semantic gap: huge gap between a "cat" and these matrices

网友评论

      本文标题:蓝牙学习-GAP

      本文链接:https://www.haomeiwen.com/subject/csgsyrtx.html