Посоветуйте в одном нелегком деле...
Суть вот в чем
при компиляции структуры
Код
//---структура конфигурации-----------------------------------------------------
static const struct
{
//---Структура дескриптора конфигурации------------------------------------
static const struct USB_CONFIGURATION_DESCRIPTOR
{
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;
//---Структура дескриптора интерфейса--------------------------------------
static const struct USB_INTERFACE_DESCRIPTOR
{
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}};
static const struct
{
//---Структура дескриптора конфигурации------------------------------------
static const struct USB_CONFIGURATION_DESCRIPTOR
{
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;
//---Структура дескриптора интерфейса--------------------------------------
static const struct USB_INTERFACE_DESCRIPTOR
{
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}};
компилятор между вложенными структурами вставляет нулевой байт! То есть между вроде бы 0хFA и 0х09 ничего не должно быть а однако там присутствует байт 0х00, который напроч портит всю картину!
Это есть структура конфигурации юсб устройства мне лишь требовалось чтобы винда корректно общалась с устройством на базе AT91SAM7A3 и выдало сообщение мол обнаружен юсб девайс...
а при таком косяке винда меня посылает...
Но... если же структуру немного преобразовать в вид
Код
//---структура конфигурации-----------------------------------------------------
static 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};
static 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};
то все отлично нулей лишних нет и винда пишет мол найдено юсб устройство и просит установить драйвера :-)
Вот посоветуйте пожалуйста как быть в этой ситуации, как более рационально все это дело упаковать? Заранее спасибо)