摘要
在BLE蓝牙设计中很多时候属于直接连接后使用某个服务直接传输数据;该模式优点是连接方便,缺点是数据传输容易被监控,造成通讯数据泄露的风险。故,为了更加安全的数据通信,需要使用配对和绑定的机制来实现。配对和绑定过程刚开始会触发连接,连接后进入配对流程。
PHY6212中可以参考HIDKeyboard例程实现,本文简述修改某些关键参数实现绑定中相关模式的设置;
内容
初始化函数中图示红色框中是绑定相关配置参数
参数设置说明:
- ioCap:表示蓝牙设备有哪些输入输出资源,据此选择合适的密码验证方式,5种取值情况,映射出3种密码验证模式,以下说明默认主机具备输入输出功能(有键盘和显示屏);
- GAPBOND_IO_CAP_DISPLAY_ONLY:只能显示,此处需要显示配对密码,以便主机输入密码可以连接;
- GAPBOND_IO_CAP_DISPLAY_YES_NO:可以显示,并且可以选择“是/否”;
- GAPBOND_IO_CAP_KEYBOARD_ONLY:仅有键盘,配对时需要写入主机显示的PIN码;
- GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT:无键盘和显示,justwork模式,主机可以直连;也可以使用静态密码方式,提高加密等级;
- GAPBOND_IO_CAP_KEYBOARD_DISPLAY:有键盘和显示能力,均可以发起配对连接,显示一致的PIN码后输入确定连接;
- passKey:PIN码,取值范围:0-999999,配对密码,该例程默认的是静态模式;
- pairMode:
- GAPBOND_PAIRING_MODE_NO_PAIRING:不允许配对;
- GAPBOND_PAIRING_MODE_WAIT_FOR_REQ:等待请求配对;
- GAPBOND_PAIRING_MODE_INITIATE:不等待,直接发起配对请求;
- mitm:man in the middle,中间人攻击。意思是防止中介接入监听和篡改信息,如果要让通信具有MITM保户,不能使用justwork模式;
- bonding:使能绑定功能,是能后会记录配对信息,下次再配对时不用验证过程;
了解上述参数功能后移植就很方便了;
移植
移植工程为wrist_aptm;
-
打开OSAL_wrist.c文件,
osalInitTasks()
中添加GAPBondMgr_Init(taskID++);
;tasksArr[]
中添加GAPBondMgr_ProcessEvent
;
-
打开app_wrist.c文件,
appWristInit( uint8 task_id )
中添加以下代码即可;// Setup the GAP Bond Manager { // Default passcode #define DEFAULT_PASSCODE 0 // Default GAP pairing mode //#define DEFAULT_PAIRING_MODE GAPBOND_PAIRING_MODE_INITIATE #define DEFAULT_PAIRING_MODE GAPBOND_PAIRING_MODE_WAIT_FOR_REQ // Default MITM mode (TRUE to require passcode or OOB when pairing) #define DEFAULT_MITM_MODE FALSE // Default bonding mode, TRUE to bond #define DEFAULT_BONDING_MODE TRUE // Default GAP bonding I/O capabilities #define DEFAULT_IO_CAPABILITIES GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT uint32 passkey = DEFAULT_PASSCODE; uint8 pairMode = DEFAULT_PAIRING_MODE; uint8 mitm = DEFAULT_MITM_MODE; uint8 ioCap = DEFAULT_IO_CAPABILITIES; uint8 bonding = DEFAULT_BONDING_MODE; GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey ); GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof( uint8 ), &pairMode ); GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof( uint8 ), &mitm ); GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof( uint8 ), &ioCap ); GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof( uint8 ), &bonding ); }