Например TDA7294

Форум РадиоКот • Просмотр темы - Простейший код HID. Везде только слова, мыши и джойстики...
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июл 22, 2025 01:26:50

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 209 ]     ... , , , 6, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 14:49:02 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Я ничего не понимаю в Бейсике, но хочу сказать, что vusb НЕ ЯВЛЯЕТСЯ стандатным HID .
Да, контроллер появляется в винде как хид - и на этом точка. И дело не в структуре репорта - без этой длл-ки libusb0.dll не инициализируется в принципе.
Это медленный и неправильный обмен. Советую сосредоточить усилия, раз так нравяться АВР, на тех, которые поддерживают USB.
К тому же внимательное чтение лицензии говорит, что с каждого изделия сколько-то центов должно идти автору программного обеспечения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 16:09:30 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
vusb НЕ ЯВЛЯЕТСЯ стандатным HID .

а вот оно что... :cry: тогда понятно почему оно не идет.
Значит будем мучать libusb0.dll
оттуда 4 функции надо взять.
    открыть устройство
    чтение
    запись
    закрыть устройство

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 17:38:13 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
позволю себе выделить эту ссылку отдельным постом :)
Итак есть проект бэйсик 6.0 на этой библиотеке
http://www.circuitsonline.net/forum/view/42808
там на 4 странице проект а на 1 все декларации всех функций
Ура с мертвой точки сдвинулись!

теперь задача найти наше устройство, там чета поменяли немного в отличае от си.
смотрим исходники.


Вложения:
Комментарий к файлу: BASIC NET
v-usb.zip [92.31 KiB]
Скачиваний: 361

_________________
в спорах рождается ИСТИНА [AND] flud.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 19:40:35 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
demson писал(а):

    открыть устройство
    чтение
    запись
    закрыть устройство

Написал небольшую DLLку на PureBasic :) для работы с HID устройствами. Может кому будет полезной.
Обозвал её HID_Lib_PB.dll :)))

Устройство открывается с помощью функции
Код:
Handle = HID_OpenDevice(PID,  VID,  VersionNumber,  Index)

Чтение данных
Код:
CountReadBytes = HID_ReadDevice(Handle,  *buffer,   LenBuffer)

Запись данных
Код:
CountWriteBytes = HID_WriteDevice(Handle,  *buffer,   LenBuffer)

Закрытие устройства
Код:
Result = HID_CloseDevice(Handle)


Это далеко не все функции (их всего 14).
Полное описание функций есть в архиве.

DLLка имеет не большой размер, всего 10КБ и при этом вообще не использует никаких внешних файлов или библиотек, типа runtime или .NET :)
Используются только системные библиотеки с API функциями, типа "hid.dll", "setupapi.dll" и др.
Так что будет работать на любой винде, имеющей поддержку USB HID, т. е. начиная с Win 98.


Вложения:
Комментарий к файлу: Динамическая библиотека (DLL) для работы с USB HID устройствами
HID_Lib_PB.rar [11.55 KiB]
Скачиваний: 556
Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 21:23:39 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Однозначно будет полезной :) ее и сделаем основе.
только не получается подключить.
код такой
Код:
    Public Declare Function HID_OpenDevice Lib "HID_Lib_PB.dll" _
    (ByVal PID As Integer, ByVal VID As Integer, ByVal VersionNumber As Integer, _
     ByVal Index As Integer) As Integer


Код:
 Dim vid As Integer = 5824
     Dim pid As Integer = 1503

        Dim ver As Integer = -1
        Dim ind As Integer = 0
        Dim Handle As Integer
        Dim res

        Handle = HID_OpenDevice(vid, pid, ver, ind)


Цитата:
Не удается загрузить DLL "HID_Lib_PB.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)

Лезет странная ошибка. Что бы это могло быть?

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 22:02:00 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
demson писал(а):

Цитата:
Не удается загрузить DLL "HID_Lib_PB.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)

Лезет странная ошибка. Что бы это могло быть?

