мое hid устройство

Обсуждаем контроллеры компании Atmel.
Ответить
TDKS
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вт ноя 04, 2014 21:39:16

мое hid устройство

Сообщение TDKS »

я сделал 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 решение я так и
не нашел, помогите пожалуйста.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: мое hid устройство

Сообщение ARV »

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

Мой уютный бложик... заходите!
TDKS
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вт ноя 04, 2014 21:39:16

Re: мое hid устройство

Сообщение TDKS »

как это не сравниваются вот код из статьи

Код: Выделить всё

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 всегда пустая
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: мое hid устройство

Сообщение ARV »

Еще раз: в Си строки так не сравниваются. Точка.
Возможно, это пример на каком-то ином языке... например, С++ с переназначенными операторами сравнения... это уже мне неведомо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
TDKS
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вт ноя 04, 2014 21:39:16

Re: мое hid устройство

Сообщение TDKS »

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

Re: мое hid устройство

Сообщение TDKS »

Я попытался сделать устройство, описанное в этой статье. Само устройство я сделал. Сделал и залил прошивку.Все сделал как в статье кроме 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.
bob1
Мучитель микросхем
Сообщения: 453
Зарегистрирован: Ср июн 08, 2011 20:25:20
Контактная информация:

Re: мое hid устройство

Сообщение bob1 »

[uquote="TDKS",url="/forum/viewtopic.php?p=3109842#p3109842"]/* #_DESCRIPTORNdefine USB_CFG_HID__LEREPORTGTH 42 */
42 поменяв на 22[/uquote]
ссылка на файл битая. Скачал c V-USb.
Писать надо более понятно. Правильно #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 22
Это строчка как написана #define USB_CFG_INTERFACE_CLASS ? 2 или 3?
И комп как видит устройство? Hid совместимое или как написано в диспетчере задач?

з.ы. лучше найти работающий полностью проект. Запустить его, а уж потом менять....
TDKS
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Вт ноя 04, 2014 21:39:16

Re: мое hid устройство

Сообщение TDKS »

#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 - выполняется
Ответить

Вернуться в «AVR»