PAN - Personal Area Networking Profile
PAN基于BNEP為應(yīng)用層提供藍(lán)牙設(shè)備間的單向網(wǎng)絡(luò)能力
PAN的服務(wù)能力:
- PAN User (PANU):使用藍(lán)牙網(wǎng)絡(luò)的用戶屯曹,可以通過NAP或者GN訪問藍(lán)牙網(wǎng)絡(luò)炕桨,或者和另外的PANU直連茉盏;
- Network Access Point (NAP):藍(lán)牙網(wǎng)絡(luò)的接入點(diǎn)庇麦,提供令PANU接入藍(lán)牙網(wǎng)絡(luò)并路由至IP網(wǎng)絡(luò)的功能瘦真;NAP是藍(lán)牙網(wǎng)絡(luò)和IP網(wǎng)絡(luò)之間的橋接使得雙方數(shù)據(jù)互通属铁;
- Group Ad-hoc Network (GN): 藍(lán)牙點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)憎夷,GN扮演中心節(jié)點(diǎn)的角色粱玲,最多7個(gè)PANU可以接入GN網(wǎng)絡(luò)并互相可以訪問傳遞數(shù)據(jù)
- 訪問PANU服務(wù):SPP等Profile一樣侍咱,要發(fā)現(xiàn)PAN服務(wù)先需要SDP查詢,然后建立BNEP連接密幔,這樣就能訪問了楔脯;
- 提供PANU服務(wù):同上先需要注冊(cè)個(gè)SDP記錄,標(biāo)明UUID胯甩,framesize等基礎(chǔ)信息昧廷,然后使能被發(fā)現(xiàn)堪嫂,注冊(cè)回調(diào)函數(shù)等客戶端訪問
PAN客戶端分析
-
創(chuàng)建流程
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的,所以自己?jiǎn)?dòng)后首先需要和服務(wù)端連接(sdp查找BLUETOOTH_SERVICE_CLASS_NAP) 由于BLE采用安全連接木柬,所以建立連接時(shí)用采用PINCODE驗(yàn)證 連接建立后進(jìn)行sdp查詢皆串,根據(jù)找到的對(duì)端地址,l2cap多路復(fù)用眉枕,客戶端uuid恶复,服務(wù)端uuid進(jìn)行bnep連接 連接建立好后啟動(dòng)btstack_network_up進(jìn)行Ethernet網(wǎng)絡(luò)和藍(lán)牙網(wǎng)絡(luò)的通信
PAN服務(wù)分析
-
創(chuàng)建流程
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服務(wù)端是用來等待客戶端連接的,由于BLE采用安全連接速挑,所以建立連接時(shí)用采用PINCODE驗(yàn)證 連接建立后等待BNEP事件谤牡,收到BNEP_EVENT_CHANNEL_OPENED后開啟網(wǎng)絡(luò)btstack_network_up