Например TDA7294

 Форум РадиоКот • Просмотр темы - USB HID интерфейс
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб дек 16, 2017 17:50:16



Часовой пояс: UTC + 3 часа [ Летнее время ]


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



Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Сб мар 10, 2012 03:02:53 
Собутыльник Кота
Аватар пользователя

Карма: 60
Зарегистрирован: Ср дек 24, 2008 10:58:58
Сообщений: 2847
Рейтинг сообщения: 0
Медали: 2
Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Попробуйте какой-нибудь software анализатор USB траффика. Например, USBTrace (найдите в Гугле).


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Сб мар 10, 2012 12:04:43 
Мудрый кот
Аватар пользователя

Карма: 14
Зарегистрирован: Пн окт 11, 2010 20:00:08
Сообщений: 1741
Рейтинг сообщения: 0
AaNnDdRrEeYy писал(а):
программа на хосте которая работает не видит его нифига
Попробуйте найти этим кодом (скомпилированная программа во вложении).
Код:
x=HID_Lib_OpenDevice($5DF, $16C0)
If x
  MessageRequester("", "Девайс найден.")
  HID_Lib_CloseDevice(x)
Else
  MessageRequester("", "Девайса нет.", #MB_OK|#MB_ICONINFORMATION)
EndIf
End
У меня он все нормально работающие USB HID устройства видит.

Если не найдет, то залейте в AVR (ATmega8) прошивку из вложения, должно найти.
D+ подключаете к выводу 4, а D-, к выводу 5 МК.


Вложения:
USB_ATmega8.rar [5.73 KiB]
Скачиваний: 252
Вернуться наверх
 Профиль  
 
JLCPCB Prototype, Бесплатная доставка первого заказа + $2 на прототип ПП!

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Цена за 10 плат: $2 за 2-х слойную, $15 за 4-х слойную, $74 за 6-ти слойную.

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Сб мар 10, 2012 12:44:16 
Встал на лапы

Зарегистрирован: Ср дек 24, 2008 12:59:24
Сообщений: 100
Откуда: Москва
Рейтинг сообщения: 0
Разобрался с программой все работает. проблема была в получении имени устройства там есть код
Код:
      if ( hid.GetConnectedDeviceName() == exampleDeviceName )
      {
         res = 1;
         break;
      }


все время возвращал пустую строку и условие не срабатывало, почему понятия не имею. Я откомпилировал исходники (только hidlibrary.h) в VS 2010, отключив поддержку clr.
для консольного приложения на VS получилось так
Код:
#include <stdio.h>
#include "hidlibrary.h"
#include "usbconfig.h" 


char  vendorName[]  = {USB_CFG_VENDOR_NAME, 0};
char  productName[] = {USB_CFG_DEVICE_NAME, 0};


struct dataexchange_t      
{
   unsigned char  b1;       
   unsigned char  b2;       
   unsigned char  b3;       
};                 
struct dataexchange_t pdata = {0, 0, 0};
HIDLibrary <dataexchange_t> hid;


int connect() 
{
   int i, n, res=0;
   string exampleDeviceName = "";

   exampleDeviceName += vendorName;
   exampleDeviceName += " ";
   exampleDeviceName += productName;

   n = hid.EnumerateHIDDevices();
                                 

   for (i=0; i<n; i++)           
   {
      hid.Connect(i);

      string nd ="";
     nd = hid.GetConnectedDeviceName();
      if ( nd == exampleDeviceName )
      {
         res = 1;
         break;
      }
   }
   return res;
}


void ResieveData()
{
     hid.ReceiveData(&pdata);

      if (pdata.b1)
     {printf("led 1 - on\n");}
     else
     {printf("led 1 - off\n");}
      if (pdata.b2)
     {printf("led 2 - on\n");}
     else
     {printf("led 2 - off\n");}
     if (pdata.b3)
     {printf("led 3 - on\n");}
     else
     {printf("led 3 - off\n");}
     
}

 int main ()
 {

     printf ("\n connecting...\n");
     int conn =0;
    conn = connect();
     if(conn==1)
    {
       printf ("Send data\n");
       //зажигаем два крайних светодиода
       pdata.b1 = 1;
         pdata.b2 = 0;
         pdata.b3 = 1;

         
       hid.SendData(&pdata);
         ResieveData();
    }
    else
    {
       printf ("not found :(\n");
    }

     return 0;
 }
}


сейчас буду пробовать прикрутить все это дело к .NET с помощью cli без использования DllImport
C# знаю намного больше чем нативный С++


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Чт мар 15, 2012 21:27:26 
Встал на лапы

