// Default MITM mode (TRUE to require passcode or OOB when pairing) 設置開啟 #define DEFAULT_MITM_MODE TRUE // Default bonding mode, TRUE to bond #define DEFAULT_BONDING_MODE TRUE // Default GAP bonding I/O capabilities 啟動鍵盤輸入密碼功能 #define DEFAULT_IO_CAPABILITIES GAPBOND_IO_CAP_KEYBOARD_ONLY
// Setup the GAP Bond Manager 作用代碼 { 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_PERI_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey ); GAPBondMgr_SetParameter( GAPBOND_PERI_PAIRING_MODE, sizeof( uint8 ), &pairMode ); GAPBondMgr_SetParameter( GAPBOND_PERI_MITM_PROTECTION, sizeof( uint8 ), &mitm ); GAPBondMgr_SetParameter( GAPBOND_PERI_IO_CAPABILITIES, sizeof( uint8 ), &ioCap ); GAPBondMgr_SetParameter( GAPBOND_PERI_BONDING_ENABLED, sizeof( uint8 ), &bonding ); }
設備被連接后,進入該回調函數,啟動密碼輸入任務,等待輸入密碼
/********************************************************************* * @fn hidDevPasscodeCB * * @brief Passcode callback. * * @param deviceAddr - address of device to pair with, and could be either public or random. * @param connectionHandle - connection handle * @param uiInputs - pairing User Interface Inputs - Ask user to input passcode * @param uiOutputs - pairing User Interface Outputs - Display passcode * * @return none */ static void hidDevPasscodeCB( uint8 *deviceAddr, uint16 connectionHandle, uint8 uiInputs, uint8 uiOutputs ) { uint32 passkey =0; if ( pHidDevCB && pHidDevCB->passcodeCB ) { // execute HID app passcode callback (*pHidDevCB->passcodeCB)( deviceAddr, connectionHandle, uiInputs, uiOutputs ); } else { GAPBondMgr_GetParameter( GAPBOND_PERI_DEFAULT_PASSCODE, &passkey ); tmos_start_task(hidEmuTaskId,PASSKEY_EVT,400); //啟動輸入密碼的任務 // GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passkey ); } // Send passcode response }
密碼是在串口中斷里面接收的(當然這個只是操作例子,不限制輸入方式)
if ( events & PASSKEY_EVT ) { uint32 passkey =0; uint8 i; if((Rcvlen==8)) { for(i=2;i<8;i++) //密碼是10進制數輸入,需要進制進制轉換 { passkey=10*passkey; passkey+=(RxBuff[i]-0x30); PRINT(" %d",RxBuff[i]); } PRINT(" %d",passkey); Rcvlen =0; GAPBondMgr_PasscodeRsp( hidEmuConnHandle, SUCCESS, passkey ); //輸入密碼 } else { tmos_start_task(hidEmuTaskId,PASSKEY_EVT,400);//如果沒有接收到密碼,重新開啟任務 } return ( events ^ PASSKEY_EVT ); }
