按官方技術(shù)回答后修改鍵盤端的為
然后Dongle端為
打印數(shù)據(jù)
但電腦鼠標(biāo)光標(biāo)沒有動(dòng)作
按官方技術(shù)回答后修改鍵盤端的為
然后Dongle端為
打印數(shù)據(jù)
但電腦鼠標(biāo)光標(biāo)沒有動(dòng)作
您好,鼠標(biāo)的報(bào)表描述符是寫好在2.4GDongle中的,因此demo中的程序是以鍵盤作為USB接口0的一個(gè)HID鍵鼠復(fù)合設(shè)備。
其中,鍵盤端往接收器端發(fā)送數(shù)據(jù)的步驟如下:
1、找到send_buf這個(gè)結(jié)構(gòu)體,send_buf.report_id=0x05(程序中定義的Mouse數(shù)據(jù)包頭ID號(hào)),例程的報(bào)表中鼠標(biāo)是4字節(jié)數(shù)據(jù),分別定義為button、x、y、wheel四個(gè)字節(jié),將對(duì)應(yīng)的四字節(jié)數(shù)據(jù)填入send_buf.data中,此時(shí)的send_buf包填充完畢。
2、調(diào)用int ret = rf_port_load_data(RF_TYPE_CMD_KEY, (uint8_t *)&send_buf,sizeof(rf_data_t) - sizeof(send_buf.data) + key_len);將數(shù)據(jù)通過tmos_memcpy(rf_buf_send.user_data, data, len);將data填充到rf_buf_send.user_data里面。
3、緊接著,搜索rf_port_rcv_cb這個(gè)回調(diào)函數(shù),往下翻有一個(gè)rf_send((uint8_t *)&rf_buf_send, sizeof(struct rf_trans_buf) -sizeof(rf_buf_send.user_data) + rf_buf_send.user_len);此時(shí)調(diào)用了這句后數(shù)據(jù)會(huì)被發(fā)送到dongle端。(發(fā)送失敗會(huì)重傳,程序中有做處理,您自己看下)
4、視角來到Dongle端程序,搜索RF_2G4StatusCallBack回調(diào)函數(shù),鍵盤端發(fā)來的數(shù)據(jù)會(huì)進(jìn)入到Dongle的RX_MODE_RX_DATA的case中,進(jìn)入rf_trans_rcv_cb所對(duì)應(yīng)的回調(diào)函數(shù)rf_port_send_request_cb中,此時(shí)進(jìn)入RF_TYPE_CMD_KEY的case中再進(jìn)入get_data_cb所對(duì)應(yīng)的回調(diào)函數(shù)get_data_deal中,通過OnBoard_SendMsg寫入U(xiǎn)SBID給tmos發(fā)送消息通知,再搜索USB_ProcessTMOSMsg,對(duì)應(yīng)KEY_MESSAGE的case中tmos_set_event(USBTaskID, USB_IN_EVT)啟動(dòng)USB上報(bào)事件,最終進(jìn)入DevEPn_IN_Deal函數(shù)執(zhí)行USB中斷端點(diǎn)上傳鼠標(biāo)數(shù)據(jù),由第一點(diǎn)中傳來的Mouse的report_id=5,進(jìn)入else if (report_id == MOUSE_ID)中完成上傳。
這是一個(gè)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)處理的整體流程,僅供參考。
Dongle端能打印收到的數(shù)據(jù),但4位數(shù)據(jù)格式首位是report_id,電腦端沒有出現(xiàn)鼠標(biāo)光標(biāo)和移動(dòng)
您好,看下usbdesc.c文件中HID_ReportDescriptor2這個(gè)報(bào)表描述符中往下翻找到圖中這里,看下鼠標(biāo)報(bào)表描述符這里0x85后面寫的是0x05還是0x06,如果是0x06就改為0x05
是的,昨晚找到了,弄好了,官方反應(yīng)真快,