Сложно сказать.
Никогда с подобной ошибкой не сталкивался.
Может причина в том, что функции возвращают данные в переменных, типа Long.


Вот сделал небольшой пример использования этой DLLки.
Слеюущий код, работает с девайсом PicKit 2 (программатор для PICков).
После запуска проги, на секунду будет подано питание на программируемый PIC (загорится светодиод Target в PicKit 2, а затем погаснет).
После чего, прога завершает свою работу.
Код:
#USB_PID          = $33  ; Идентификаторы PicKit 2
#USB_VID          = $4D8

Lib=LoadLibrary_("HID_Lib_PB.dll")
If Lib=0
 MessageRequester("PicKit 2 Test", "Нет HID_Lib_PB.dll!", 48)
 End
EndIf

; Декларация функций HID_Lib_PB.dll
Prototype HID_OpenDevice(PID.w, VID.w, VersionNumber.w, Index.w)
Prototype HID_WriteDevice(Handle,  *buffer,   LenBuffer)
Prototype HID_CloseDevice(Handle)
HID_OpenDevice.HID_OpenDevice=GetProcAddress_(Lib, "HID_OpenDevice")
Global HID_WriteDevice.HID_WriteDevice=GetProcAddress_(Lib, "HID_WriteDevice")
HID_CloseDevice.HID_CloseDevice=GetProcAddress_(Lib, "HID_CloseDevice")

Procedure VddOn(Handle) ; Включить питание программируемого МК
 Protected Dim OutBuffer.c(68)
 OutBuffer(0)=0
 OutBuffer(1)=$A6 ; EXECUTE_SCRIPT
 OutBuffer(2)=2
 OutBuffer(3)=$FC ; _VDD_GND_OFF
 OutBuffer(4)=$FF ; _VDD_ON
ProcedureReturn HID_WriteDevice(Handle, @OutBuffer(), 65) ; Отсылаем данные девайсу PicKit 2
EndProcedure

Procedure VddOff(Handle) ; Выключить питание программируемого МК
 Protected Dim OutBuffer.c(68)
 OutBuffer(0)=0
 OutBuffer(1)=$A6 ; EXECUTE_SCRIPT
 OutBuffer(2)=2
 OutBuffer(3)=$FE ; _VDD_OFF
 OutBuffer(4)=$FD ; _VDD_GND_ON
ProcedureReturn HID_WriteDevice(Handle, @OutBuffer(), 65) ; Отсылаем данные девайсу PicKit 2
EndProcedure

Handle=HID_OpenDevice(#USB_PID, #USB_VID, -1, 0) ; Установка связи с PicKit 2
 If Handle
   VddOn(Handle)                                 ; Включить питание
   Delay(1000)                                   ; Пауза 1 секунда
   VddOff(Handle)                                ; Выключить питание
   HID_CloseDevice(Handle)                       ; Разрыв связи с PicKit 2
 Else
   MessageRequester("PicKit 2 Test", "Нет связи с PicKit2!", 48)
 EndIf


Вложения:
PicKit2_Test_DLL.rar [7.59 KiB]
Скачиваний: 323
Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 22:38:57 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Проверил на всякий случай с long. результат тот же.
Мне кажется несовместимость самой длл со студией 2008. Может попробовать пере собрать dll прямо на ней? Хотя там только просто вижуал бейсик. Не уверен что получится а если получится то поможет ли, но все таки возможно ли выложить исходники?

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 22:49:09 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
Мне кажется несовместимость самой длл со студией 2008. Может попробовать пере собрать dll прямо на ней?
Студия PureBasic не поддерживает.
Это вообще продукт не майкрософт.

Может ошибка связанна с тем, что студия 2008 создаёт управляемый код под .NET, на эта DLLка - неуправляемый (native) код?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 23:14:43 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Под .NET там просто все функции автоматом импортируются. Это не должно влиять, они прописаны вручную.
Сейчас еще на всякий на висте попробую, может винда(хп) косячит
Цитата:
Не удается загрузить DLL "HID_Lib_PB.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)

нет, систематический глюк какой то.

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Сб апр 17, 2010 23:26:54 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Проблема разрешилась. ура :))
в общем скопировал длл в систем32 и все. О как. :shock:
так, продолжаю с устройством. :)

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 00:04:29 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
demson писал(а):
Проблема разрешилась. ура :))
в общем скопировал длл в систем32 и все. О как. :shock:
так, продолжаю с устройством. :)

