Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JVCL HidDeviceController, Программирование самодельного USB устр. 
:(
    Опции темы
bvv91
Дата 23.10.2009, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



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

unit Unit1;

interface

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

type
TedCommand=RECORD
    Caption:String;
    INDEX:Integer;
    Enabled:Boolean;
    WT:Cardinal;
    edClass: String [2] ;
    edCode:String[2];
    edLength:String[2];
    edParam: String;
    edAnswerData:String;
    IsAnswerData: Boolean;
    ERROR:String;
 WORKED:Boolean;
end;

  TForm1 = class(TForm)
    JvHidDeviceController1: TJvHidDeviceController;
    function JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
      const Idx: Integer): Boolean;
   function  JvHidDeviceController1ExecuteCommand(var edCommand:TedCommand;
      const paraml, param2: Integer): Integer;
  procedure JvHidDeviceController1ScanDevices;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 ProductName_:string;
  SerialNumber_:widestring;
  VendorName_:widestring;
  Device_:TJvHidDevice;
  ReportID:Byte;
  Data:Pointer;
  Size:Word;
  DriverComponent:Pointer;
   IsUSBMode:Boolean;
   LastCMD_:TedCommand;

implementation

{$R *.dfm}
procedure TForm1.JvHidDeviceController1ScanDevices;
begin
if DriverComponent <> nil then begin
if  (DriverComponent as TComponent).ClassName='TJvHidDeviceController'
then begin (DriverComponent as TJvHidDeviceContro1ler) OnEnumerate:=HidCtlEnumerate;
(DriverComponent as TJvHidDeviceContro1ler).Enumerate;
end
else begin self.AddError('Form1.Init:ClassNameoTJvHidDeviceController') ;
Exit;
end;
end
else begin
self.AddError('Form1.Init: DriverComponent = nil');
Exit;
end;
end;


function TForm1.JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
Var
N: Integer;
PN:String;
begin
PN:= Trim(HidDev.ProductName);
if PN <> '' then begin
if  (PN = 'Card Reader UUS1') then begin
ProductName_:= PN;
SerialNumber_:=HidDev.SerialNumber;
VendorName_:=HidDev.VendorName;
Device_:=HidDev;
end
end;
Result:= True;
end;
function TForm1.JvHidDeviceController1ExecuteCommand(var edCommand: TedCommand; const paraml, param2: Integer): Integer;
var HD:TJvHidDevice;
Buf: array [0..64] of Byte;
Written: Cardinal;
ToWrite: Cardinal;
blockString,sblockString:String;
bN,i:Integer;
begin
Result:=-1;
try
if not (edCommand.Enabled) then
Exit;
edCommand.WORKED:=false;
edCommand.WT:=GetTickCount;
if IsUSBMode then begin
try
LastCMD_:=edCommand;
blockString:=Trim('3E3E3E2B'+edCommand.edClass+edCommand.edCode+edCommand.edLength+edCommand.edParam); //блок отсылки данных соответствующий протоколу обмена верхнего уровня
bN:=Length(Trim(blockString)) div 16;
if ((Length(Trim(blockString))  / 16) -bN)>0 then bN:=bN+1;
while true do begin
if Length(Trim(blockString))>=(bN*16) then break;
blockString:=blockString+' 00';
end;
for i:=0 to bN-1 do begin
sblockString:=Copy(blockString,i*16,16);
SendData8b(sblockString);
end;
LastCMDTime_:=Now;
edCommand.WORKED:=true;
edCommand.WT:=GetTickCount-edCommand.WT;
except on e:Exception do begin result:=-3;
// ======================================
end;
end;
end;
except on e:Exception do begin
result:=-2;
end;
end;
end;
end.
 
теперь собственно вопросы 

1 что такое DriverComponent (var описывал сам и типы переменных могут не совподать )
2 SendData8b(sblockString); не работает в чём причина?

Всем заранее большое спасибо, 
PM MAIL   Вверх
Hexel
Дата 23.10.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 30.10.2007
Где: UA

Репутация: нет
Всего: нет



не могу найти документацию по компоненте. пока что пытаюсь понять все из кода. можно вопрос на засыпку: твой девайс поддерживает HID-протокол, через который ты его собираешься использовать? или я чего-то не понял?
PM MAIL   Вверх
bvv91
Дата 23.10.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Это Я не понял прощу прощения.... мне просто нужна бинарная передача на порт и считывание с порта. А hid  устройство не поддерживает.... Зря только тему создал...

Подскажите если можете как Передать на D+ в USB  бинарную передачу например "1" 

Это сообщение отредактировал(а) bvv91 - 23.10.2009, 15:35
PM MAIL   Вверх
Hexel
Дата 23.10.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 30.10.2007
Где: UA

Репутация: нет
Всего: нет



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

по правде, это больше вопрос к радиотехникам. работа с USB через HID - это небольшая платка с микрухой на 20 выводов. плюс дамп к ней, чтобы она стала хидом, плюс программатор

хотя, конечно, смотря какая задача
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.