Здравствуйте, уважаемые!!! подскажите кто работал с данным компонентом на с++ builder 6
как принимать данные от устройства?
написал не большой тест
Код:
//----------
#include <vcl.h>
#pragma hdrstop
#include "HID_test.h"
//----------
#pragma package(smart_init)
#pragma link "JvHidControllerClass"
#pragma resource "*.dfm"
TForm1 *Form1;
//----------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListBox1->Clear();
}
//----------
void __fastcall TForm1::JvHidDeviceController1DeviceChange(TObject *Sender)
{
if (DevList == NULL){
// создать список устройств
DevList = new TList();
}
else{
// освободить список устройств от всех записей указателей на устройства
for (int i = 0; i < DevList->Count; i++)
((TJvHidDevice *)DevList->Items[i])->Free();
// очистка списка устройств
DevList->Clear();
}
// очистка компонента ListBox от старых записей названий или идентификаторов устройств
ListBox1->Clear();
Form1->Caption = "";
// перечисление всех HID устройств, подключенных к шине USB
JvHidDeviceController1->Enumerate();
}
//----------
bool __fastcall TForm1::JvHidDeviceController1Enumerate(
TJvHidDevice *HidDev, const int Idx)
{
AnsiString S;
// добавление названия или идентификаторов устройства в компонент ListBox
if (HidDev->ProductName != NULL)
ListBox1->Items->Add("Подключено устройство: "
+ HidDev->ProductName);
else
ListBox1->Items->Add(S.sprintf("Device VID=%04X PID=%04X",
HidDev->Attributes.VendorID, HidDev->Attributes.ProductID));
// получение указателя на устройство
JvHidDeviceController1->CheckOutByIndex(Dev, Idx);
// добавление указателя на устройство в список устройств
DevList->Add(Dev);
// инкремент индекса записи
ListBox1->ItemIndex ++;
// получение указателя на устройство из списка устройств
TJvHidDevice *Dev = (TJvHidDevice *)DevList->Items[ListBox1->ItemIndex];
S = "Gersa v2.1";
if (HidDev->ProductName == S){
CurrentDevice = Dev; // активное HID устройство
// число байтов для записи в HID устройство
ToWrite = CurrentDevice->Caps.OutputReportByteLength;
Form1->Caption = HidDev->ProductName; // название устройства
if(CurrentDevice != NULL)
CurrentDevice->OnData = NULL;
if(CurrentDevice->HasReadWriteAccess)
CurrentDevice->OnData = ShowRead;
else
CurrentDevice->OnData = NULL;
}
return(true);
}
//----------
void __fastcall TForm1::ShowRead(TJvHidDevice *HidDev,
BYTE ReportID, const void *Data, unsigned __int16 Size)
{
char *P;
P = (char *) Data;
CurrentDevice->ReadFile(BufIn, 4, BytesRead);
ListBox1->Items->SetText(BufIn);
}
//----------
void __fastcall TForm1::JvHidDeviceController1DeviceData(
TJvHidDevice *HidDev, BYTE ReportID, const Pointer Data, WORD Size)
{
char *P;
P = (char *) Data;
if(CurrentDevice != NULL)
{
ListBox1->Items->Add(P[0]+P[1]+P[2]+P[3]);
}
}
//----------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
BufOut[0] = 0x01; // ? ??????? HID ?????????? REPORT_ID = 0x77
BufOut[1] = 'R';
BufOut[2] = 'c';
BufOut[3] = '\0';
if(CurrentDevice != NULL)
CurrentDevice->WriteFile(BufOut, ToWrite, Written);
}
//----------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
BufOut[0] = 0x01; // ? ??????? HID ?????????? REPORT_ID = 0x77
BufOut[1] = 'S';
BufOut[2] = 'n';
BufOut[3] = '\0';
if(CurrentDevice != NULL)
CurrentDevice->WriteFile(BufOut, ToWrite, Written);
}
//----------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
ListBox1->Items->Add(IntToStr(BytesRead));
}
//----------
void __fastcall TForm1::JvHidDeviceController1DeviceDataError(
TJvHidDevice *HidDev, DWORD Error)
{
MessageDlg("?????? ?????? ?? HID. GetLastError=" +
IntToStr(GetLastError), mtError, TMsgDlgButtons() << mbOK, 0);
}
//----------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Interval=50;
Timer1->Enabled;
/*
if(CurrentDevice != NULL)
{
CurrentDevice->ReadFile(BufIn, 4, BytesRead);
if(BufIn=="") {ListBox1->Items->SetText("mm\n");}
else
{
ListBox1->Items->Add(BufIn[0]+BufIn[1]+BufIn[2]+BufIn[3]);
}
}
*/
}
//----------
устройство определяется, передача работает(МК принимает данные как надо),а с приемом засада (не вижу данных от МК):o