Пт апр 21, 2023 20:54:21
Пт апр 21, 2023 22:05:41
Вс апр 23, 2023 19:25:08
Int_USBRST
Int_SUSPEND
Int_WKUP
Int_USBRST
GET_Device_Descriptor 64 bytes
Int_USBRST
SET_ADDRESS 24
GET_Device_Descriptor 18 bytes
GET_Configuration_Descriptor 255 bytes
GET_String_Descriptor 0x3 255 bytes
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x2 255 bytes
GET_Device_Qualifier_Descriptor 10 bytes
GET_Device_Descriptor 18 bytes
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x3 255 bytes
GET_String_Descriptor 0x1 255 bytes
GET_String_Descriptor 0x2 255 bytes
GET_Device_Descriptor 18 bytes
GET_Configuration_Descriptor 9 bytes
GET_Configuration_Descriptor 67 bytes
GET_Configuration_Descriptor 265 bytes
SET_CONFIGURATION 1
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
SET_LINE_CODING
SET_LINE_CODING DATA 0 0 0 0
GET_LINE_CODING
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x1 255 bytes
GET_String_Descriptor 0x2 255 bytes
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_LINE_CODING
SET_LINE_CODING DATA 256000 0 0 8
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_LINE_CODING
SET_LINE_CODING DATA 2000000 0 0 8
GET_LINE_CODING
SET_CONTROL_LINE_STATE 1
SET_LINE_CODING
SET_LINE_CODING DATA 2000000 0 1 8
GET_LINE_CODING
Вс апр 23, 2023 23:11:06
void Enumerate_Setup()
{
uint32_t reply_len=0;
uint8_t *pbuf=NULL;
TPort::ReadEP(0,(uint8_t *)&uSetReq,8);
switch(uSetReq.wRequest)
{
case STD_REQUEST::GET_DESCRIPTOR: //Запрос дескриптора
switch(uSetReq.descType)
{
case DescriptorType::DEVICE: //Запрос дескриптора устройства
DEBUG_Print("GET_Device_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(Device_Descriptor);
pbuf = (uint8_t *)&Device_Descriptor;
break;
case DescriptorType::CONFIGURATION: //Запрос дескриптора конфигурации
DEBUG_Print("GET_Configuration_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(Configuration_Descriptor);
pbuf = (uint8_t *)&Configuration_Descriptor;
break;
case DescriptorType::DEVICE_QUALIFIER: //Запрос дескриптора device_qualifier
DEBUG_Print("GET_Device_Qualifier_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(Device_Qualifier_Descriptor);
pbuf = (uint8_t *)&Device_Qualifier_Descriptor;
break;
case DescriptorType::STRING: //Запрос строкового дескриптора
for(auto& it : descr_table) // Проходимся по таблице адресов дескрипторов (оптимизатор развернёт цикл)
if(*it == uSetReq.descIndex) // По полю bIndex смотрим на совпадение
{
pbuf = (uint8_t *)it+1; // Адрес для отправки указывает на поле bLength
reply_len = *pbuf; // Длина для отправки берётся из поля bLength
DEBUG_Print("GET_String_Descriptor 0x%X %d bytes\r\n", uSetReq.descIndex, uSetReq.wLength);
break;
}
if(pbuf==NULL) DEBUG_Print("GET_String_Descriptor 0x%X not supported\r\n",uSetReq.descIndex);
break;
default:
DEBUG_Print("GET_Descriptor 0x%X not supported\r\n",uSetReq.wValue);
return;
}
break;
case STD_REQUEST::SET_ADDRESS: // Установка адреса устройства
DEBUG_Print("SET_ADDRESS %d\r\n", uSetReq.wValue);
TPort::SetAdr(uSetReq.wValue); // reply_len = 0 -> ZLP
break;
case STD_REQUEST::SET_CONFIGURATION: // Установка конфигурации устройства
DEBUG_Print("SET_CONFIGURATION %d\r\n", uSetReq.wValue);
CurrentConfiguration = uSetReq.wValue;
break; // reply_len=0 -> ZLP
case STD_REQUEST::GET_CONFIGURATION:
DEBUG_Print("GET_CONFIGURATION:\r\n");
reply_len = 1;
pbuf = (uint8_t *)&CurrentConfiguration;
break;
case STD_REQUEST::GET_DEVICE_STATUS:
[[fallthrough]];
case STD_REQUEST::GET_INTERFACE_STATUS:
[[fallthrough]];
case STD_REQUEST::GET_ENDPOINT_STATUS:
DEBUG_Print("GET_STATUS\r\n");
reply_len = sizeof(get_status_reply);
pbuf = (uint8_t *)get_status_reply;
break;
case STD_REQUEST::CLEAR_DEVICE_FEATURE:
[[fallthrough]];
case STD_REQUEST::CLEAR_INTERFACE_FEATURE:
[[fallthrough]];
case STD_REQUEST::CLEAR_ENDPOINT_FEATURE:
DEBUG_Print("CLEAR_FEATURE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_DEVICE_FEATURE:
[[fallthrough]];
case STD_REQUEST::SET_INTERFACE_FEATURE:
[[fallthrough]];
case STD_REQUEST::SET_ENDPOINT_FEATURE:
DEBUG_Print("SET_FEATURE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_INTERFACE:
DEBUG_Print("SET_INTERFACE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_DESCRIPTOR:
DEBUG_Print("SET_DESCRIPTOR\r\n");
// надо бы STALL, но для простоты просто ZLP
break;
case STD_REQUEST::SYNCH_FRAME:
DEBUG_Print("SYNCH_FRAME\r\n");
// для простых устройств забьём
break;
default:
if(!ClassSpecificSetup((USB_SETUP_REQ *)&uSetReq, &reply_len, &pbuf)) return;
break;
}
TPort::template WriteEP<0>(pbuf, std::min((uint16_t)reply_len, (uint16_t)uSetReq.wLength));
}
Вт апр 25, 2023 22:45:34
Int_USBRST
Int_SUSPEND
Int_WKUP
Int_USBRST
GET_Device_Descriptor 64 bytes
Int_USBRST
SET_ADDRESS 24
GET_Device_Descriptor 18 bytes
GET_Configuration_Descriptor 255 bytes
GET_String_Descriptor 0x3 255 bytes
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x2 255 bytes
GET_Device_Qualifier_Descriptor 10 bytes
GET_Device_Descriptor 18 bytes
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x3 255 bytes
GET_String_Descriptor 0x1 255 bytes
GET_String_Descriptor 0x2 255 bytes
GET_Device_Descriptor 18 bytes
GET_Configuration_Descriptor 9 bytes
GET_Configuration_Descriptor 67 bytes
GET_Configuration_Descriptor 265 bytes
SET_CONFIGURATION 1
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
SET_LINE_CODING
SET_LINE_CODING DATA 0 0 0 0
GET_LINE_CODING
GET_String_Descriptor 0x0 255 bytes
GET_String_Descriptor 0x1 255 bytes
GET_String_Descriptor 0x2 255 bytes
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_LINE_CODING
SET_LINE_CODING DATA 256000 0 0 8
GET_LINE_CODING
SET_CONTROL_LINE_STATE 0
SET_CONTROL_LINE_STATE 0
GET_LINE_CODING
SET_LINE_CODING
SET_LINE_CODING DATA 2000000 0 0 8
GET_LINE_CODING
SET_CONTROL_LINE_STATE 1
SET_LINE_CODING
SET_LINE_CODING DATA 2000000 0 1 8
GET_LINE_CODING
Ср апр 26, 2023 06:39:42
Ср апр 26, 2023 09:48:42
Ср апр 26, 2023 18:28:36
Ср апр 26, 2023 21:54:23
Чт сен 14, 2023 18:45:36
Пт сен 15, 2023 17:52:44
Вс сен 17, 2023 18:37:33
Пн сен 18, 2023 12:19:15
danone78 писал(а):Потом хост (в моем случае wiindows10) шлет set_address, с этим я еще не разобрался, но на следующий такой-же запрос дескриптора (01000680) уже можно отправить 32 байта и обратно ничего лишнего не прилетает.
Вт сен 19, 2023 07:13:50
Вт сен 19, 2023 19:38:32
danone78 писал(а):Потом хост (в моем случае wiindows10) шлет set_address, с этим я еще не разобрался, но на следующий такой-же запрос дескриптора (01000680) уже можно отправить 32 байта и обратно ничего лишнего не прилетает.
Вт сен 19, 2023 21:25:13
Ср сен 20, 2023 04:34:49
Вс окт 01, 2023 07:19:13
Вс окт 01, 2023 08:18:10
Вс окт 01, 2023 09:00:38