说一下用USB-Dongle和CC2541开发板实现键盘和鼠标的问题,有些解决了,有些没有来求问一下
问题1:首先CC2541蓝牙开发板烧写了HIDEmuKbd的程序,发现不能广播
解决1:hidemukbd.c文件中的HidEmuKbd_Init( uint8 task_id ),函数:initial_advertising_enable = FALSE;这一句改成 initial_advertising_enable = TRUE;
问题2:USB-Dongle烧写官方的CC2540_USBdongle_HIDAdvRemoteDongle,两者不能连接.
解决2:hidemukbd.c文件中的advData[]数组中的GAP_ADTYPE_FLAGS_GENERAL | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,改成GAP_ADTYPE_FLAGS_LIMITED | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED。原因:因为这个是通用模式广播,USB-Dongle的扫描方式是限制模式的发现,两者不匹配造成.(PS:USB-Dongle中hidapp.c文件中的DEFAULT_DISCOVERY_MODE预定义一定要和hidemukbd.c文件中的advData[]数组中的扫描方式一致才可以建立连接)
问题3:两者连接后,按下SW1(也就是P0.0)的按键,发现USB-Dongle红灯闪烁一下,此时绿灯也是长亮,说明有接收到数据包,但是在电脑上并没有打印字符A(PS :我将按下SW1的时候改成发送字符A),用BUS Hound软件调试也发现USB数据包错误,具体什么错误我也不懂。
解决3:发现是按键时,开发板通知给USB-Dongle的handle在USB-Dongle中判断出错,也就是hidapp.c中的hidappSendInReport( attHandleValueNoti_t *pNoti )函数handle判断错误,将按键handle误判断为鼠标按键,需要将两者if语句中的endpoint的值换一下就可以了.
问题4:接下来就是实现鼠标点击事件,但是这个问题我没有解决。问题就是我蓝牙开发板发送鼠标按键,上位机接收不到,调试发现是hidemukbd.c文件中的hidEmuKbd_HandleKeys( uint8 shift, uint8 keys )函数中hidEmuKbdSendMouseReport( MOUSE_BUTTON_1 );语句中的
HidDev_Report( HID_RPT_ID_MOUSE_IN, HID_REPORT_TYPE_INPUT,HID_MOUSE_IN_RPT_LEN, buf );语句中的hidDevSendReport( id, type, len, pData );语句中的if ( (pAttr = GATT_FindHandle(pRpt->cccdHandle, &retHandle)) != NULL )判断出错,并没有进入到if语句中,应该是这个配置handle没有找到。。。,也就是说没有发送通知。(PS:具体什么原因我也不知道,希望TI的大牛能给与帮助,顺便也写一下后来人可能会遇到的问题,另外问题4的描述过于冗余,但是我这是一步步调试过来的,后面再有人遇到这个问题可以根据这个步骤找到最终的问题所在。。。)
总结的不错!