CC2540 配对密码问题
请各位指点一下,
在simpleBLEPeripheral.c里,有如下设置
uint32 passkey = 655355; // passkey "000000"
uint8 pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ ;
uint8 mitm =TRUE;
uint8 ioCap = GAPBOND_IO_CAP_KEYBOARD_DISPLAY ;
uint8 bonding = TRUE;
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 );
为什么我用LightBlue连设备的时候,还是不需要输入配对密码,直接就连上。是不是还要在什么地方作什么设置
配对绑定不影响连接的。 你处于等待配对请求状态(pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ),lightblue不发起配对过程,自然不会主动配对。
您好,TY,
那请问您一下,我要怎么修改才能达到 输入密码才能使用设备提供的服务 的效果。我作了如下修改:
static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] = {
// Simple Profile Service
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
GATT_PERMIT_AUTHOR_READ, /* permissions */
0, /* handle */
(uint8 *)&simpleProfileService /* pValue */
},
。。。。
}
红字部分改成了GATT_PERMIT_AUTHOR_READ或GATT_PERMIT_AUTHEN_READ都不行。。
在哪个函数下添加发起配对的代码,求大神简述下具体怎么实现?
配对是自己管理的,你可以设置密码和模式来实现简单的授权:
// Setup the GAP Bond Manager
{
uint32 passkey = 0; // passkey "000000" 配对密码,俗称PIN码,六位数字
uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE; //GAPBOND_PAIRING_MODE_NO_PAIRING;
uint8 mitm = TRUE;
uint8 ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
uint8 bonding = TRUE;
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 );
}
请问,如果我把CC2541上的绑定信息清除了,为什么我已经配对的手机再次连接不需要密码,,,,怎样实现才能实现,CC2541绑定信息清除 再次连接需要密码?求
你好,请问这个问题有答案了吗? 就是cc2540这边擦除了绑定,ios上还是不需要输入密码,是否有了解决方案?
如果该了
GAPBOND_PAIRING_MODE_INITIATE; 为GAPBOND_PAIRING_MODE_NO_PAIRING;
else if ( gapBond_PairingMode == GAPBOND_PAIRING_MODE_NO_PAIRING )
{
// No Pairing - Send error
VOID GAP_TerminateAuth( pPkt->connectionHandle, SMP_PAIRING_FAILED_NOT_SUPPORTED );
}
直接就连接错误,还是无解,,,,,,
关于cc2541上面清除配对信息,但是ios设备上面连接的时候仍然可以连接上的问题我也碰到了。我是在修改配对密码时出现的,修改完配对密码之后就清除cc2541上面的配对信息。但是在iPhone上面仍然不用输入密码直接连上,并且我跟踪cc2541的流程来看的话密码管理的回调以及绑定过程的回调都没有跑,然后就直接连上了。而用iPod测试的时候密码管理的回调和绑定过程的回调都跑了,但是仍然走的是已经绑定的流程。
蓝牙4.0的配对与蓝牙2.0是不同的
蓝牙2.1的配对是连接之前做的,而蓝牙4.0的配对是连接之后做的,所以无论你是否配对都是可以连接上的,要么你就自己做个密码,连接上就需要输入密码,不然就断开连接。
static void ProcessPasscodeCB(uint8 *deviceAddr,uint16 connectionHandle,uint8 uiInputs,uint8 uiOutputs )
{
uint32 passcode=123456;
uint8 str[7];
//在这里可以设置存储,保存之前设定的密码,这样就可以动态修改配对密码了。-存于flash中
// Create random passcode
//LL_Rand( ((uint8 *) &passcode), sizeof( uint32 ));
passcode %= 1000000;
//在lcd上显示当前的密码,这样手机端,根据此密码连接。
// Display passcode to user
if ( uiOutputs != 0 )
{
HalLcdWriteString( "Passcode:", HAL_LCD_LINE_1 );
HalLcdWriteString( (char *) _ltoa(passcode, str, 10), HAL_LCD_LINE_2 );
}
// Send passcode response
GAPBondMgr_PasscodeRsp( connectionHandle, SUCCESS, passcode );
}
请问怎么动态修改密码
可以将密码保存在其文件系统中(实际就是flash中),连接配对成功之后就可以通过给其发命令来修改密码了。有一个问题就是除非将手机端的配对信息给删除,否则新的密码对于已经配对成功过的手机是不起作用的,但是新密码对于未配对的移动设备是起作用的。
那我的产品换新用户了,岂不是老用户也可以用?这是CC2540的BUG?就没有解决办法吗?
如果老用户之前已经配对过的话新的密码对其实不起作用的。这个不是CC2540的bug,蓝牙协议就是这样的。解决方法有的,你可以绕开系统的输入密码这个过程,自己做一个密码校验功能,这样在任何时候你的修改密码功能均可以生效了
密码校验功能?不怎么理解,能再解释下吗?麻烦了, 问题在于怎么把原来绑定的给擦除呢?
跟擦除没关系的。就是你将cc2540设置成不需要密码就可连上,然后连上之后你做一个请求密码校验的功能就可以了。
pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ
PAIRING_MODE_NO_PAIRING //!< Pairing is not allowed
GAPBOND_PAIRING_MODE_WAIT_FOR_REQ //!< Wait for a pairing request or slave security request
GAPBOND_PAIRING_MODE_INITIATE //!< Don't wait, initiate a pairing request or slave security request
如果想上电就配对,就选择第三个GAPBOND_PAIRING_MODE_INITIATE
你的意思是不绑定?
不是不绑定,因为只要手机和cc2540连接之后手机端会自动绑定,cc2540中绑定信息根本没法做校验的,即使你删掉绑定信息但是手机端不删掉的话仍然是可以直接连上的。按之前那位哥们说的那样,选
-
GAPBOND_PAIRING_MODE_INITIATE,这样手机就可以直接和cc2540连接了。剩下你想怎么做密码校验就是你纯软件的流程了,跟蓝牙协议没关系了
我是通过直接连接,然后每次发送指令都验证一遍密码,解决问题了,整个过程不绑定。多谢hu ai的指导交流
你好,我现在初学这个,老师要交作业,我们都不会,能不能将您的例程发给我,让我学习学习。。。感激不尽
你好,CC2540中怎么绕过配对,在直接与手机相连后,每次发送指令都进行密码校验?能指导一下软件怎么实现吗?先谢谢啦!
每次发送指令都校验会很影响传输效率吧,一般来说,前期的密码验证就已经确定了双方的合法身份,请问是什么应用场景?
恩,也不是必须要这样做,只是手机端的蓝牙配对信息不清除的话,第一次连接成功后,之后都不用身份认证了就可以直接连接,换了密码也没用?请问这怎么解决?
你好,
如果你现在使用lightblue,你会看到对话框被弹出,需要你输入密码。
已经被验证过!希望对你有帮助。
