📄 test_host.c
字号:
0x91, 0xEC, 0xC8, 0xD2, 0x40, 0xF0, 0x25, 0xEF, 0x0A, 0x65, 0xFE, 0x7F, 0x02, 0x97, 0xC3, 0x92,
0x44, 0xA2, 0xC2, 0xD2, 0x42, 0x00, 0x88, 0x98, 0x90, 0x9A, 0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00,
0x0A, 0x65, 0xE8, 0x43, 0x02, 0x97, 0xC3, 0x92, 0x09, 0xA3, 0x40, 0x00, 0xC2, 0xD2, 0x0A, 0x65,
0xEA, 0x43, 0x02, 0x97, 0xC3, 0x92, 0x09, 0xB3, 0xFB, 0xFF, 0xC2, 0xD2, 0x40, 0x92, 0x19, 0xD3,
0x2D, 0xBC, 0x0A, 0x65, 0xD8, 0x43, 0x02, 0x97, 0xC3, 0x92, 0x09, 0xB3, 0xBF, 0xFF, 0xC2, 0xD2,
0x88, 0x98, 0x90, 0x9A, 0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00, 0x09, 0x63, 0xEA, 0x43, 0x01, 0x97,
0xC3, 0x94, 0x44, 0xA4, 0xC1, 0xD4, 0x11, 0x93, 0xB9, 0xEC, 0x40, 0x42, 0x02, 0x4E, 0x0F, 0x9F,
0x8C, 0xF7, 0x12, 0x95, 0x93, 0xEC, 0x0B, 0x67, 0x36, 0x43, 0xD2, 0x98, 0x1C, 0xD9, 0xC8, 0xBC,
0xD2, 0x98, 0x03, 0x93, 0xC1, 0xD8, 0x11, 0x93, 0xB9, 0xEC, 0x09, 0x03, 0xFF, 0xFF, 0x19, 0xD3,
0xB9, 0xEC, 0x40, 0x42, 0x02, 0x5E, 0x0F, 0x9F, 0x65, 0xF7, 0x19, 0xD3, 0xB8, 0xEC, 0x19, 0xD3,
0xBA, 0xEC, 0x0A, 0x05, 0xFE, 0xFF, 0xCA, 0xD2, 0xCA, 0xD2, 0xC2, 0xD2, 0x0A, 0x65, 0x5E, 0x43,
0x02, 0x97, 0xC3, 0x92, 0x48, 0xA2, 0xC2, 0xD2, 0x0A, 0x65, 0xEA, 0x43, 0x02, 0x99, 0xC4, 0x92,
0x09, 0xB3, 0xFB, 0xFF, 0x0F, 0x9F, 0x95, 0xF7, 0x11, 0x93, 0x03, 0xEC, 0x19, 0xD3, 0x01, 0x82,
0x0A, 0x65, 0xFD, 0x7D, 0x02, 0x97, 0xC3, 0x92, 0x43, 0xA2, 0xC2, 0xD2, 0x88, 0x98, 0x90, 0x9A,
0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00, 0x03, 0x92, 0x04, 0x96, 0x0D, 0x5E, 0x50, 0x46, 0x02, 0x0E,
0x40, 0x92, 0x09, 0xEE, 0x44, 0x46, 0x04, 0x0E, 0x59, 0x93, 0x44, 0x26, 0x04, 0x5E, 0x46, 0xEE,
0x41, 0x93, 0x41, 0x26, 0x43, 0x4E, 0x88, 0x98, 0x90, 0x9A, 0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00,
0x40, 0xF0, 0xB1, 0xFE, 0x88, 0x98, 0x90, 0x9A, 0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00, 0x88, 0x98,
0x90, 0x9A, 0x88, 0xDA, 0x08, 0x0B, 0x01, 0x00, 0x03, 0x94, 0x1A, 0xD5, 0xC0, 0xF7, 0x11, 0x93,
0x00, 0x90, 0x88, 0x98, 0x90, 0x9A, 0x1D, 0x00, 0x1A, 0x00, 0x03, 0x00, 0x03, 0x00, 0x18, 0x00,
0x19, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x16, 0x00, 0x21, 0x00, 0x12, 0x00, 0x09, 0x00, 0x13, 0x00,
0x19, 0x00, 0x19, 0x00, 0x19, 0x00, 0x21, 0x00, 0x2D, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xF2, 0xEA, 0xF7, 0x00, 0x00,
0x87, 0xF2, 0xEA, 0xF7, 0x00, 0x00, 0xCC, 0xF2, 0xE7, 0xF7, 0xEE, 0xF7, 0x00, 0x00, 0xB4, 0xF3,
0xEA, 0xF7, 0x25, 0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static BYTE CODE gBugArray[] =
{
0x02, 0x4E, 0x0F, 0x9F, 0x74, 0xF5, 0x0A, 0xB7, 0x00, 0x08, 0x40, 0x46, 0x02, 0x5E, 0x0F, 0x9F,
0x77, 0xF5, 0x11, 0x93, 0x03, 0xEC, 0x41, 0x02, 0x09, 0xB3, 0xFE, 0xFF, 0x12, 0x95, 0x07, 0x80,
0x01, 0x45, 0x02, 0x8E, 0x0F, 0x9F, 0x77, 0xF5, 0x41, 0x92, 0x0F, 0x9F, 0x78, 0xF5, 0x40, 0x92,
0x88, 0x98, 0x90, 0x9A, 0x88, 0xDA, 0x41, 0x20, 0x08, 0x0B, 0x01, 0x00, 0x0A, 0x65, 0xE9, 0x43,
};
extern BOOL
TestOTGHostCtrlTransfer(VOID)
{
static BYTE CODE GetDevDescriptor1[] = {0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00,};
static BYTE XDATA GetDevDescriptor2[] = {0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00,};
static BYTE CODE SetAddress[] = {0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,};
static BYTE CODE GetCfgDescriptor9[] = {0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x09, 0x00,};
static BYTE XDATA GetCfgDescriptor[] = {0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0xFF, 0x00,};
static BYTE CODE SetConfig[] = {0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,};
static BYTE CODE GetMaxLUN[] = {0xA1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,};
static BYTE XDATA GetStrDescriptorLongID[] = {0x80, 0x06, 0x00, 0x03, 0x00, 0x00, 0xFF, 0x00,};
static BYTE CODE GetStrDescriptorLongID2[] = {0x80, 0x06, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00,};
static BYTE XDATA GetStrDescriptorSerialNum[] = {0x80, 0x06, 0x03, 0x03, 0x09, 0x04, 0xFF, 0x00,};
static BYTE CODE GetStrDescriptorSerialNum2[] = {0x80, 0x06, 0x03, 0x03, 0x09, 0x04, 0x02, 0x00,};
static BYTE XDATA GetStrDescriptorProduct[] = {0x80, 0x06, 0x02, 0x03, 0x09, 0x04, 0xFF, 0x00,};
static BYTE CODE GetStrDescriptorProduct2[] = {0x80, 0x06, 0x02, 0x03, 0x09, 0x04, 0x02, 0x00,};
static BYTE CODE VendorRequestOUT1[] = {0x40, 0x30, 0x00, 0xEE, 0x00, 0x00, 0x40, 0x00,};
static BYTE CODE VendorRequestOUT2[] = {0x40, 0x30, 0x00, 0xF6, 0x00, 0x00, 0x00, 0x04,};
static BYTE CODE VendorRequestIN[] = {0xC0, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,};
BYTE XDATA val[10][64];
#if !TEST_HCD_EN
WORD length;
WORD temp;
#endif
#if TEST_HCD_EN
URB urb;
// hci.Ed[0].Number = 0;
// hci.Ed[0].Type = USB_ENDPOINT_XFER_CONTROL;
// hci.Ed[0].Direction = 0;
// hci.Ed[0].MaxPacketSize = 8;
// urb.Hci = &hci;
// hci.UsbStatus = USB_STATUS_NORMAL;
urb.FuncAddr = 0;
urb.EndPointNum = 0;
urb.TransferType = USB_ENDPOINT_XFER_CONTROL;
urb.Direction = USB_DIR_IN;
urb.MaxPacketSize = 8;
urb.Interval = 0;
// urb.FIFOSize = 64;
/* get device descriptor1 */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetDevDescriptor1;
urb.DataBuffer = val[0];
urb.DataLength = 8;
urb.IsUseDMA = 0;
urb.Status = NO_ERR;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
urb.MaxPacketSize = val[0][7];
GetDevDescriptor2[6] = val[0][0]; /* descripter length */
/* reset USB bus */
HciResetUsb();
/* set address */
urb.Direction = USB_DIR_OUT;
urb.SetupPacket = SetAddress;
urb.DataBuffer = NULL;
urb.DataLength = 0;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
urb.FuncAddr = SetAddress[2];
/* get device descriptor2 */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetDevDescriptor2;
urb.DataBuffer = val[1];
urb.DataLength = GetDevDescriptor2[6];
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* get configuration descriptor9 */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetCfgDescriptor9;
urb.DataBuffer = val[2];
urb.DataLength = 9;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
GetCfgDescriptor[6] = val[2][2];
/* get configuration descriptor */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetCfgDescriptor;
urb.DataBuffer = val[3];
urb.DataLength = GetCfgDescriptor[6];
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* get string descriptor long ID 2 bytes */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorLongID2;
urb.DataBuffer = val[4];
urb.DataLength = 2;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
GetStrDescriptorLongID[6] = val[4][0];
/* get string descriptor long ID */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorLongID;
urb.DataBuffer = val[4];
urb.DataLength = GetStrDescriptorLongID[6];
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* get string descriptor serial number 2 bytes */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorSerialNum2;
urb.DataBuffer = val[5];
urb.DataLength = 2;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
GetStrDescriptorSerialNum[6] = val[5][0];
/* get string descriptor serial number */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorSerialNum;
urb.DataBuffer = val[5];
urb.DataLength = GetStrDescriptorSerialNum[6];
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* get string descriptor product 2 bytes */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorProduct2;
urb.DataBuffer = val[6];
urb.DataLength = 2;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
GetStrDescriptorProduct[6] = val[6][0];
/* get string descriptor product */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetStrDescriptorProduct;
urb.DataBuffer = val[6];
urb.DataLength = GetStrDescriptorProduct[6];
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* set configuration */
urb.Direction = USB_DIR_OUT;
urb.SetupPacket = SetConfig;
urb.DataBuffer = NULL;
urb.DataLength = 0;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
/* get max LUN */
urb.Direction = USB_DIR_IN;
urb.SetupPacket = GetMaxLUN;
urb.DataBuffer = val[7];
urb.DataLength = 1;
if (HciSendUrb(&urb) != NO_ERR)
return FALSE;
return TRUE;
#else
/* get device descriptor1 */
if (!TestOTGCtrlSetupTransaction(GetDevDescriptor1, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[0], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
GetDevDescriptor2[6] = val[0][0];
/* reset USB bus */
/* send reset signal with high-speed and suspend enable */
SetBitOTGReg8(otg_CommonUSB_Power, (Power_hrw_Reset | Power_hrw_EnSuspendMode));
WaitMs(20);
/* clear reset signal */
ClrBitOTGReg8(otg_CommonUSB_Power, Power_hrw_Reset);
/* set address */
if (!TestOTGCtrlSetupTransaction(SetAddress, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(0, 0, 1))
return FALSE;
WriteOTGReg8(otg_CommonUSB_FAddr, 1);
/* get device descriptor2 */
if (!TestOTGCtrlSetupTransaction(GetDevDescriptor2, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[1], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
/* get configuration descriptor */
if (!TestOTGCtrlSetupTransaction(GetCfgDescriptor9, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[2], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
GetCfgDescriptor[6] = val[2][2];
/* get configuration descriptor */
if (!TestOTGCtrlSetupTransaction(GetCfgDescriptor, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[2], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
/* vendor request out1 for wifi */
if (!TestOTGCtrlSetupTransaction(VendorRequestOUT1, 8))
return FALSE;
// for (temp = 0; temp < 64; ++temp)
// {
// if (!TestOTGCtrlOutTransaction(&gVendorRequestOut1[temp * 64], 64, 0))
// return FALSE;
if (!TestOTGCtrlOutTransaction(&gBugArray[0], 64, 0))
return FALSE;
// }
if (!TestOTGCtrlInTransaction(0, 0, 1))
return FALSE;
/* vendor request out2 for wifi */
if (!TestOTGCtrlSetupTransaction(VendorRequestOUT2, 8))
return FALSE;
for (temp = 0; temp < 16; ++temp)
{
if (!TestOTGCtrlOutTransaction(&gVendorRequestOut2[temp * 64], 64, 0))
return FALSE;
}
if (!TestOTGCtrlInTransaction(0, 0, 1))
return FALSE;
/* vendor request in for wifi */
if (!TestOTGCtrlSetupTransaction(VendorRequestIN, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[2], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
#if !TEST_INTERRUPT_XFER_EN
/* get string descriptor long ID */
if (!TestOTGCtrlSetupTransaction(GetStrDescriptorLongID, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[3], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
/* get string descriptor serial number */
if (!TestOTGCtrlSetupTransaction(GetStrDescriptorSerialNum, 8))
return FALSE;
if (!TestOTGCtrlInTransaction(val[4], &length, 0))
return FALSE;
if (!TestOTGCtrlOutTransaction(0, 0, 1))
return FALSE;
/* get string descriptor product */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -