蓝牙学习-PAN

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网络并互相可以访问传递数据
  1. 访问PANU服务:SPP等Profile一样,要发现PAN服务先需要SDP查询,然后建立BNEP连接,这样就能访问了;
  2. 提供PANU服务:同上先需要注册个SDP记录,标明UUID,framesize等基础信息,然后使能被发现,注册回调函数等客户端访问

PAN客户端分析

  1. 创建流程

    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);
    
  1. 处理流程

    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服务分析

  1. 创建流程

    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);
    
  1. 处理流程

    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
    

你可能感兴趣的:(蓝牙学习-PAN)