Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

Хост->дев(ица)айc = отправка команды.

Пт сен 15, 2017 22:07:47

Как-то задавал вопрос, ответа не получил, видимо сам мало понимал что спрашивать. Попытка №2.
Ну очень нужна помощь! Перепробовал кучу примеров, тучу исходников, понял в чем "гвоздь" но не понял как победить. :(
Проблема заключается в... ткните пальцем куда копать! пожалуйста!
мой дескриптор - каких куча в примерах:
Код:
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, 0x01,                    //   REPORT_COUNT (1)
    0x09, 0x00,                    //   USAGE (Undefined)
    0xb2, 0x02, 0x01,              //   FEATURE (Data,Var,Abs,Buf)
    0xc0                           // END_COLLECTION
};

ПО-хоста на библиотеке libusb0.dll отрабатывает как и задумывалось. При переходе на ДРУГИЕ библиотеки (hidlibrary, HID API и т.д. включая от Atmel), а так же другие языки (VC++, C# - были потуги) в поисках правильной передачи данных от Хоста к Девайсу, положительного резултата добиться не удалось (а еще чтение данных впереди). Даже самый распространенный пример "proba(e)" описанный на множествах форумов, работать не хочет. Откопал следующее... что-бы я не писал в структуру или массив "pdata[x]" URB_FUNCTION_CONTROL_TRANSFER (если я правильно понял SetupPacket, который должен содержать "посылку") остается тот-же. Процедура отправки данных через, hid.SendData(&pdata) т.е. при помощи HidD_SetFeature(...) вообще ну никак не влияет на посылку данных, кроме как если в pdata[0] засунуть что-нибудь не ноль (при не 0 отсылаемых данных просто нет). Такие фокусы как Write - уходят в себя не обращая внимание на OVERLAPPED. Внутрисхемный отладчик "дев(айса)ицы" показал, что он(а) получает те же данные SetupPacket что и отображает USB Trace.
Прикладываю файлы лога USB Trace посылки SendData(&pdata) без коннекта. Коннект подключается нормально.
Первая картинка показывает правильную "посылку" данных при помощи библиотеки libusb0. Вторая картинка то, что отсылает библиотека HID API (hidlibrary).
LIBUSB0.jpg
(134.03 KiB) Скачиваний: 339
HIDlibrary(HID).jpg
(135.96 KiB) Скачиваний: 420

Я так понимаю многие на этом собаку съели, но на форумах, почему-то до финальной стадии не доходит. Как говориться "на самом интересном месте" или просто - "разобрался, продолжаем дальше". Вот и мне кажется, что хожу вокруг да около... а слона не замечаю.

Re: Хост->дев(ица)айc = отправка команды.

Пт сен 15, 2017 22:27:10

Если хотите чтобы помогли выкладывайте исходники, схему и прошивку девайса, иначе как найти ошибку в коде?

Re: Хост->дев(ица)айc = отправка команды.

Сб сен 16, 2017 10:22:41

Пока приводил в порядок исходники... в исходнике к мк, бросилась мне в глаза фраза "Мы не передаем наши данные через HID-репорты, вместо этого мы используем custom-запросы." :))
По моему это тот ответ, который я искал... :)
А схема стандартная для ATtiny 45/85 - светодиоды на портах PB1, PB3, PB4.

Кысы. кому интересно как только одолею, выложу примеры (исходники).
Ответить