Зарегистрирован: Ср дек 24, 2008 12:59:24
Сообщений: 100
Откуда: Москва
Рейтинг сообщения: 0
Ура! получилось управлять тремя светодиодами через USB.
вот только с C++/CLI разобраться не смог. Сделал одну DLL на C++ не управляемый код и одну враппер на C#. и еще демо програмку
если кому понадобиться вот исходники
http://files.mail.ru/65KAR4


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Вт ноя 20, 2012 18:06:00 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 20:56:10
Сообщений: 564
Рейтинг сообщения: 0
AaNnDdRrEeYy, расскажи поподробнее как решил проблему? У меня такаяже проблема в том проэкте. Не видит устройство...

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Вт ноя 20, 2012 23:08:54 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 20:56:10
Сообщений: 564
Рейтинг сообщения: 0
Уже разобрался. Нужно было апдейт на билдер скачать

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Вт июн 18, 2013 17:25:35 
Родился

Зарегистрирован: Сб апр 20, 2013 16:31:20
Сообщений: 3
Рейтинг сообщения: 0
Зукс писал(а):
Уже разобрался. Нужно было апдейт на билдер скачать


Поясните про апдейт, пожалуйста :)
Столкнулся с такой же проблемой на билдере.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Пт июл 17, 2015 06:00:03 
Друг Кота
Аватар пользователя

Карма: 16
Зарегистрирован: Чт сен 20, 2007 15:08:00
Сообщений: 10465
Рейтинг сообщения: 0
разбираюсь со стандартным хид
решил пока помигать светодиодом нум лока на отдельной клавиатуре, где только цифровые кнопки (брал для станка)
там один светодиод

усб сниффер показал, что при нажатии на нумлок ничего не происходит, но светодиод гаснет

когда я нажимаю нумлок на обычной делл клавиатуре, то сниффер ловит нажатие и светодиод тоже реагирует

только я нихера не пойму во всех этих штука
слишком абстгактно все и непонятно, где там данные

http://www.usb.org/developers/hidpage/HID1_11.pdf
вот тут пдф есть с определениями по стандартным устройствам
там есть клавиатура на странице 59
там что-то написано про светодиоды
8 байт это про кнопки in
и 1 байт про светодиоды out
т.е. мне надо сделать некий пакет, только я не знаю его тип и что вообще туда пихать кроме как out

я вот это читал http://habrahabr.ru/post/210736/
библиотеку использую ту для виндовса
Код:
private void button1_Click(object sender, EventArgs e)
{
    // Передать пакет, который включает светодиод на макетной плате AVR-USB-MEGA16.
    UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor |
    UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out), 1, (short)1, 0, 0);
    int countIn;
    byte[] data = new byte[1];
    MyUsbDevice.ControlTransfer(ref packet, data, 0, out countIn);
}

UsbSetupPacket это конструктор
public UsbSetupPacket(
byte requestType,
byte request,
short value,
short index,
short length
)

UsbCtrlFlags.RequestType_Vendor это флаги и это нестандартный флаг, который определяет формат данных самим производителем девайса
а что пихать для стандартной клавиатуры и как разобрать другие типы устройств
например кнопки мыши
или может я в пдф не туда смотрю?

везде пишут, как сделать свое устройство и нигде нет инфы, как сделать стандартное устройство или управлять уже готовым

_________________
тематические ответы только в форуме, в приват не пишите


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Ср мар 30, 2016 21:56:28 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт сен 14, 2010 15:40:55
Сообщений: 70
Откуда: Оттуда
Рейтинг сообщения: 0
Доброго времени суток!

Вот занялся связью AVR с компом по USB и как раз попались мне статьи с использованием HID и соответственно hidlibrary.h.
Сделал устройство, описанное в статье http://cxem.net/comp/comp129.php, а оно, в свою очередь основывается на http://we.easyelectronics.ru/electro-and-pc/usb-dlya-avr-chast-2-hid-class-na-v-usb.html.
Прошитый контроллер нормально определяется системой, показывает VID и PID, и даже готовый софт (в первой статье) нормально с ним взаимодействует.
А вот написать свой софт не выходит...

Как уже писали выше, функция
Код:
int connect()  // этой функцией будем подключаться к устройству
{
   int i, n, res = 0;
   string exampleDeviceName = "";

   exampleDeviceName += vendorName;
   exampleDeviceName += " ";
   exampleDeviceName += productName;

    n = hid.EnumerateHIDDevices();

    for (i = 0; i < n; i++){
       hid.Connect(i);

       if ( hid.GetConnectedDeviceName() == exampleDeviceName ){
          res = 1;
          break;
       }
    }
   return res;
}

почему-то не хочет коннектиться.
Обнаружилось, что код
Код:
       if ( hid.GetConnectedDeviceName() == exampleDeviceName ){
          res = 1;
          break;
       }

нормально не отрабатывает, то есть hid.GetConnectedDeviceName() всегда возвращает пустую строку.
Проверка подтвердила, что счетчик устройств не равен нулю, а в моем случае находит два устройства - мышку и контроллер.
Кто-то разобрался почему функция не хочет работать адекватно? Как заставить ее вывести названия подключенных устройств?

Писал софт на С++ Builder 2007.
Встречал заметки, что на билдер ставили какой-то апдейт, но я так понял что говорили о версии 6 и соответственно update 4. Пробовал установить эту версию, однако результат компиляции софта был таким же.
Система - Windows 7 SP1 x64


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Чт авг 10, 2017 21:51:38 
Родился

