蓝牙学习-PAN
2022-05-11 本文已影响0人
集韵增广
PAN - Personal Area Networking Profile
PAN基于BNEP为应用层提供蓝牙设备间的单向网络能力
PAN的服务能力:
- PAN User (PANU):使用蓝牙网络的用户,可以通过NAP或者GN访问蓝牙网络,或者和另外的PANU直连;
- Network Access Point (NAP):蓝牙网络的接入点,提供令PANU接入蓝牙网络并路由至IP网络的功能;NAP是蓝牙网络和IP网络之间的桥接使得双方数据互通;
- Group Ad-hoc Network (GN): 蓝牙点对点网络,GN扮演中心节点的角色,最多7个PANU可以接入GN网络并互相可以访问传递数据
- 访问PANU服务:SPP等Profile一样,要发现PAN服务先需要SDP查询,然后建立BNEP连接,这样就能访问了;
- 提供PANU服务:同上先需要注册个SDP记录,标明UUID,framesize等基础信息,然后使能被发现,注册回调函数等客户端访问
PAN客户端分析
-
创建流程
l2cap_init() sm_init() sdp_init() bnep_init() bnep_register_service(packet_handler, BLUETOOTH_SERVICE_CLASS_PANU, 1691) pan_create_panu_sdp_record() sdp_register_service btstack_network_init hci_add_event_handler gap_set_local_name("PANU Client 00:00:00:00:00:00"); gap_set_class_of_device(0x020300); hci_power_control(HCI_POWER_ON);
-
处理流程
graph LR packet_handler --> packet_type:HCI_EVENT_PACKET --> BTSTACK_EVENT_STATE --> sdp_client_query_uuid16 sdp_client_query_uuid16 --> SDP_EVENT_QUERY_ATTRIBUTE_VALUE sdp_client_query_uuid16 --> SDP_EVENT_QUERY_COMPLETE --> bnep_connect packet_type:HCI_EVENT_PACKET --> HCI_EVENT_PIN_CODE_REQUEST packet_type:HCI_EVENT_PACKET --> HCI_EVENT_USER_CONFIRMATION_REQUEST packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_OPENED --> btstack_network_up packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_TIMEOUT packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_CLOSED -->btstack_network_down packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CAN_SEND_NOW --> bnep_send packet_handler --> BNEP_DATA_PACKET --> btstack_network_process_packet
主要流程解析:
PANU客户端是用来连接NAP或者GN的,所以自己启动后首先需要和服务端连接(sdp查找BLUETOOTH_SERVICE_CLASS_NAP) 由于BLE采用安全连接,所以建立连接时用采用PINCODE验证 连接建立后进行sdp查询,根据找到的对端地址,l2cap多路复用,客户端uuid,服务端uuid进行bnep连接 连接建立好后启动btstack_network_up进行Ethernet网络和蓝牙网络的通信
PAN服务分析
-
创建流程
l2cap_init() sm_init() sdp_init() bnep_init() bnep_register_service(packet_handler, BLUETOOTH_SERVICE_CLASS_NAP, 1691) pan_create_panu_sdp_record() sdp_register_service btstack_network_init hci_add_event_handler gap_set_local_name("NAP Server 00:00:00:00:00:00"); gap_set_class_of_device(0x020300); hci_power_control(HCI_POWER_ON);
-
处理流程
graph LR packet_handler --> packet_type:HCI_EVENT_PACKET packet_type:HCI_EVENT_PACKET --> HCI_EVENT_PIN_CODE_REQUEST packet_type:HCI_EVENT_PACKET --> HCI_EVENT_USER_CONFIRMATION_REQUEST packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_OPENED --> btstack_network_up packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_TIMEOUT packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CHANNEL_CLOSED -->btstack_network_down packet_type:HCI_EVENT_PACKET --> BNEP_EVENT_CAN_SEND_NOW --> bnep_send packet_handler --> BNEP_DATA_PACKET --> btstack_network_process_packet
主要流程解析:
PANU服务端是用来等待客户端连接的,由于BLE采用安全连接,所以建立连接时用采用PINCODE验证 连接建立后等待BNEP事件,收到BNEP_EVENT_CHANNEL_OPENED后开启网络btstack_network_up