У меня прекрасно работает когда DLLка находиться в одной папке с программой.
Правда я использую динамическую загрузку с помощью API LoadLibrary либо встроенной функции OpenLibrary.
Статическую линковку как правило не использую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 00:30:09 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
В общем устройство отлично открывается. это радует
дальше пытаюсь считать данные и на HID_ReadDevice и на функции прога виснет.
проект hid-data считываю 128 символов с устройства.
пример кода хоста
Код:
usbDevice_t *dev;
char        buffer[129];    /* room for dummy report ID */               128 с нулем
int         err;

    if(argc < 2){
        usage(argv[0]);
        exit(1);
    }
    if((dev = openDevice()) == NULL)
        exit(1);
    if(strcasecmp(argv[1], "read") == 0){
        int len = sizeof(buffer);
        if((err = usbhidGetReport(dev, 0, buffer, &len)) != 0){
            fprintf(stderr, "error reading data: %s\n", usbErrorMessage(err));
        }else{
            hexdump(buffer + 1, sizeof(buffer) - 1);
        }
    }else if(strcasecmp(argv[1], "write") == 0){
        int i, pos;
        bzero(buffer, sizeof(buffer));
        for(pos = 1, i = 2; i < argc && pos < sizeof(buffer); i++){
            pos += hexread(buffer + pos, argv[i], sizeof(buffer) - pos);
        }
        if((err = usbhidSetReport(dev, buffer, sizeof(buffer))) != 0)   /* add a dummy report ID */
            fprintf(stderr, "error writing data: %s\n", usbErrorMessage(err));
    }else{
        usage(argv[0]);
        exit(1);
    }
    usbhidCloseDevice(dev);


код устройства

Код:
/* usbFunctionRead() is called when the host requests a chunk of data from
 * the device. For more information see the documentation in usbdrv/usbdrv.h.
 */
uchar   usbFunctionRead(uchar *data, uchar len)
{
    if(len > bytesRemaining)
        len = bytesRemaining;
    eeprom_read_block(data, (uchar *)0 + currentAddress, len);
    currentAddress += len;
    bytesRemaining -= len;
    return len;
}

/* usbFunctionWrite() is called when the host sends a chunk of data to the
 * device. For more information see the documentation in usbdrv/usbdrv.h.
 */
uchar   usbFunctionWrite(uchar *data, uchar len)
{
    if(bytesRemaining == 0)
        return 1;               /* end of transfer */
    if(len > bytesRemaining)
        len = bytesRemaining;
    eeprom_write_block(data, (uchar *)0 + currentAddress, len);
    currentAddress += len;
    bytesRemaining -= len;
    return bytesRemaining == 0; /* return 1 if this was the last chunk */
}

/* ---------- */

usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* HID class request */
        if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
            /* since we have only one report type, we can ignore the report-ID */
            bytesRemaining = 128;
            currentAddress = 0;
            return USB_NO_MSG;  /* use usbFunctionRead() to obtain data */
        }else if(rq->bRequest == USBRQ_HID_SET_REPORT){
            /* since we have only one report type, we can ignore the report-ID */
            bytesRemaining = 128;
            currentAddress = 0;
            return USB_NO_MSG;  /* use usbFunctionWrite() to receive data from host */
        }
    }else{
        /* ignore vendor type requests, we don't use any */
    }
    return 0;
}

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 08:27:25 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
А разве Вы теоретически можете прочитать 128 байт ? По-моему, это максимальная длина, включая служебную инфу - там байт 20.
Покажите репорт дескриптор.
У меня, например, под обмен шло 8 байт.
Код:
PROGMEM char usbHidReportDescriptor[22] = {    /* USB report descriptor */
    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
};
А вот они в файле usbdrv.c
/* ---------- Device Descriptor ---------- */

#if USB_CFG_DESCR_PROPS_DEVICE == 0
#undef USB_CFG_DESCR_PROPS_DEVICE
#define USB_CFG_DESCR_PROPS_DEVICE  sizeof(usbDescriptorDevice)
PROGMEM char usbDescriptorDevice[] = {    /* USB device descriptor */
    18,         /* sizeof(usbDescriptorDevice): length of descriptor in bytes */
    USBDESCR_DEVICE,        /* descriptor type */
    0x10, 0x01,             /* USB version supported */
    USB_CFG_DEVICE_CLASS,
    USB_CFG_DEVICE_SUBCLASS,
    0,                      /* protocol */
    8,                      /* max packet size */ ------и здесь ----------

и, собственно, сами байты в usbdrv.h
----------
typedef struct usbRequest{
    uchar       bmRequestType; //1
    uchar       bRequest; //2
    usbWord_t   wValue; //3,4
    usbWord_t   wIndex; //5,6
    usbWord_t   wLength; //7,8
}usbRequest_t;
----------
Все 8 штук, обращаюсь при чтении и записи
un.dataBuffer - это мой массив обмена
----------
usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR){
        DBG1(0x50, &rq->bRequest, 1);   /* debug output: print our request */ // прием
        if(rq->bRequest == CUSTOM_RQ_SET_STATUS)
      {
           un.dataBuffer[0] = rq->wValue.bytes[0];
           un.dataBuffer[1] = rq->wValue.bytes[1];
           un.dataBuffer[2] = rq->wIndex.bytes[0];
           un.dataBuffer[3] = rq->wIndex.bytes[1];
      flag=1;
                usbMsgPtr = un.dataBuffer;         /* tell the driver which data to return */
           return 4;
        }else if(rq->bRequest == CUSTOM_RQ_GET_STATUS){
                /* buffer must stay valid when usbFunctionSetup returns */
            //dataBuffer[0] = ((LED_PORT_OUTPUT & _BV(LED_BIT)) != 0);   // передача
      // данные в буфере должны быть готовы
   un.dataBuffer[0]=0x12;
   un.dataBuffer[1]=0x34;   
            usbMsgPtr = un.dataBuffer;         /* tell the driver which data to return */
            return 2;                       /* tell the driver to send 1 byte */
        }
    }else{
        /* calss requests USBRQ_HID_GET_REPORT and USBRQ_HID_SET_REPORT are
         * not implemented since we never call them. The operating system
         * won't call them either because our descriptor defines no meaning.
         */
    }
    return 0;   /* default for not implemented requests: return no data back to host */
}