Зарегистрирован: Чт авг 10, 2017 21:34:54
Сообщений: 2
Рейтинг сообщения: 0
Всем привет,

Поставил RADStudio 10.2 и хочу реализовать этот проэкт.
Столкнулся с проблемой, что вижу количество устройств HID, но не могу увидеть свое.
Проверил функции GetConnectedDeviceName и Connect. Не возвращает ничего. Место пути на утсройства и значений Product и Vendor.

Помогите пожалуйста, неделю уже мучаюсь, не могу понять причину.
Использую СBuilder.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Чт авг 10, 2017 23:06:02 
Мудрый кот
Аватар пользователя

Карма: 14
Зарегистрирован: Пн окт 11, 2010 20:00:08
Сообщений: 1741
Рейтинг сообщения: 0
Комп устройство определяет как HID? Ошибок в работе нет?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Чт авг 10, 2017 23:46:11 
Родился

Зарегистрирован: Чт авг 10, 2017 21:34:54
Сообщений: 2
Рейтинг сообщения: 0
Здравствуй.

>Комп устройство определяет как HID? Ошибок в работе нет?

HID определяет, программа на контроллере написана правильно, проблема появилась когда начал делать хост, начал выбирать варианты,
результат написал выше.
не знаю на что грешить, на ломаный RAD Studio или на сам метод, или на hidlibrary.h


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Ср сен 06, 2017 09:22:45 
Родился

Зарегистрирован: Ср мар 13, 2013 23:50:19
Сообщений: 18
Откуда: хкто его знает
Рейтинг сообщения: 0
HID определяет

Разобрались с проблемоЙ? Я заметил, елси не ставить драйвер например от LiBUSB, то устройство програмно видит (vid\pid) но по какой-то причине игнорирует. Если установить драйвер, тогда все нормально, connect() возвращает номер уст-ва.

И вот тут у меня вопрос, неужели для HID.DLL (hidlibrary) все равно нужно устанавливать доплнительный драйвер? Хотя девайс определяется как HID-совместимое устройство. Стоит только удалить LiBUSB и начинаются пляски типа - "да вот же оно! а в ответ - где!? где!?"

К стати на win XP нормально, а под win 7 вчера весь день долбался, ставил-удалял-ставил, что бы убедиться.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Ср сен 06, 2017 12:10:46 
Мудрый кот
Аватар пользователя

Карма: 14
Зарегистрирован: Пн окт 11, 2010 20:00:08
Сообщений: 1741
Рейтинг сообщения: 0
deemchik писал(а):
неужели для HID.DLL (hidlibrary) все равно нужно устанавливать доплнительный драйвер?
Нет не нужно. Если посмотрите эту конструкцию, или этот код все работает без дополнительных драйверов.

Это все из-за криворуких программистов решивших что лучше юзать LiBUSB вместо HID.DLL. :facepalm: :dont_know:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: USB HID интерфейс
СообщениеДобавлено: Ср сен 06, 2017 14:02:50 
Родился

Зарегистрирован: Ср мар 13, 2013 23:50:19
Сообщений: 18
Откуда: хкто его знает
Рейтинг сообщения: 0
Это все из-за криворуких программистов решивших что лучше юзать LiBUSB вместо HID.DLL. :facepalm: :dont_know:

Вот в этом то и дело, что пока не пощупаешь не поймешь. И таки понял насколько LiBUSB не стабильная. Перешел на HIDlibrary, а тут загвоздка. Ну не получается у меня прием и передача данных. На LiBUSB работало, проверено.
Извиняюсь что влез в чужую тему... 8)
МК использует V-USB, в принципе все то же.
Код:
sbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t    *rq = (void *)data;
unsigned char *cmddata = (unsigned char*)&rq->wValue;
//u16 temp;
static unsigned char cmdusbinfo = 0;
    if(rq->bRequest == CUSTOM_RQ_SET_STATUS)
    {
   // Прием команд и данных от хоста
        switch(cmddata[0])
        {
            case USB_SET_WEIT_LOAD:
                 ...
        }
    }
    else if(rq->bRequest == CUSTOM_RQ_GET_STATUS)
    {//комнды ответа
        ...
    }
}


в софте
Код:
//  "Отправить данные"
   if ( 1 == connect() )
   {
     pdata.b1 = 1;
     pdata.b2 = 0xee;
     pdata.b3 = 0;
     hid.SendData(&pdata);           // Отправляем данные устройству в
   }

и вот никак не могу понять как привести все это к виду что-то типа этого
Код:
usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, CUSTOM_RQ_GET_STATUS, 0, 0, buffer, sizeof(buffer), 5000);

потому как с HIDlibrary только начал знакомство.
Как правильно оформить прием/передачу V-Usb & Hidlibrery? Может кто подскажет?

Добавлено after 25 minutes 26 seconds:
Не помню где нашел, но в тему, может кому пригодится. Пошел изучать.
Вложение:
hid_rus.pdf [1.01 MiB]
Скачиваний: 50


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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