续前几部分

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条
第三条
第四条