Простейший код HID. Везде только слова, мыши и джойстики...
Добавлено: Чт апр 16, 2009 12:11:16
Кто нибудь может привести простейший код HID для CodeVision. Перелопатил кучу информации, но реализовать так и не смог. Все статьи по HID делятся на 2 типа:
1. Джойстик, мышь, клавиатура (это классика, перепечатываемая по 100 раз).
2. Термометр и т.д. (без исх. кодов или хрен пойми как реализованные)
Запустить это тоже не получилось. Откомпилировал код http://microsin.ru/Download.cnt/avr/avr-usb-russian.rar (avr-usb-russian\examples\hid-custom-rq\firmware). Прочитал "разработка устройства USB - как начать работу с библиотекой AVR USB" от microsin. Собрал схему (как рекомендуют)

Proteus. Через 4 секунды работы - ошибка. Одна. Не показывает какая и останавливается. Примеры из папки Samples Протеуса (работа с USB HID) работают. Устройство определяется. Видно в Диспетчере устройств. И управляется программой (.ехе файл). Светодиоды зажигаются. Но там контроллер уже с USB, впрочем как и в книге Агурова - читал, мне не помогло.
Помогите разобраться пожалуйсто. Только не надо ссылок (я там везде был). Везде одно и то же. Ругани тоже не надо.
Задача проста: Устройство. Подключаем к компьютеру (USB). Оно определилось как HID. Готово к работе. На компьютере программа с 1 кнопкой. (вкл/выкл). Т.е. (как я понимаю), нашли наше устройство по ID и т.д. отправили какой нибудь байт. Если пришел этот байт - включить светодиод, пришел ещё раз выключить. Всё. Вместо диода потом будет подключена схема управления нагрузкой 220 В.
Везде только общие слова. Типа воспользуемся этим и т.д. Может кто то может привести КОД простейшего HID? Или объяснить поподробней. Буду очень признателен.
0x75, 0x08, // REPORT_SIZE ( 8 )
0x95, 0x80, // REPORT_COUNT (128)
Я так понимаю мне надо:
Размер элемента данных 1
Число элементов 1
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x01, // REPORT_COUNT (1)
А что такое 0х75 и 0х95 ?
В голове просто каша.
Причем если просто подключаю usbconfig.h и ещё куча всего к CodeVision - не компилируется. Я думаю это из-за того что не настоены порты, не определен контроллер при компиляции. Это же всё в так называемом make файле, а как всё это CodeVision задать не соображу.
P.S. не ругайте строго, просто очень хочется чтобы заработало то что задумал. Пусть даже до конца код не пойму.
1. Джойстик, мышь, клавиатура (это классика, перепечатываемая по 100 раз).
2. Термометр и т.д. (без исх. кодов или хрен пойми как реализованные)
Запустить это тоже не получилось. Откомпилировал код http://microsin.ru/Download.cnt/avr/avr-usb-russian.rar (avr-usb-russian\examples\hid-custom-rq\firmware). Прочитал "разработка устройства USB - как начать работу с библиотекой AVR USB" от microsin. Собрал схему (как рекомендуют)

Proteus. Через 4 секунды работы - ошибка. Одна. Не показывает какая и останавливается. Примеры из папки Samples Протеуса (работа с USB HID) работают. Устройство определяется. Видно в Диспетчере устройств. И управляется программой (.ехе файл). Светодиоды зажигаются. Но там контроллер уже с USB, впрочем как и в книге Агурова - читал, мне не помогло.
Помогите разобраться пожалуйсто. Только не надо ссылок (я там везде был). Везде одно и то же. Ругани тоже не надо.
Задача проста: Устройство. Подключаем к компьютеру (USB). Оно определилось как HID. Готово к работе. На компьютере программа с 1 кнопкой. (вкл/выкл). Т.е. (как я понимаю), нашли наше устройство по ID и т.д. отправили какой нибудь байт. Если пришел этот байт - включить светодиод, пришел ещё раз выключить. Всё. Вместо диода потом будет подключена схема управления нагрузкой 220 В.
Везде только общие слова. Типа воспользуемся этим и т.д. Может кто то может привести КОД простейшего HID? Или объяснить поподробней. Буду очень признателен.
Код: Выделить всё
PROGMEM char usbHidReportDescriptor[22] = { /* дескриптор репорта USB */
0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x80, // REPORT_COUNT (128)
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
0xc0 // END_COLLECTION
};
/* Поскольку мы задали только один feature-репорт, мы не используем идентификаторы
* report-ID (которые должны быть в первом байте репорта). Весь репорт состоит из 128
* opaque байт данных.
*/
0x95, 0x80, // REPORT_COUNT (128)
Я так понимаю мне надо:
Размер элемента данных 1
Число элементов 1
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x01, // REPORT_COUNT (1)
А что такое 0х75 и 0х95 ?
В голове просто каша.
Причем если просто подключаю usbconfig.h и ещё куча всего к CodeVision - не компилируется. Я думаю это из-за того что не настоены порты, не определен контроллер при компиляции. Это же всё в так называемом make файле, а как всё это CodeVision задать не соображу.
P.S. не ругайте строго, просто очень хочется чтобы заработало то что задумал. Пусть даже до конца код не пойму.






