Vitaliy S. 0 22 января, 2009 Опубликовано 22 января, 2009 · Жалоба Как сделать так чтобы одно физ.устройство было видно виндой в виде двух, к примеру как HID устройство и mass-storage, я пытаюсь сделать в прошивке устройства два интерфейса один типа класс mass-staorage, другое класс HID. Получится ли такое? Т.е теоретически предполагается что винда подключит к моему устройству два драйвера - Custom HID и mass-storage. Вообщем работает ли Винда с одним физустройством но с разными его интерфейсами??? Вроде каждый отдельный драйвер дейвацса сам должен считывать дескрипторы интерфейса и смотря их структуру с ним работать, и другому драйверу не свой интерфейс он не отдаст?! Вообщем если кто-то что-то понял прошу ответить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба Как сделать так чтобы одно физ.устройство было видно виндой в виде двух, к примеру как HID устройство и mass-storage, я пытаюсь сделать в прошивке устройства два интерфейса один типа класс mass-staorage, другое класс HID. Получится ли такое? Т.е теоретически предполагается что винда подключит к моему устройству два драйвера - Custom HID и mass-storage. Вообщем работает ли Винда с одним физустройством но с разными его интерфейсами??? Вроде каждый отдельный драйвер дейвацса сам должен считывать дескрипторы интерфейса и смотря их структуру с ним работать, и другому драйверу не свой интерфейс он не отдаст?! Вообщем если кто-то что-то понял прошу ответить? Это будет составное (композитное) устройство. Это стандартно. Я такое сделал http://antel.info/ Почитайте описание, м.б. станет понятнее.. Как сделать так чтобы одно физ.устройство было видно виндой в виде двух, к примеру как HID устройство и mass-storage, я пытаюсь сделать в прошивке устройства два интерфейса один типа класс mass-staorage, другое класс HID. Получится ли такое? Т.е теоретически предполагается что винда подключит к моему устройству два драйвера - Custom HID и mass-storage. Вообщем работает ли Винда с одним физустройством но с разными его интерфейсами??? Вроде каждый отдельный драйвер дейвацса сам должен считывать дескрипторы интерфейса и смотря их структуру с ним работать, и другому драйверу не свой интерфейс он не отдаст?! Вообщем если кто-то что-то понял прошу ответить? Это будет составное (композитное) устройство. Это стандартно. Я такое сделал http://antel.info/ Почитайте описание, м.б. станет понятнее.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 23 января, 2009 Опубликовано 23 января, 2009 · Жалоба Вообщем работает ли Винда с одним физустройством но с разными его интерфейсами??? Да, может. Описание здесь http://msdn.microsoft.com/en-us/library/ms793564.aspx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arizona 0 26 января, 2009 Опубликовано 26 января, 2009 · Жалоба Пример составного устройства с коменариями на русском есть тут: http://www.microchip.com.ru/1010/Support/USB%20apps.html В последнем USB стеке от микрочип есть готовый для вас пример составного устройства HID + MSD www.microchip.com/usb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remix 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 (изменено) · Жалоба Сорри за небольшой оффтоп (модератор, пни, плз, если неправ, в нужный топик - я не нашел более подходящего), но здесь приведены копозиты из стандарных классов. А у меня немного другая проблема: хочу композит CDC+Generic, причем для Generic надо писать драйвер. Устройство бвло простым - драйвер работал, успешно получая дескриптор конфигурации, парсил его и перечислял конечные точки. А когда я пытаюсь поставить тот же драйвер для части составного устройства, драйвер затыкается на получении дескриптора конфигурации с ошибкой STATUS_DEVICE_NOT_READY ((NTSTATUS)0xC00000A3). Мысли идут по двум путям: 1. обойтись без дескриптора конфигурации, но тогда как перечислить конечные точки интерфейса? 2. Получить парента (сам композитный девайс) (как?), и как тогда определить, к какому MI меня подключили? При этом CDC драйсер ставиться нормально. Драйвер слизал из скелета Агурова. В программировании на нулевом кольце почти новичок, заранее спсб за любую подсказку UsbBuildGetDescriptorRequest( urb, (USHORT) sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_CONFIGURATION_DESCRIPTOR_TYPE, 0, 0, configurationDescriptor, NULL, sizeof(USB_CONFIGURATION_DESCRIPTOR), NULL); ntStatus = DoCallUSBD(DeviceObject, urb, FALSE, NULL); // <===== вот тут возврат "NOT READY" Изменено 11 февраля, 2009 пользователем Remix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба А что это за функция DoCallUSBD? Если новичок в драйверописательстве - в топку все книжки типа Агурова (единственная достойная - Programming the Microsoft Windows Driver Model от Walter Oney), скачайте WDK и пишите в KMDF, а возможно достаточно будет готового WinUSB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remix 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба DoCallUSBD - по мотивам того же Агурова - функция передает запрос нижнему драйверу и по KeWaitForSingleObject ждет результата. ПРиводить ее код, думаю, нет необходимости - все прозрачно. Покурил MSDN - как то там все отрывисто и не совсем понятно. Драйвер композитного устройства создает PDO для каждой функции устройства. то есть, как я понимаю, у этих устройств должно быть можно прочесть и дескрипторы... или я окончательно запутался? и как эти дескрипторы должны выглядеть? или надо делать запрос к драйверу композитного устройства? Пните, плиз, хотя бы куда смотреть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 (изменено) · Жалоба DoCallUSBD - по мотивам того же Агурова - функция передает запрос нижнему драйверу и по KeWaitForSingleObject ждет результата. ПРиводить ее код, думаю, нет необходимости - все прозрачно. Покурил MSDN - как то там все отрывисто и не совсем понятно. Драйвер композитного устройства создает PDO для каждой функции устройства. то есть, как я понимаю, у этих устройств должно быть можно прочесть и дескрипторы... или я окончательно запутался? и как эти дескрипторы должны выглядеть? или надо делать запрос к драйверу композитного устройства? Пните, плиз, хотя бы куда смотреть... Нижний драйвер и есть драйвер композитного устройства и с точки зрения вашего драйвера устройства ему все равно, какой драйвер является нижним, разницы в запросах дескрипторов нет, просто драйвер композитного устройства сформирует дескриптор на основе прочитанного из самого устройства. Поэтому и спросил про функцию. При использовании драйвера для устройства в составе композита может быть типичная ошибка (кстати wizard от DriverStudio грешит этим) - просмотрите код и обратите внимание на номер используемого интерфейса, если интерфейсы СDC первые, то ваш должен быть 2. Да, если у CDC два интерфейса, то должен быть прописан IAD. PS. Драйвер композита хитрая штука, например, запрос SetConfiguration от вашего драйвера до устройства не дойдет. Запрос SetConfiguration в устройство направляет драйвер композита. Изменено 11 февраля, 2009 пользователем Седой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remix 0 12 февраля, 2009 Опубликовано 12 февраля, 2009 (изменено) · Жалоба Нижний драйвер и есть драйвер композитного устройства и с точки зрения вашего драйвера устройства ему все равно, какой драйвер является нижним, разницы в запросах дескрипторов нет, просто драйвер композитного устройства сформирует дескриптор на основе прочитанного из самого устройства. .......................... Да, если у CDC два интерфейса, то должен быть прописан IAD. PS. Драйвер композита хитрая штука, например, запрос SetConfiguration от вашего драйвера до устройства не дойдет. Запрос SetConfiguration в устройство направляет драйвер композита. спасибо. начинаю прояснять себе суть работы драйвера композита. ИАД прописан, но когда открываю свой девайс USBIO, пишет вот это: Device0 successfully opened. Get current device parameters was successful. GetDeviceInfo failed. видимо, я не туда полез - надо угадывать, почему девайс не отдает инфу, и главное - какую? ДевайсДескриптор отдает, Конфиг дескриптор - ниже по тексту - мож, я там где ошибся? а до SetConfiguration дело не доходит - все падает гораздо раньше... Configuration Descriptor: bLength : 09 bDescriptorType : 0x02 wTotalLength : 0106 bNumInterfaces : 03 bConfigurationValue: 01 iConfiguration : 00 bmAttributes : 0xC0 MaxPower : 0a Interface Association Descriptor: bLength : 08 bDescriptorType : 0x0B bFirstInterface : 00 bInterfaceCount : 01 bFunctionClass : 0xFF bFunctionSubClass : 0xFF bFunctionProtocol : 0x00 iFunction : 02 Interface Association Descriptor: bLength : 08 bDescriptorType : 0x0B bFirstInterface : 01 bInterfaceCount : 02 bFunctionClass : 0x02 bFunctionSubClass : 0x00 bFunctionProtocol : 0x00 iFunction : 04 Interface Descriptor: bLength : 09 bDescriptorType : 0x04 bInterfaceNumber : 00 bAlternateSetting : 00 bNumEndpoints : 02 bInterfaceClass : 0xFF USB_DEVICE_CLASS_VENDOR_SPECIFIC bInterfaceSubClass : 0xFF bInterfaceProtocol : 0xFF iInterface : 01 Endpoint Descriptor: ...удалил для краткости... Endpoint Descriptor: ...удалил для краткости... Interface Descriptor: bLength : 09 bDescriptorType : 0x04 bInterfaceNumber : 01 bAlternateSetting : 00 bNumEndpoints : 01 bInterfaceClass : 0x02 USB_DEVICE_CLASS_COMMUNICATIONS bInterfaceSubClass : 0x02 bInterfaceProtocol : 0x01 iInterface : 04 CDC CS Interface Descriptor: Subtype: CDC Header Functional Descriptor bLength : 0x05 bDescriptorType : 0x24 bDescriptorSubType : 0x00 CDC_FDST_HEADER bcdCDC : 0x0110 CDC CS Interface Descriptor: Subtype: CDC Abstract Control Management Functional Descriptor bLength : 0x04 bDescriptorType : 0x24 bDescriptorSubType : 0x02 CDC_FDST_ABSTRACT_CONTROL_MANAGEMENT bmCapabilities : 0x02 CDC CS Interface Descriptor: Subtype: CDC Union Functional Descriptor bLength : 0x05 bDescriptorType : 0x24 bDescriptorSubType : 0x06 CDC_FDST_UNION bMasterIf : 0x01 bSlaveIf[0] : 0x02 CDC CS Interface Descriptor: Subtype: CDC Call Management Functional Descriptor bLength : 0x05 bDescriptorType : 0x24 bDescriptorSubType : 0x01 CDC_FDST_CALL_MANAGEMENT bmCapabilities : 0x00 bDataInterface : 0x02 Endpoint Descriptor: ...удалил для краткости... Interface Descriptor: bLength : 09 bDescriptorType : 0x04 bInterfaceNumber : 02 bAlternateSetting : 00 bNumEndpoints : 02 bInterfaceClass : 0x0A USB_DEVICE_CLASS_DATA bInterfaceSubClass : 0x00 bInterfaceProtocol : 0x00 iInterface : 04 Endpoint Descriptor: ...удалил для краткости... Endpoint Descriptor: ...удалил для краткости... Изменено 12 февраля, 2009 пользователем Remix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 12 февраля, 2009 Опубликовано 12 февраля, 2009 · Жалоба IAD должен быть один на 2 интерфейса СDC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remix 0 8 марта, 2009 Опубликовано 8 марта, 2009 · Жалоба IAD должен быть один на 2 интерфейса СDC. сделал, все равно не может получить дескриптор конфигурации. в связи с чем вопрос: а я вообще имею право работать с PhysicalDeviceObject в драйвере функции составного устройства? или за пределы FunctionDO мне выходить не велено? сорри, что долго молчал - проклятый грипп... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DiMonstr 0 19 марта, 2009 Опубликовано 19 марта, 2009 · Жалоба А кто-нибудь разрабатывал USB устройство класса CDC Ethernet Emulation Model? Т.е. это будет USB сетевой адаптер. Нужен совет специалиста, знающего работу с этим классом. Как это будет выглядеть в Windows, т.е. настройка сетевых параметров? Корректно ли работает стандартный драйвер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 9 ноября, 2009 Опубликовано 9 ноября, 2009 · Жалоба Простите за офтоп. Не понял куда обратится, поэтому подниму более менее подходящую тему. Есть композитное устройство на базе at9: Mass Storage + Generic(свой драйвер написан). Как корректно заблокировать mass storage внутри устройства до появления сигнала на другом интерфейсе? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Седой 0 9 ноября, 2009 Опубликовано 9 ноября, 2009 · Жалоба ... Как корректно заблокировать mass storage внутри устройства до появления сигнала на другом интерфейсе? Спасибо! Что вы понимаете под термином "заблокировать"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korbian 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба Что вы понимаете под термином "заблокировать"? "Заблокировать" появление диска в системе до определенного момента(события на втором интерфейсе). Сейчас всегда возвращаю ошибку из "железа" на SCSI-комманды чтения и записи от хоста, диск в системе присутствует, но операции чтения\записи для него не проходят. Возможно есть более элегантное решение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться