问题现象:CC2640作为蓝牙发起设备,设置为需要密码配对但不绑定模式(密码设置为123456),分别采用IOS和Android蓝牙APP进行测试,现象如下:
1. 当使用IOS系统中蓝牙APP——LightBlue进行连接CC2640设备时,IOS手机端弹出配对框,此时必须输入密码才能与设备正常连接通讯,但这个输入的密码只要包含了正确的密码就可以连接,正确密码为“123456”,但我输入如“0123456”、“12345678”、“0123456789”等这样的密码均可以正常连接通讯。
2. 当使用Android系统中蓝牙APP进行连接CC2640设备时,Android手机端选择不输入任何密码,此时也可以正常连接该设备,通讯也正常。
请问这两个现象是什么原因导致,怎么解决啊?
Viki Shi:
连接跟配对是独立的,无论配对是否正确,连接是正常的。
方便把你的配置发出来吗?使用时如果禁止了IO capacity,会使用just works完成配对
feng wang17:
回复 Viki Shi:
这是配置:
// Setup the GAP //BY ZCX TGAP_CONN_PAUSE_PERIPHERAL参数更新请求 GAP_SetParamValue(TGAP_CONN_PAUSE_PERIPHERAL, DEFAULT_CONN_PAUSE_PERIPHERAL);
// Setup the GAP Peripheral Role Profile { // For all hardware platforms, device starts advertising upon initialization uint8_t initialAdvertEnable = TRUE;
// By setting this to zero, the device will go into the waiting state after // being discoverable for 30.72 second, and will not being advertising again // until the enabler is set back to TRUE uint16_t advertOffTime = 0;
uint8_t enableUpdateRequest = DEFAULT_ENABLE_UPDATE_REQUEST;//BY ZCX使能请求更新 uint16_t desiredMinInterval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;//BY ZCX最小连接间隔 uint16_t desiredMaxInterval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;//BY ZCX最大连接间隔 uint16_t desiredSlaveLatency = DEFAULT_DESIRED_SLAVE_LATENCY;//BY ZCX从潜伏期 uint16_t desiredConnTimeout = DEFAULT_DESIRED_CONN_TIMEOUT;//BY ZCX监督超时
// Set the GAP Role Parameters GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initialAdvertEnable);//BY ZCX 广播使能 GAPRole_SetParameter(GAPROLE_ADVERT_OFF_TIME, sizeof(uint16_t), &advertOffTime);//BY ZCX 广播关闭时间
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);//BY ZCX 扫描请求数据 GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);//BY ZCX 广播数据
GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8_t), &enableUpdateRequest);//BY ZCX 从机连接参数更新使能 GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &desiredMinInterval);//BY ZCX 最小连接时间间隔 GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &desiredMaxInterval);//BY ZCX 最大连接时间间隔 GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t), &desiredSlaveLatency);//BY ZCX 从机潜伏 GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t), &desiredConnTimeout);//BY ZCX 最大耐心等待时间???????????? }
// Set the GAP Characteristics GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName);
// Set advertising interval { uint16_t advInt = DEFAULT_ADVERTISING_INTERVAL;//BY ZCX 广播时间间隔
GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MIN, advInt);//BY ZCX 在限制发现模式下最小广播时间间隔 GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MAX, advInt);//BY ZCX 在限制发现模式下最大广播时间间隔 GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MIN, advInt);//BY ZCX 永久广播模式下最小广播时间间隔 GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MAX, advInt);//BY ZCX 永久广播模式下最大广播时间间隔 }
// Setup the GAP Bond Manager { uint32_t passkey = 123456; // passkey "000000"// uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;//BY ZCX 等待配对请求 uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE; uint8_t mitm = TRUE; uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;//BY ZCX 只有显示 uint8_t bonding = TRUE;
GAPBondMgr_SetParameter(GAPBOND_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);//BY ZCX 默认密码 GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);//BY ZCX 配对模式 GAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm); GAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap); GAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);//BY ZCX 开启配对功能 }
// Initialize GATT attributes GGS_AddService(GATT_ALL_SERVICES); // GAP GATTServApp_AddService(GATT_ALL_SERVICES); // GATT attributes DevInfo_AddService(); // Device Information Service
feng wang17:
回复 Viki Shi:
TI 员工,你好:
请问下“禁止了IO capacity,会使用just works完成配对”,如何配置做才会出现这个情况,
也就是说如何禁止了IO capacity?
甜甜的大香瓜:
连接与配对是两件事情,连接在配对之前。
不输入密码而能读写特征值,这是因为你的从机代码没有把特征值加密导致的。
详情看我个性签名档的博客地址,《CC2541之配对与绑定》。
feng wang17:
回复 甜甜的大香瓜:
那请问下,“正确密码为“123456”,但我输入如“0123456”、“12345678”、“0123456789”等这样的密码均可以正常连接通讯;但如果输入不包含正确密码,如“234656”这样的密码就会正常显示密码错误。”,这个问题是如何导致的?
甜甜的大香瓜:
回复 feng wang17:
不用管,特征值加密了就能正常。上面文章自己看。
feng wang17:
回复 Viki Shi:
TI员工,你好:
我的问题依然存在,希望指点下。你看看我的配置怎么导致IO capicity禁止的吧。
谢谢