2007-04-26 10:03 PM
2011-05-17 12:42 AM
Hello,
I'm trying to use the STRUSB libs in my project. In order to use some custom command I found that the pInformation->USBwValue has the low and high bytes swapped. so if I send 0x00001 from pc I obtain 0x1000 in fw. I thought that in the libs the convention was big endian.... I cheched the project config in the examples and the settings are little endian (like my config) I modified the code of Setup0_Process() as following and the code seem to work. Any remarks ? u8 Setup0_Process(void) { u16* pBuf; pBuf= (u16 *)(GetEPRxAddr(ENDP0)+PMAAddr); if (pInformation->ControlState != PAUSE) { pInformation->USBbmRequestType = (*pBuf)&0xFF; /* bmRequestType */ pInformation->USBbRequest = ((*pBuf)&0xFF00)>>8; /* bRequest */ pInformation->USBwValue = (*(pBuf+1)); /* wValue */ pInformation->USBwIndex = (*(pBuf+2)); /* wIndex */ // pInformation->USBwValue = ByteSwap(*(pBuf+1)); /* wValue */ // pInformation->USBwIndex = ByteSwap(*(pBuf+2)); /* wIndex */ pInformation->USBwLength = *(pBuf+3); /* wLength */ } .... }2011-05-17 12:42 AM
sorry.. a little mistake in previous post :)
In this way the code doesn work... I modify also in usb_core.h #define USBwValue0 USBwValues.bw.bb1 #define USBwValue1 USBwValues.bw.bb0 #define USBwIndex USBwIndexs.w #define USBwIndex0 USBwIndexs.bw.bb1 #define USBwIndex1 USBwIndexs.bw.bb0 .... The code is workin now but I didn't udestand the byteswap....