|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
Свой драйвер COM порта для USB устройства19.12.2016, 19:22. Показов 26364. Ответов 128
Метки нет (Все метки)
Всем здрасте...
Хотелось бы услышать мнения профессионалов. В частности Убежденного видел много сообщений от него..Итак. Есть устройство usb, в данный момент используется виндовый usbser, но говорят работает плохо. Мне поставили задачу(я на первом своём испытательном сроке) написать драйвер для данного устройства. Драйвер должен эмулировать COM порт(основной приоритет), а также возможно как сетевое устройство или сырой обмен, можно все вместе. Знания драйверов у меня на уровне хелловорлд. Английский очень плохо. Читаю Уолтер Они, Комиссарова, Агуров, USB in Nutshell. Вопрос первый - реально ли с моими знаниями хорошо сделать это за 2 месяца? Вопрос второй - направьте меня на путь истинный)) дельные советы дайте
0
|
|
| 19.12.2016, 19:22 | |
|
Ответы с готовыми решениями:
128
Возможно ли создать драйвер для usb-устройства на шарпе? Драйвер USB устройства |
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|||
| 09.02.2017, 10:59 | |||
|
Добавлено через 1 минуту Вроде есть открытая спецификация на cdc устройства. Если совсем у тебя тяжко будет, то может как-нибудь гляну.
0
|
|||
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 15.02.2017, 19:44 [ТС] | |
|
Ну да спецификацию CDC я почти сразу скачал с usb.org только с английским туго. Не могу в ней найти о том где про com порт написано. Если бы кто то название раздела сказал который именно надо читать
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|||
| 17.02.2017, 15:45 [ТС] | |||
|
Вопрос к знатокам стэка драйверов USB в Windows NT и к остальным!!!
1. КАК ДРАЙВЕР USB УЗНАЁТ О ТОМ ЧТО В УСТРОЙСТВЕ ЕСТЬ ДАННЫЕ ДЛЯ СЧИТЫВАНИЯ ? Что бы выяснить я обложил usbser.sys (стандартный виртуальный com порт для usb от Microsoft) верхним и нижним фильтрами. Вот лог от них: Кликните здесь для просмотра всего текста
Lower FILTER - DriverEntry: DriverObject 85C384A0
Upper FILTER - DriverEntry: DriverObject 85E0A040 Lower FILTER - Entering AddDevice: DriverObject 85C384A0, pdo 85C3DC40 Upper FILTER - Entering AddDevice: DriverObject 85E0A040, pdo 85C3DC40 Upper FILTER - IRP_MJ_PNP (IRP_MN_?????) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_RESOURCE_REQUIREMENTS) Upper FILTER - IRP_MJ_PNP (IRP_MN_FILTER_RESOURCE_REQUIREMENTS) Upper FILTER - IRP_MJ_PNP (IRP_MN_START_DEVICE) Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE Upper FILTER - IRP_MJ_SYSTEM_CONTROL Upper FILTER - IRP_MJ_SYSTEM_CONTROL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_SELECT_CONFIGURATION Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_CLASS_INTERFACE UrbControlVendorClassRequest.TransferFla gs USBD_TRANSFER_DIRECTION_IN UrbControlVendorClassRequest.TransferBuf ferLength 7 UrbControlVendorClassRequest.TransferBuf fer != NULL 30 4B FC UrbControlVendorClassRequest.Request 21 UrbControlVendorClassRequest.Value 0 UrbControlVendorClassRequest.Index 0 Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_CLASS_INTERFACE UrbControlVendorClassRequest.TransferBuf ferLength 0 UrbControlVendorClassRequest.Request 22 UrbControlVendorClassRequest.Value 0 UrbControlVendorClassRequest.Index 0 Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL /// <<--------------------------------------- Конечная точка bulk для записи в устройство URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL /// <<--------------------------------------- Конечная точка interrupt URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85D9DF84 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength A UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_CAPABILITIES) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_PNP_DEVICE_STATE) Upper FILTER - IRP_MJ_PNP (IRP_MN_?????) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_TEXT) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_ID) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_INTERFACE) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_INTERFACE) Upper FILTER - IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS) Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Lower FILTER - IRP_MJ_INTERNAL_DEVICE_CONTROL URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer.PipeHandleth 85E1B874 UrbBulkOrInterruptTransfer.TransferFlags USBD_TRANSFER_DIRECTION_IN UrbBulkOrInterruptTransfer.TransferFlags USBD_SHORT_TRANSFER_OK UrbBulkOrInterruptTransfer.TransferBuffe rLength 1000 UrbBulkOrInterruptTransfer.TransferBuffe r != NULL Итак, я подключаю устройство и происходит загрузка драйвера. Сначала идут стандартные запросы получения дескрипторов, выбора конфигурации и некоторые настройки. И ПОТОМ 2 ЗАПРОСА НА ЧТЕНИЕ И К ПРЕРЫВАЮЩЕЙ ТОЧКЕ ИЗ УСТРОЙСТВА(помечены стрелками), так он определяет можно читать или там пусто?? Потом то запросов нет к прерывающей точке. И потом начинает вычитывать...и останавливается в какой то момент видимо пока не заполнится внутренний буфер. И еще вопросец. Цитата из книги Уолтера Они:
Но может где на русском есть или на английском небольшая статья. Добавлено через 1 час 19 минут В общем то вроде об этом писал shmkv, но я сразу не въехал...
0
|
|||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 17.02.2017, 16:11 | |
|
VD, тебе ответы на interrupt транзакции должны приходить постоянно и независимо от того есть что нового на устройстве или нет. А вот как создавать и обрабатывать interrupt запросы в винде - это не ко мне.
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 17.02.2017, 16:26 [ТС] | |
|
Да как создавать я разберусь пример есть. Хотел просто понять правильно я понял или нет. Но походу по винде тут нет usb шников ((
0
|
|
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
| 17.02.2017, 16:33 | ||
|
0
|
||
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
||
| 17.02.2017, 16:39 [ТС] | ||
0
|
||
| 18.02.2017, 11:21 | ||
|
Не по теме:
Спецификация сильно переусложнена, даже просто для входа в тему придется изучать мануалы на много страниц, а потом еще долго "въезжать" в особенности разработки под USB в Windows. Я одно время пытался написать драйвер USB для одного простого устройства с тремя командами, но когда понял, что вбухаю на это, как минимум, несколько месяцев работы, то плюнул и забыл. А ведь USB хвалят, как удачное и универсальное решение. Вот только о "простоте" разработки забыли...
0
|
||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||||||
| 18.02.2017, 12:24 | ||||||
|
Убежденный, я не согласен с тобой про сложностью. Очень сложно разрабатывать драйверы хост-контроллеров (что я делал), а вот самих устройств достаточно тривиально в большинстве случаев. Про Винду ничего ен скажу, возможно, что она вставляет палки в колеса.
Добавлено через 8 минут Вот пример моей школьной поделки. Аналогичный (корректный) пример для PS/2 на порядок был бы длиннее.
0
|
||||||
|
Ушел с форума
|
||
| 19.02.2017, 11:42 | ||
|
Мне хотелось для начала понять, как работает USB на программном уровне и как эффективно использовать возможности, которые он предоставляет. Когда оказалось, что для этого нужно вникать в спецификацию на тысячу страниц (про книги Агурова я молчу), а затем еще постигать многочисленные аспекты программирования USB в Windows (конфигурирование, PnP, управление питанием, система установки), то я решил для себя, что никогда больше не хочу иметь дела с USB. Пускай этим занимаются "аппаратчики", набивающие руку по двадцать лет на одном и том же технологическом стеке. К формированию такой позиции подтолкнуло еще и то, что на вопросы, связанные с программированием драйверов USB, которые чуть глубже тривиальных вещей, очень трудно найти ответы в сети. Вот и VD уже застрял на USB-драйверах и висит на этой теме уже два месяца. Пожелаем ему удачи. А писать драйверы "вслепую", не понимая, как работает нижележащий слой, используя библиотеки или чужой малопонятный эталонный код - это не наш метод.
0
|
||
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 19.02.2017, 12:37 [ТС] | |
|
Вишу я не из за сложности c usb, а из за сложности этой темы вообще. Синхронизация, очереди, отмена IRP, управление переходами PnP и все такое. Два месяца как ты и сказал оказалось мало, может еще надо 2 месяца
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 26.02.2017, 12:22 [ТС] | |
|
Кто подскажет как получить ассемблерный листинг в wdk 7600?
0
|
|
|
Ушел с форума
|
|
| 26.02.2017, 20:09 | |
|
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 26.02.2017, 20:54 [ТС] | |
|
Моих творений которые на си, хочу посмотреть как это на асме выглядит
0
|
|
|
Ушел с форума
|
||||||
| 26.02.2017, 21:40 | ||||||
|
/FA, /Fa (Listing File)
https://msdn.microsoft.com/en-... y26c6.aspx В WDK 7.1 можно добавить в файл sources такую строчку:
1
|
||||||
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 02.03.2017, 10:19 [ТС] | |
|
Кажется в Windows есть какой то механизм который при ошибках не грузит новую версию драйвера. Вот допустим мой драйвер ошибся или еще чего. Ок, я его заменил в папке драйверов новым скомпилированным файлом. А винда все равно грузит не новый а тот который ошибся, пока не перегрузишься. Можно отключить как то
0
|
|
|
Ушел с форума
|
|
| 02.03.2017, 10:32 | |
|
Чтобы загрузилась новая версия драйвера, сначала нужно выгрузить старую
(net stop mydriver - как пример). Для того, чтобы драйвер мог выгружаться по запросу, у него должна быть реализована функция Unload (см. DRIVER_OBJECT->DriverUnload). А PnP-драйверы выгружаются по сигналу IRP_MJ_PNP/IRP_MN_REMOVE_DEVICE, когда удаляется соответствующий стек устройств.
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 02.03.2017, 11:12 [ТС] | |
|
Да нет это все понятно конечно. Я ж устройство отключаю, вижу сообщение что вызвано IRP_MN_REMOVE_DEVICE и unload. Меняю файл. Подключаю устройство - и загружен старый. Такое возникает время от времени. Если я ничего не путаю то это винда пытается защитится от кривых драйверов
0
|
|
|
Ушел с форума
|
||
| 02.03.2017, 14:31 | ||
![]() Скорее всего, что-то неправильно делаешь. Может быть, остается ссылка на один из объектов драйвера, поэтому он выгружается "не до конца". Driver Verifier включи на максимум, лучше всего на Win8 или Win10 (все проверки, кроме эмуляции нехватки ресурсов) и смотри, выкинет он что-нибудь при выгрузке драйвера или нет.
1
|
||
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 07.03.2017, 08:40 [ТС] | |
|
Кстати я неправильно интерпретировал тот лог, который выкладывал ранее. Стандартный драйвер кидает два запроса один к массовой точке для чтения а другой к прерывающей. Прерывающая так и не отвечает, так как используется для дополнительных нотификаций(вроде так в спецификации CDC указано) связанных со спецификой ком порта.
Меня же пока интересует только чтение и запись. То есть просто кидаем запрос нижнему драйверу к массовой точке для чтения. Когда на ней появятся данные он их прочитает и мы можем это узнать с помощью функции завершения. Читая Они я составил алгоритм чтения какой в голову пришел. Через внутренний буфер и с использованием очереди ("наивные функции" из Они). Начал тестировать когда устройство отвечает эхом. Скорость чтения гораздо ниже записи. Вывод на экран идет со скоростью печати бабушки.
0
|
|
| 07.03.2017, 08:40 | |
|
Переводить команды USB WIFI Адаптера через компьютер по USB-USB для устройства USB-адаптер TL-WN727N: "Не удалось инициализировать драйвер этого устройства. (Код 37)"
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|