Я попытался сделать устройство, описанное в
этой статье. Само устройство я сделал. Сделал и залил прошивку.Все сделал как в статье кроме 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.