如何为白名单操作配置STM32WB LE中央(客户端)或外围设备(服务器)“第2部分”
续前几部分3。项目修改提供了客户端和服务器的项目代码修改。3.1客户端和服务器常见修改:以下提供了客户端和服务器通用的关键修改。。。。
续前几部分
表1:客户端和外围文件的常见配置
表2:切换按钮定义、来自服务器的配对请求和安全设置重置
该系统将通过本文件前一节中描述的等效Pass 1。跟踪输出是通过终端接口提供的,该接口引导用户在过程中的位置。
表3:按顺序发生的关键事件
连接后,客户端将启动aci_gap_terminate命令,实质上断开客户端和服务器的连接。在这种情况下,服务器将存储所有信息,并将客户端信息添加到白名单中。表4显示了检测到EVT_DISCON_COLETE后的相关步骤。该过程的描述直接在下表中提供。
表4:重新启动断开连接和白名单广告
提供了上表中定义的关键要素的摘要。一旦检测到断开连接事件,系统通常会进入重新连接状态。在“A”中,标准广告请求已被注释掉,因为需要使用白名单进行广告。在“B”中,白名单是在断开连接事件期间配置的。在C中,调试消息被写入终端以用于跟踪目的。最后,在“D”中,启动一个新的广告请求,过滤策略=3。
出于解释目的,下面重复完整的调用:
tBleStatus aci_gap_set_undirected_connectable(uint16_t广告间隔最小值,
uint16_t广告间隔最大值,
uint8_t所有者地址类型,
uint8_t高级过滤器策略);
设置为0x03的Adv_Filter_Policy定义以下连接:
-0x03:仅允许来自白名单的扫描请求,仅允许来自白名单的连接请求
另一个关键元素是Own_Address_Type,它必须是公共地址。
如前所述,使用此设置自动禁用AD标志,并且服务器或外围设备仅对同一白名单设置内的另一设备完全可见。
第1条
第三条
第四条
3.项目修改
提供了客户端和服务器的项目代码修改。3.1客户端和服务器常见修改:
下面提供了客户端和服务器通用的关键修改。将突出显示感兴趣的参数。表1:客户端和外围文件的常见配置
应用程序_函数.h |
/** *定义IO身份验证 */ #定义CFG_BONDING_MODE(1) #定义CFG_FIXED_PIN(111111) #定义CFG_USED_FIXED_PIN(0) #定义CFG_ENCRYPTION_KEY_SIZE_MAX(16) #定义CFG_ENCRYPTION_KEY_SIZE_MIN(8) /** |
/*定义IO功能 */ #定义CFG_IO_CAPABILITY_DISPLAY_ONLY(0x00) #定义CFG_IO_CAPABILITY_DISPLAY_YES_NO(0x01) #定义CFG_IO_CAPABILITY_KEYBOARD_ONLY(0x02) #定义CFG_IO_CAPABILITY_NO_INPUT_NO_OUTPUT(0x03) #定义CFG_IO_CAPABILITY_KEYBOARD_DISPLAY(0x04) #定义CFG_IO_CAPABILITY CFG_IO_CAPABILITY_DISPLAY_YES_NO |
/** *定义MITM模式 */ #定义CFG_MITM_PROTECTION_NOT_REQUIRED(0x00) #定义CFG_MITM_PROTECTION_REQUIRED(0x01) #定义CFG_MITM_PROTECTION CFG_MITM_PROTECTION_REQUIRED |
/** *定义按键通知支持 */ #定义CFG_KEYPRESS_NOT_SUPPORTED(0x00) #定义CFG_KEYPRESS_SUPPORTED(0x01) #定义CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPressS_NOT_SUPPORTED /** *数字比较答案 */ #定义是(0x01) #定义NO(0x00) |
表2:切换按钮定义、来自服务器的配对请求和安全设置重置
应用程序条目.c | 应用程序_文件.c |
/*用户代码开始FD_WRAP_FUNCTIONS*/ 无效HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { 开关(GPIO_Pin) { 大小写BUTTON_SW1_PIN: APP_BLE_Key_Button_Action()(应用程序_键盘_按钮_动作); /*SW1开始连接过程*/ 打破 大小写BUTTON_SW2_PIN: APP_BLE_Key_Button2_Action(); 打破 大小写BUTTON_SW3_PIN: APP_BLE_Key_Button_Action(); /*SW3启动配对过程*/ 打破 默认值: 打破 } 回来 } |
/*用户代码开始FD*/ 无效APP_BLE_Key_Button1_Action(无效) { P2PS_APP_SW1_按钮动作(); } 无效APP_BLE_Key_Button2_Action(无效) { #如果(L2CAP_REQUEST_NEW_CONN_PARAM!=0) UTIL_SEQ_Setsk(1<<CFG_TASK_CONN_UPDATE_REG_ID,CFG_SCH_PRIO_0); #结束语 回来 } 无效APP_BLE_Key_Button_Action(无效) { /*请求配对*/ aci_gap_slave_security_req(BleApplicationContext.BleaApplicationContext_legacy.connectionHandle); } /*用户代码结束FD*/ |
/*用户代码开始APP_BLE_Init_2*/ (无效)aci_gap_clear_security_db(); /*每次新重置时清除所有现有的安全设置*/ /*用户代码结束APP_BLE_Init_2*/ |
该系统将通过本文件前一节中描述的等效Pass 1。跟踪输出是通过终端接口提供的,该接口引导用户在过程中的位置。
表3:按顺序发生的关键事件
应用程序_文件.c |
案例EVT_LE_CONN_COMPLETE: |
案例(EVT_BLUE_GAP_NUMERIC_COMPARION_VALUE): |
案例(EVT_BLUE_GAP_PAIRING_CMPLT): |
连接后,客户端将启动aci_gap_terminate命令,实质上断开客户端和服务器的连接。在这种情况下,服务器将存储所有信息,并将客户端信息添加到白名单中。表4显示了检测到EVT_DISCON_COLETE后的相关步骤。该过程的描述直接在下表中提供。
表4:重新启动断开连接和白名单广告
应用程序_文件.c | 议论 |
案例EVT_DISCON_COMPLETE: { hci_disconnection_complete_event_rp0*断开连接_complete-event; disconnection_complete_event=(hci_disconnection_conlete_event_rp0*)event_pckt->数据; if(disconnection_complete_event->Connection_Handle==BleApplicationContext.BleaApplicationContext_legacy.connectionHandle) { BleApplicationContext.BleApplicationContext_legacy.connectionHandle=0; BleApplicationContext.Device_Connection_Status=APP_BLE_IDLE; APP_DBG_MSG(“\r\n\r\n**与客户断开连接事件”); } /*重新启动广告*/ /*高级请求(APP_BLE_FAST_Adv);*//*ST不重新启动广告*/ /** *特定于P2P服务器应用程序 */ handleNotification.P2P_Evt_Opcode=PEER_DISCON_HANDLE_Evt; handleNotification.ConnectionHandle=BleApplicationContext.BleApplicationContext_legacy.ConnectionHandle; P2PS_APP_通知(&handleNotification); /*用户代码BEGIN EVT_discon_COMPLETE*/ aci_gap_configure_whitelist();/*ST存储断开连接时的白名单*/ /*仅允许来自白名单的扫描请求,允许来自的连接请求*/ /**/ /*仅限白名单*/ APP_DBG_MSG(“\r\n\r\n**WHITELIST已执行”); aci_gap_set_ unsdirected_connectable(CFG_FAST_, CFG_FAST_CONN_ADV_INTERVAL_MAX, PUBLIC_ADDR, 0x03); APP_DBG_MSG(“\r\n\r\n**在WHITELIST之后开始的新广告”); /*0x03是白名单过滤器值*/ /*高级请求(APP_BLE_FAST_Adv)*/ |
断开 A. B C D |
提供了上表中定义的关键要素的摘要。一旦检测到断开连接事件,系统通常会进入重新连接状态。在“A”中,标准广告请求已被注释掉,因为需要使用白名单进行广告。在“B”中,白名单是在断开连接事件期间配置的。在C中,调试消息被写入终端以用于跟踪目的。最后,在“D”中,启动一个新的广告请求,过滤策略=3。
出于解释目的,下面重复完整的调用:
tBleStatus aci_gap_set_undirected_connectable(uint16_t广告间隔最小值,
uint16_t广告间隔最大值,
uint8_t所有者地址类型,
uint8_t高级过滤器策略);
设置为0x03的Adv_Filter_Policy定义以下连接:
-0x03:仅允许来自白名单的扫描请求,仅允许来自白名单的连接请求
另一个关键元素是Own_Address_Type,它必须是公共地址。
如前所述,使用此设置自动禁用AD标志,并且服务器或外围设备仅对同一白名单设置内的另一设备完全可见。
第1条
第三条
第四条