Т.е. как бы теоретически большой массив бьется на маленькие пакеты и передается последовательно, но пока с этим не заморачивайтесь, добейтесь обмена полный пакет за 1 раз.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 11:48:39 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
нет, библиотека насколько я понял не отрабатывает типы запросов.
if(rq->bRequest == CUSTOM_RQ_SET_STATUS){

Зато есть возможность использовать функцию uchar usbFunctionRead(uchar *data, uchar len)
сейчас попробую написать под эту функцию код
-
нет все также виснет, и на 8 байтах и на одном (функция 1 байт изменяет)
странно.

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 12:51:08 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Что Гита. что Зита... Длл на все идет одна и та же. Думаю, это какое-то внутреннее соглашение, междусобойчик какой-то. Если интересно, я могу проверить в железе еще и этот вид обмена - по эхоотражению, например.
Но не сейчас - сейчас жена самостоятельно ремонтирует сд-плейер (первый ремонт) и работать точно не даст. :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 12:57:06 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
дальше пытаюсь считать данные и на HID_ReadDevice и на функции прога виснет.
проект hid-data считываю 128 символов с устройства


Я же писал об этом
Цитата:
ВНИМАНИЕ! Программа "повиснет" в этой функции до тех пор, пока не будет принято указанное число байт. Поэтому её желательно вызывать в отдельном потоке.


Вот что по этому поводу пишет Агуров в книге "Практика программирования USB"
Изображение

128 байт это много. при программной реализации USB, число байт находится в пределах 1...8
Кроме того, вполне возможно что данные передаются через FEATURE-репорт как в примере urry
В этом случае, для обмена информацией следует использовать функции HID_GetFeature и HID_SetFeature

Но это лишь предположение, нужно на HID-репорт устройства посмотреть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 13:00:48 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1309
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
urry: было бы замечательно :)
тогда скажи vid pid
что передавать и какой длины. Я тебе скомпилирую прогу хоста и с исходниками выложу.
тогда уже увидим в чем проблема. :)
PB_EXPERT: кидаю 2 файла посмотри пожалуйста.


Вложения:
main.c [5.24 KiB]
Скачиваний: 327
usbconfig.h [14.05 KiB]
Скачиваний: 455

_________________
в спорах рождается ИСТИНА [AND] flud.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 13:04:46 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
urry писал(а):
У меня, например, под обмен шло 8 байт.
Код:
PROGMEM char usbHidReportDescriptor[22] = {    /* USB report descriptor */
    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
};
.......
......
......
......



В Вашем примере, передаются и принимаются не 8 байт, а всего лишь один!
REPORT_SIZE - число бит в слове
REPORT_COUNT - чило слов
Т. е. это один байт!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 13:12:21 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
demson писал(а):
кидаю 2 файла посмотри пожалуйста.

Используется FEATURE, поэтому для обмена инфой, нужно использовать функции HID_GetFeature и HID_SetFeature
Действительно 128 байт :shock:


----------

Функции HID_ReadDevice и HID_WriteDevice нужно использовать, если HID репорт имеет примерно такой вид.
Код:
// HID дескриптор репорта
PROGMEM const char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] =
{
    0x06, 0x00, 0xff,       // USAGE_PAGE (Vendor Defined Page 1)
    0x09, 0x01,              // USAGE (Vendor Usage 1)
    0xa1, 0x02,          //   COLLECTION (Logical)
    0x85, 0x77,                //   REPORT_ID (0x77)
    0x09, 0x01,                 //   USAGE (Pointer)
    0x15, 0x00,                 //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                 //   LOGICAL_MAXIMUM (1)
    0x75, 0x08,                 //   REPORT_SIZE (8)
    0x95, 0x03,                 //   REPORT_COUNT (3)
    0x81, 0x02,                 //   INPUT (Data,Var,Abs)
    0x09, 0x01,                 //   USAGE (Pointer)
    0x15, 0x00,                 //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,           //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                 //   REPORT_SIZE (8)
    0x95, 0x08,                 //   REPORT_COUNT (8)
    0x91, 0x02,                 //   OUTPUT (Data,Var,Abs)
    0xc0                   // END_COLLECTION
};


Здесь есть описание конечных точек INPUT и OUTPUT


Последний раз редактировалось PB_EXPERT Вс апр 18, 2010 13:18:13, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Простейший код HID. Везде только слова, мыши и джойстики
СообщениеДобавлено: Вс апр 18, 2010 13:18:12 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
PB_EXPERT писал(а):
urry писал(а):

В Вашем примере, передаются и принимаются не 8 байт, а всего лишь один!
REPORT_SIZE - число бит в слове
REPORT_COUNT - чило слов
Т. е. это один байт!

Вы правы. И с чего оно работает, ума не приложу .... :)


Последний раз редактировалось urry Вс апр 18, 2010 13:24:36, всего редактировалось 1 раз.

Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 209 ]     ... , , , 6, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y