Сделайте я должен записать моей собственной стороне хоста драйвер USB для устройства CDC

Условное Присвоение

x = 3 if (y == 1) else 2

Это делает точно, на что это походит: "присвойтесь 3 к x, если y равняется 1, иначе присвойтесь 2 к x". Обратите внимание, что parens не необходимы, но мне нравятся они за удобочитаемость. Можно также объединить его в цепочку, если у Вас есть что-то более сложное:

x = 3 if (y == 1) else 2 if (y == -1) else 1

, Хотя в определенный момент, это немного заходит слишком далеко.

Примечание, которое... еще можно использовать если в любом выражении. Например:

(func1 if y == 1 else func2)(arg1, arg2) 

Здесь func1 назовут, если y будет равняться 1 и func2, иначе. В обоих случаях соответствующая функция будет вызвана с аргументами arg1 и arg2.

Аналогично, следующее также допустимо:

x = (class1 if y == 1 else class2)(arg1, arg2)

, где class1 и class2 являются двумя классами.

10
задан uɐɪ 24 July 2009 в 10:54
поделиться

4 ответа

Вам необходимо написать файл .inf для Windows, который связывает VID и PID вашего устройства с системным usbser.sys. Мой выглядит так (при необходимости замените YourCompany, введите свои VID и PID (в шестнадцатеричном формате) и измените строку DriverVer на любую дату и версию, которые вам нужны):

; -----------------------------------------------------------------------------
; XP/2000 USB Comms Port Setup
; -----------------------------------------------------------------------------

[Version] 
DriverVer=12/03/2008,1.0.0000.0000
Signature="$Windows NT$"
Class=Ports 
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} 
Provider=%YourCompany% 

[DestinationDirs]
DefaultDestDir=10,system32\drivers
DriverCopyFiles=12

[ControlFlags]
ExcludeFromSelect = *

[Manufacturer] 
%YourCOmpany%=YourCompanySerialPort 

[YourCompanySerialPort] 
%YourCompanyUSBSerialPort%=YOURCOMPANYUSB,USB\VID_1234&PID_ABCD

; 
; Win 2000/XP
;
[YOURCOMPANYUSB]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection

[YOURCOMPANYUSB.HW] 
AddReg=YOURCOMPANYUSBAddReg.HW 

[YOURCOMPANYUSBAddReg.HW] 
HKR,,DevLoader,0,*ntkern 
HKR,,NTMPDriver,,"usbser.sys" 

[YOURCOMPANYUSB.Services] 
AddService=usbser, 0x00000002, FuncDrv_Service_Inst 

[FuncDrv_Service_Inst] 
DisplayName=%USBFilterString% 
ServiceType= 1 
StartType = 3 
ErrorControl = 0 
ServiceBinary = %12%\usbser.sys 

[Strings] 
YourCompany="YourCompany" 
YourCompanySerialPort="Your Company USB Serial Port" 
USBFilterString = "USB Serial Service"

Обратите внимание, что это работает только с 32-битными ОС. Он также работает с Vista, хотя заголовок файла этого не говорит!

Имейте в виду, что некоторые версии usbser.sys имеют серьезные проблемы, в том числе синее экранирование, например, при передаче пакетов, кратных 64 байтам. Если вы используете XP SP2 или более раннюю версию, установите исправление KB943198. XP SP3 и Vista подходят.

Для Mac вам просто нужно правильно сообщить класс вашего устройства, и сканирование драйверов подберет правильные драйверы. (Windows игнорирует класс устройства, поэтому вам необходимо предоставить файл .inf).

РЕДАКТИРОВАТЬ: Извините, я должен был быть яснее. Это не обойдется без перечисления, если он не сможет получить полную нагрузку - я не уверен, что это возможно.

6
ответ дан 4 December 2019 в 01:31
поделиться

If your device reports a device ID that the host OS already supports, then they won't need a driver.

You may need to impersonate an existing USB uart. Data sheets are readily available. (But I figure you already knew that.)

I'm not sure that the host OS will honour your multi-configuration idea.

But give it a punt so we all know!

1
ответ дан 4 December 2019 в 01:31
поделиться

Я не уверен насчет вопроса питания, но есть хорошие драйверы CDC (или я думаю, что они есть), так что вы можете их использовать. Что касается вопроса о питании, решение со многими конфигурациями, вероятно, хорошее, я никогда не сталкивался с этим в работе (у меня есть USB-анализатор), но иногда дома, когда у меня есть 3 или более разных устройств, требующих питания от USB, я получал неудачное перечисление. Я полагаю, что это выбор операционной системы, если она не может подавать питание на новое устройство, она отключает его (разумный выбор, поскольку он не может питать его). Это мои догадки, скорее, проверка стандарта USB.

1
ответ дан 4 December 2019 в 01:31
поделиться

Вы правильно ответили на вопрос о драйвере. Когда устройство подключено и проходит процесс перечисления, требуется, чтобы он оставался <100 мА. Хост опросит и определит конфигурацию (ы). Если имеется несколько устройств, поддерживающих разные уровни мощности, драйверу необходимо выбрать подходящую конфигурацию. Если есть только высокомощный и он недоступен, он не будет перечислять устройство. В общем, стандартный драйвер, выполняющий CDC, не будет знать о различных возможных конфигурациях на уровне устройства, поэтому для их обработки потребуется некоторая степень настройки.

1
ответ дан 4 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: