
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (51) « Первая ... 12 13 [14] 15 16 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#196
,
|
|
|
Цитата Melas @ После назначения адреса устройство по этому самому адресу не отвечает, хотя ошибок при установке адреса нет. Что здесь может быть? Может быть что ты на самом деле устанавливаеш не тот адрес, который думаеш ![]() В смысле ошибка где-то в установке - адрес то устанавливается, но другой. Хотя так трудно сказать... Может немного оффтоп, но всё-же ![]() Есть мысли написать софтину для закачки фоток с цифровых USB камер под DOS. Для камер которые определяются не как Mass Storage, а как Still Imaging Class. Что-то вроди Volkov Commander, только одна панель выбор подключённых камер, а вторая - локальных дисков. Ну и копирование там, удаление и всё такое... Так вот вопрос - оно кому-нибудь надо? Я в том смысле что мне интересно и я писать всё равно буду, но имеет ли смысл его где-нибудь выкладывать... Кто что скажет? |
Сообщ.
#197
,
|
|
|
Melas Вот мой код установки адреса устройства... может чем поможет. Помню у меня была похожая проблема, но уже не помню как решилась
![]() ![]() ![]() ;Инициализация USB Mass Storage устройства ;Вход ; CurDevice - указатель на структуру устройства ;Выход ; USB_TansErr - статус инициализации UHC_MSDeviceInit PROC ... ;код открытия порта DEV_ENABLED: ;порт включен, устройство готово к приему пакетов ;установим адрес устройства mov lpUSB_MSD.MSD_Adr, 0 ;после ресета у уст-ва адрес 0 ;Установим адрес call UHC_SetAddress cmp USB_TransErr, 0 jne DEV_INIT_ERR mov AX, RequestBuf.ReqValue mov lpUSB_MSD.MSD_Adr, AL ;запишем новый адрес в структуру устройства ... ;код дльнейшей инициализации UHC_MSDeviceInit ENDP ;Установка адреса устройства ;Вход ; CurDevice - указатель на структуру устройства ;Выход ; USB_TansErr - статус инициализации UHC_SetAddress PROC push EAX push EDX push ECX mov RequestBuf.RequestType, SET_ADDRESS mov AX, offset USB_Devices mov DX, CurDevice sub DX, AX shr DX, 4 inc DX mov RequestBuf.ReqValue, DX mov RequestBuf.ReqIndex, 0 mov RequestBuf.ReqLength, 0 mov CX, 3 SET_DEV_ADR: call UHC_CTRL_IO cmp USB_TransErr, 0 ;если адрес установился je DEV_ADR_SET ;продолжим инициализацию loop SET_DEV_ADR ;если нет, повторим попытку DEV_ADR_SET: pop ECX pop EDX pop EAX ret UHC_SetAddress ENDP cppasm Сложный вопрос, по поводу, нужна ли сама софтина, а вот как опыт, это да! Интереснее было бы соорудить драйвер, что бы любой Commander мог сливать фотки, и чтобы каждая камера подключалась как стандартный диск DOS... НА ЛЕТУ! Единственная проблема с драйвером, это отсутствие в UHCI аппаратного прерывания на подключение устройства. |
Сообщ.
#198
,
|
|
|
Ну с UHCI это не проблема - вешаемся на таймер и мониторим.
Там проблема с созданием драйвера в другом. Он не подходит ни под символьные, ни под блочные устройства. Организация по принципу БД. Получить список объектов, получить превьюшку объекта, получить объект, удалить объект. Т.е. это как бы более высокий уровень получается... Разве что перехватывать int 21h, но там кучу функций перехватывать прийдётся. Да и всё равно чтение как из файла из фотки сделать не получится - произвольный участок читать нельзя, только фотку целиком (от начала до конца). |
Сообщ.
#199
,
|
|
|
Для этого там есть понятие как драйвер файловой системы. Так MSCDEX работает. К нему оращения идут не как к обычному драйверу блочного устройства на чтение секторов. К нему обращаются за структурой каталогов и файлов. А уж как драйвер читает файл, систему не колышет.
|
Сообщ.
#200
,
|
|
|
Ну так а драйвер ФС это просто название - по сути он 21 прерывание перехватывает.
Я же пишу - там проблема с произвольным доступом к содержимому файла. В DOS SEEK сделать можно и читать со средины файла, а здесь нельзя. Разве что кешировать весь файл во временной папке какой-нибудь. В общем посмотрим. |
Сообщ.
#201
,
|
|
|
Цитата cppasm @ В DOS SEEK сделать можно и читать со средины файла, а здесь нельзя. Оказалось можно ![]() Есть тестовая версия программы для скачивания фото с цифровых камер под DOS. Пока максимальная скорость 12 Мб/с (USB 1.1). С моей камерой отлично работает. Нет желающих попробовать? |
Сообщ.
#202
,
|
|
|
Привет всем!
Кто-нибудь общался с HID? Там у него есть дескриптор репорта. Что с ним делать? ![]() |
Сообщ.
#203
,
|
|
|
Цитата Melas @ Варианта 2.Кто-нибудь общался с HID? Там у него есть дескриптор репорта. Что с ним делать? Вариант 1: ![]() ![]() Забить. Ставим BootReport и всё. Но тогда максимум 2 кнопки, X и Y; для некоторых мышек 2 кнопки, скролл, X и Y. Вариант 2: ![]() ![]() Парсить этот дескриптор. В нём описан формат возвращяемых устройством данных. Тут тебе у мышек хоть по 10 кнопок может быть и т.д. Но только всё там сложно сильно, точнее слишком абстрактно. Лично я для мыши делал пока по первому варианту. |
Сообщ.
#204
,
|
|
|
Как от HID получить данные? На мой запрос GET_REPORT мышь отвечает STALL. Передача по нулевому каналу. В спецификации сказано, что можно использовать Report_ID. Как его можно найти?
|
Сообщ.
#205
,
|
|
|
Цитата Melas @ Как от HID получить данные? Сделать InterruptRead транзакцию с адресом InterruptIn конечной точки. В спецификации нормально всё расписано. Сейчас правда под рукой нет - по-позже может быть посмотрю все детали и напишу. |
Сообщ.
#206
,
|
|
|
Сделал. Ответ пришел "устройство не найдено"
![]() |
Сообщ.
#207
,
|
|
|
Я включение светодиода видел только на некоторых флешках.
Включается он там при посылке SetConfiguration. Цитата Melas @ Запрос SetConfiguration ушел, ошибок нет, но светодиод не горит. А что за устройство? Может он и не должен гореть, а горит только когда обмен данными идёт. Цитата Melas @ Сделал. Ответ пришел "устройство не найдено" Что сделал? Чтение с Interrupt конечной точки? При получении "устройство не найдено" 99% что ты указал неправильный адрес. При обнаружении устройства надо сделать: 1. сброс порта, устройство получает адрес 0 2. SetAddress 3. SetConfiguration Всё. Кстати, устройство может ещё не отвечать если ты не забрал управление у BIOS SMM. Смотри в спецификации Request Ownership. Просто тогда ты с SMM конфликтуеш и чаще всего проигрываеш. |
Сообщ.
#208
,
|
|
|
Устройство - мышь. Порядок действий такой:
Инициализация - проверяю SMI (Interrupt routing), бит не выставлен. Дальше инициализация контроллера. Появляется устройство, делаю резет порта, устанавливаю адрес, получаю дескрипторы устройства уже по установленному адресу. Затем далаю SetConfiguration с конфигурацией 0. Пакет уходит, ошибок нет. Светодиод на мыше не горит. В Interrupt дереве формирую конечную точку (тоже Interrupt, адрес 1) - указываю дескриптор передачи: устройство 1, конечная точка 1, транзакция IN, указываю максимальный размер пакета. При передаче этого дескриптора и возникает ошибка "устройство не найдено". Может ей надо еще что-нибудь пошептать? ![]() |
Сообщ.
#209
,
|
|
|
Цитата Melas @ Может ей надо еще что-нибудь пошептать? Вроди ничего не надо. Скорее всего ошибка в InterruptRead тогда. А контроллер какой - OHCI?? |
Сообщ.
#210
,
|
|
|
Да, контроллер OHCI.
|