Например TDA7294

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

Текущее время: Пн июл 28, 2025 01:17:31

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: мое hid устройство
СообщениеДобавлено: Вс май 14, 2017 14:03:34 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 04, 2014 21:39:16
Сообщений: 33
Рейтинг сообщения: 0
я сделал HID устройство, описанное в статье
http://we.easyelectronics.ru/electro-an ... v-usb.html
устройство отобразилось в диспетчере устройств. Программа на си, текст которой приведен в
статье не видит моё устройство.

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



нормально не отрабатывает, то есть hid.GetConnectedDeviceName() всегда возвращает пустую строку.
И так эта функция себя ведет для любого HID устройства, а не только для моего,
подскажите что делать. Стоит c++ belder update 4. проблема не только у меня вот тут
обсуждается viewtopic.php?f=24&t=66562&start=20 решение я так и
не нашел, помогите пожалуйста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Вс май 14, 2017 17:50:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Не знаю, что там и как у вас устроено, но строки в Си так не "возвращаются" и тем более так не сравниваются.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Вс май 14, 2017 19:31:02 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 04, 2014 21:39:16
Сообщений: 33
Рейтинг сообщения: 0
как это не сравниваются вот код из статьи
Код:
int connect()  // этой функцией будем подключаться к устройству
{
   int i, n, res=0;
   string exampleDeviceName = "";

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

   n = hid.EnumerateHIDDevices(); // узнаем все Hid устройства vid_16c0&pid_05df
                                  // vid и pid указаны в hidlibrary.h константой idstring

   for (i=0; i<n; i++)            // ищем среди них наше
   {
      hid.Connect(i);

      // GetConnectedDeviceName() возвращает string,
      // где через пробел указаны vendor и product Name.
      // Сравниваем, если совпало - значить устройство наше
      if ( hid.GetConnectedDeviceName() == exampleDeviceName )
      {
         res = 1;
         break;
      }
   }
   return res;
}

но у меня hid.GetConnectedDeviceName всегда пустая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Вс май 14, 2017 19:46:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Еще раз: в Си строки так не сравниваются. Точка.
Возможно, это пример на каком-то ином языке... например, С++ с переназначенными операторами сравнения... это уже мне неведомо.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Пн май 15, 2017 10:00:35 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 04, 2014 21:39:16
Сообщений: 33
Рейтинг сообщения: 0
Мне надо чтоб это устройство заработало. Как заставить программу работать. Устройство корректно распознаётся в диспетчере


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Сб май 20, 2017 14:06:25 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 04, 2014 21:39:16
Сообщений: 33
Рейтинг сообщения: 0
Я попытался сделать устройство, описанное в этой статье. Само устройство я сделал. Сделал и залил прошивку.Все сделал как в статье кроме 2 моментов: 1)в файле usbconfig.h пришлось раскоментарить строчку

/* #_DESCRIPTORNdefine USB_CFG_HID__LEREPORTGTH 42 */
42 поменяв на 22
без этой строки устройство в диспетчере устройств отображалось с ошибкой.

2) программу на стороне компьютора писал на delphi7.
Все делал под windows xp 32 bit В итоге устройство в моей программе определяется, но зажечь светодиоды не получается. Я там пользовался компонентом TJvHidDeviceController
вот код
Код:

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvComponent, JvHidControllerClass, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    function HidCtlEnumerate(const HidDev: TJvHidDevice;
      const Idx: Integer): Boolean;
  private
    { Private declarations }
  public
    { Public declarations }
    WorkDev   : TJvHidDevice;
  end;
type
 dataexchange_t = record

   b1:Byte;
   b2:Byte;
   b3:Byte;
   end;

var
  Form1: TForm1;
  pdata : dataexchange_t;
const

  ProductName_  = 'Hid example';
  VendorID_     =  $16c0;
  ProductID_    =  $05dc;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//устанавливаем связь с устройством
HidCtl.Enumerate;
//заполняем структуру
pdata.b1:=1;
pdata.b2:=1;
pdata.b3:=1;
//отправляем данные
If Assigned(WorkDev)
    then WorkDev.SetFeature(pdata, WorkDev.Caps.FeatureReportByteLength);

end;

function TForm1.HidCtlEnumerate(const HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;

begin
  Result:= True;                      // продолжить поиск
  If (Trim(HidDev.ProductName) = ProductName_)
    then  If  (HidDev.Attributes.VendorID  = VendorID_) and
              (HidDev.Attributes.ProductID = ProductID_)
            then  begin               // устройство найдено
                    HidCtl.CheckOutByIndex(WorkDev, Idx);  // получаем устройство по индексу
                    Label1.Caption:= 'подключено';
                    Result:= False;   // поиск закончен
                  end


end;

end.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Вс май 21, 2017 20:02:31 
Мучитель микросхем

Карма: 24
Рейтинг сообщений: 144
Зарегистрирован: Ср июн 08, 2011 20:25:20
Сообщений: 438
Рейтинг сообщения: 0
/* #_DESCRIPTORNdefine USB_CFG_HID__LEREPORTGTH 42 */
42 поменяв на 22

ссылка на файл битая. Скачал c V-USb.
Писать надо более понятно. Правильно #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 22
Это строчка как написана #define USB_CFG_INTERFACE_CLASS ? 2 или 3?
И комп как видит устройство? Hid совместимое или как написано в диспетчере задач?

з.ы. лучше найти работающий полностью проект. Запустить его, а уж потом менять....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: мое hid устройство
СообщениеДобавлено: Вс май 21, 2017 22:34:17 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 04, 2014 21:39:16
Сообщений: 33
Рейтинг сообщения: 0
#define USB_CFG_INTERFACE_CLASS 3

в диспетчере устройств определяется как HID

и еще:

в прошивке есть функция usbFunctionSetup

вот ее код:
Код:
usbRequest_t    *rq = (void *)data;

    if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){    /* HID устройство */
      if(rq->bRequest == USBRQ_HID_GET_REPORT){  /* wValue: ReportType (highbyte), ReportID (lowbyte) */
            // у нас только одна разновидность репорта, можем игнорировать report-ID
            bytesRemaining = sizeof(struct dataexchange_t);
            currentAddress = 0;

            return USB_NO_MSG;  // используем usbFunctionRead() для отправки данных хосту
        }else if(rq->bRequest == USBRQ_HID_SET_REPORT){
            // у нас только одна разновидность репорта, можем игнорировать report-ID
            bytesRemaining = sizeof(struct dataexchange_t);
            currentAddress = 0;
            return USB_NO_MSG;  // используем usbFunctionWrite() для получения данных от хоста
        }
    }else{   

        /* остальные запросы мы просто игнорируем */
    }
    return 0;
}


условие (rq->bRequest == USBRQ_HID_GET_REPORT) не выполняется и условие rq->bRequest == USBRQ_HID_SET_REPORT не выполняется, а условие rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS - выполняется


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

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


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

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


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

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


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