[求助]CH375B 做host,描述符超過64B

如題 device 描述符超過64B,issue_token_x該怎樣處理,得到全部描述符,謝謝!

你可以到這個里面去下載一個CH375B操作鍵盤鼠標的程序,里面有控制傳輸采用外置固件的程序: http://www.findthetime.net/bbs/View.asp?S=101&I=19463


(1)您需要先了解一下描述符的結(jié)構(gòu) (2)描述符中有表示整個描述符總長度的數(shù)據(jù),第一次先把總長度獲取到,然后根據(jù)這個長度分多次獲取,獲取的流程參考樓上的例程


謝謝兩位的回復(fù),我研究了例子,感覺有個問題,我有些不大理解 unsigned char get_descr_ex() 函數(shù)里面 有個 p+=0x08; 這樣我的描述符的結(jié)構(gòu)里面 每次只有8字節(jié)存儲?

目前我遇到的情況是 totallength = 0x95 讀第一次是64B,讀第二次時,就沒反映了,中斷不再發(fā)生。

Descr_Config.wTotalLength = 0x95; u08Length = 0x95;

UINT08 Get_Describle_Other(UINT08 u08Type, UINT08 u08Length) { UINT08 u08DesrLen; UINT08 revmode; UINT08 *p = descr_buf; p_Dev_Data[0] = 0x80; // requestrype// host to device p_Dev_Data[1] = USB_REQ_GET_DESCRIPTOR; // request get scriber p_Dev_Data[2] = 0x00; p_Dev_Data[3] = u08Type; // descr type, dev, config, string, interface, endpoint p_Dev_Data[4] = 0x00; // p_Dev_Data[5] = 0x00; p_Dev_Data[6] = u08Length; p_Dev_Data[7] = 0x00;

wr_usb_data(8, p_Dev_Data);

u08Statue = issue_token_X( ( 0 << 4 ) | DEF_USB_PID_SETUP, 0x80);

revmode = 0xc0; u08DesrLen = Descr_Config.wTotalLength;

if(u08Statue == USB_INT_SUCCESS) while(u08DesrLen) { // if(u08Statue == USB_INT_SUCCESS) { u08Statue = issue_token_X( ( 0 << 4 ) | DEF_USB_PID_IN, revmode); if(revmode == 0x80) revmode = 0xC0; else revmode = 0x80; }

if(u08Statue == USB_INT_SUCCESS) { u08Statue = rd_usb_data( p); u08DesrLen -= u08Statue; p += u08Statue; } u08Statue = 0x00;

} wr_usb_data( 0, p_Dev_Data); u08Statue = issue_token_X( ( 0 << 4 ) | DEF_USB_PID_OUT, 0x40);

if(u08Statue == USB_INT_SUCCESS) { return (p_Dev_Data[0]); }

return (0xFF); }

請大家指點一下,該怎樣完成這個讀取過程,謝謝!


(1) p+=0x08你可以將其修改為p+=Length;//length應(yīng)該是每次獲取的描述符的實際長度 (2)u08DesrLen = Descr_Config.wTotalLength;如果你是根據(jù)這個長度向設(shè)備索取描述符的話不是太妥當(dāng).如二樓所說,第一次獲取描述符總長度(這個長度可能小于Descr_Config.wTotalLength).你應(yīng)該根據(jù)這個總長度來向設(shè)備索取描述符.


現(xiàn)在已經(jīng)可以讀取完整的描述符了,現(xiàn)在有個新問題請教大蝦

下面是讀取完整描述符之后分析出來,

usb設(shè)備 有3個 interface, 第三個是hid interface, 只有一個endp 是 0x83。

我使用例程的get_report_descr_ex總是不成功

Request.Req.bmRequestType=0x81; Request.Req.bRequest=0x06; Request.Req.wValue=0x0022; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0000|((unsigned int)(report_descr_len+0x40)<<8);

執(zhí)行 issue_token 時, 出現(xiàn)錯誤, 返回代碼 0x2E, 請各位大蝦給出一些建議,謝謝!


get_report_descr_ex里的接口號沒有設(shè)置好: Request.Req.wIndex=((unsigned int)InterfaceNum)<<8;//對應(yīng)HID設(shè)備的接口號


謝謝各位幫忙,現(xiàn)在已經(jīng)能順利讀取所有描述符了!

主要問題是 51編譯器,avrgcc的編譯 對于數(shù)據(jù)的大端小端處理不同, 使得發(fā)送數(shù)據(jù)的順序不對,導(dǎo)致命令出錯!


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频