когда хост требует от меня отправить дескриптор конфигурации во второй раз (первый раз он просил только дескриптор конфигурации размером 9 байт) то я ему отправляю вот такую вот структурку
Код
//---структура конфигурации-----------------------------------------------------
const struct
{
//---Структура дескриптора конфигурации------------------------------------
struct
{
unsigned char bLength; //длина дескриптора
unsigned char bDescriptorType; //тип дескриптора
unsigned short int wTotalLength; //общий обьем данных, возвращаемых для данной конфигурации
unsigned char bNumInterfaces; //кол-во интерфейсов поддерживаемых данной конфигурацией
unsigned char bConfigirationValue; //идентификатор конфигурации
unsigned char iConfiguration; //индекс дескриптора стороки
unsigned char bmAttributes; //характеристики конфигурации
unsigned char MaxPower; //код мощности, потребляемый устройством
} USB_CONFIGURATION_DESCRIPTOR;
//---Структура дескриптора интерфейса--------------------------------------
struct
{
unsigned char bLength; //Длина дескриптора
unsigned char bDescriptorType; //Тип дескриптора
unsigned char bInterfaceNumber; //Номер данного интерфейса
unsigned char bAlternateSetting; //Альтернативный номер интерфейса
unsigned char bNumEndpoints; //Число конечных точек для интерфейса без 0
unsigned char bInterfaceClass; //Код класса интерфейса
unsigned char bInterfaceSubClass; //Код подкласса интерфейса
unsigned char bInterfaceProtocol; //Код протокола
unsigned char iInterface; //Индекс дескриптора строки
} USB_INTERFACE_DESCRIPTOR;
} CONFIGURATION = {{0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA},{0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00}};
const struct
{
//---Структура дескриптора конфигурации------------------------------------
struct
{
unsigned char bLength; //длина дескриптора
unsigned char bDescriptorType; //тип дескриптора
unsigned short int wTotalLength; //общий обьем данных, возвращаемых для данной конфигурации
unsigned char bNumInterfaces; //кол-во интерфейсов поддерживаемых данной конфигурацией
unsigned char bConfigirationValue; //идентификатор конфигурации
unsigned char iConfiguration; //индекс дескриптора стороки
unsigned char bmAttributes; //характеристики конфигурации
unsigned char MaxPower; //код мощности, потребляемый устройством
} USB_CONFIGURATION_DESCRIPTOR;
//---Структура дескриптора интерфейса--------------------------------------
struct
{
unsigned char bLength; //Длина дескриптора
unsigned char bDescriptorType; //Тип дескриптора
unsigned char bInterfaceNumber; //Номер данного интерфейса
unsigned char bAlternateSetting; //Альтернативный номер интерфейса
unsigned char bNumEndpoints; //Число конечных точек для интерфейса без 0
unsigned char bInterfaceClass; //Код класса интерфейса
unsigned char bInterfaceSubClass; //Код подкласса интерфейса
unsigned char bInterfaceProtocol; //Код протокола
unsigned char iInterface; //Индекс дескриптора строки
} USB_INTERFACE_DESCRIPTOR;
} CONFIGURATION = {{0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA},{0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00}};
компилятор между вложенными структурами вставляет никому не нужные нули... в результате хост меня шлет куда подальше...
когда без вложенных структур
Код
//---структура конфигурации-----------------------------------------------------
const struct
{
unsigned char bLength; //длина дескриптора
unsigned char bDescriptorType; //тип дескриптора
unsigned short int wTotalLength; //общий обьем данных, возвращаемых для данной конфигурации
unsigned char bNumInterfaces; //кол-во интерфейсов поддерживаемых данной конфигурацией
unsigned char bConfigirationValue; //идентификатор конфигурации
unsigned char iConfiguration; //индекс дескриптора стороки
unsigned char bmAttributes; //характеристики конфигурации
unsigned char MaxPower; //код мощности, потребляемый устройством
unsigned char bLength1; //Длина дескриптора
unsigned char bDescriptorType1; //Тип дескриптора
unsigned char bInterfaceNumber; //Номер данного интерфейса
unsigned char bAlternateSetting; //Альтернативный номер интерфейса
unsigned char bNumEndpoints; //Число конечных точек для интерфейса без 0
unsigned char bInterfaceClass; //Код класса интерфейса
unsigned char bInterfaceSubClass; //Код подкласса интерфейса
unsigned char bInterfaceProtocol; //Код протокола
unsigned char iInterface; //Индекс дескриптора строки
} CONFIGURATION = {0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA, 0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00};
const struct
{
unsigned char bLength; //длина дескриптора
unsigned char bDescriptorType; //тип дескриптора
unsigned short int wTotalLength; //общий обьем данных, возвращаемых для данной конфигурации
unsigned char bNumInterfaces; //кол-во интерфейсов поддерживаемых данной конфигурацией
unsigned char bConfigirationValue; //идентификатор конфигурации
unsigned char iConfiguration; //индекс дескриптора стороки
unsigned char bmAttributes; //характеристики конфигурации
unsigned char MaxPower; //код мощности, потребляемый устройством
unsigned char bLength1; //Длина дескриптора
unsigned char bDescriptorType1; //Тип дескриптора
unsigned char bInterfaceNumber; //Номер данного интерфейса
unsigned char bAlternateSetting; //Альтернативный номер интерфейса
unsigned char bNumEndpoints; //Число конечных точек для интерфейса без 0
unsigned char bInterfaceClass; //Код класса интерфейса
unsigned char bInterfaceSubClass; //Код подкласса интерфейса
unsigned char bInterfaceProtocol; //Код протокола
unsigned char iInterface; //Индекс дескриптора строки
} CONFIGURATION = {0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA, 0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00};
на компе всплывает сообщение мол обнаружено USB Device чего собственно я и добивался

кто может посоветовать как разрешить данную ситуацию более рационально?