|
|
  |
Удалось ли кому-то использовать обертку, для hidapi (например hidapi-0.7.0), нужна помощь |
|
|
|
Sep 24 2012, 14:28
|

Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480

|
Цитата(smk @ Sep 24 2012, 15:40)  Подскажите как заставить работать пример или может поможет кто сделать новый проект на этой основе? Спасибо.
hidapi_0.7.0.zip ( 1.56 мегабайт )
Кол-во скачиваний: 77Скачал зпустил, проект собрался вообще без вопросов. Использовал VS 2008 WinXpSP3 с уже установленным Win DDK. Сам использовал вот это чудо http://www.pjrc.com/teensy/rawhid.htmlПросто и со вкусом, для него нужно установить Win DDK. Что то мне подсказывает, что и Вашем случае не хватает DDK.
|
|
|
|
|
Sep 27 2012, 15:50
|

Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480

|
Цитата(smk @ Sep 25 2012, 09:58)  Поставил WDK 7.1, все собралось. Спасибо. Вопрос в том, будет ли программа для общения с HID, изготовленная под ХР работать под 2000? Должно работать, но надо пробовать. Если принять во внимание, что Хиду уже сто лет в обед, то врядли там поменяли интерфейс.
|
|
|
|
|
Oct 1 2012, 12:14
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(smk @ Sep 25 2012, 11:58)  Вопрос в том, будет ли программа для общения с HID, изготовленная под ХР работать под 2000? Смотря какие api функции Вы будете использовать: w2k не поддерживает HidD_GetInputReport/HidD_SetOutputReport/HidD_GetMsGenreDescriptor
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Jan 12 2013, 17:07
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата(Pat @ Sep 24 2012, 16:28)  Скачал зпустил, проект собрался вообще без вопросов. Использовал VS 2008 WinXpSP3 с уже установленным Win DDK. Сам использовал вот это чудо http://www.pjrc.com/teensy/rawhid.htmlПросто и со вкусом, для него нужно установить Win DDK. Что то мне подсказывает, что и Вашем случае не хватает DDK. А как Вы его используете? Там же под АВРки исходники или я что-то не увидел? Попробовал http://embedded24.net/index.html Получается, но как я понимаю это нужно покупать иначе жди подвоха. В связи с моими симпатиями к VS2010 C# можно узнать кто чем пользуется для работы с USB HID в приложениях Windows Form? Буду благодарен за пример.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 17 2013, 05:14
|
Знающий
   
Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163

|
Feature Report я не использую, а примеров хватает в этом самом проекте. Вот так у меня делается енумерация: Код private void RefreshDevices() { devices.Clear();
if ((selectedDevice != null) && selectedDevice.IsOpen) selectedDevice.CloseDevice();
foreach (HidDevice dev in HidDevices.Enumerate(0x1FC9, 0x204F)) { MyUsbDevice newDevice = new MyUsbDevice(); newDevice.device = dev; newDevice.hasSerial = false; newDevice.serialId = "";
devices.Add(newDevice); }
foreach (MyUsbDevice dev in devices) { if (!dev.hasSerial) { dev.device.OpenDevice(); DeviceReadSerial(dev); dev.device.CloseDevice(); } }
comboBox1.Items.Clear(); int index = 0; foreach (MyUsbDevice dev in devices) { if (dev.hasSerial) { UsbDeviceInfo inf = new UsbDeviceInfo(); inf.index = index; inf.info = "Redut RS-232 #" + dev.serialId; comboBox1.Items.Add(inf); } index++; }
if (comboBox1.Items.Count > 0) comboBox1.SelectedIndex = 0; } Как видно, енумерация непростая: на одном VID/PID могут сидеть несколько девайсов, поэтому дополнительно запрашивается инфа о номере устройства. Вот примерно так по мнению автора проекта обслуживается устройство: Код private void Devices_SelectedIndexChanged(object sender, EventArgs e) { UsbDeviceInfo item = (UsbDeviceInfo)comboBox1.SelectedItem;
int index = item.index;
try { MyUsbDevice dev = devices[index]; selectedDevice = dev.device; selectedDevice.OpenDevice();
Output.AppendText(">USB device opened\r\n");
selectedDevice.MonitorDeviceEvents = true; selectedDevice.Inserted += Device_Inserted; selectedDevice.Removed += Device_Removed;
selectedDevice.ReadReport(ReadProcess); } catch (Exception) { RefreshDevices(); } }
private void ReadProcess(HidReport report) { BeginInvoke(new ReadHandlerDelegate(ReadHandler), new object[] { report }); }
private void ReadHandler(HidReport report) { if(selectedDevice == null) return;
if(!selectedDevice.IsOpen) return;
if(!selectedDevice.IsConnected) return;
//configuration packet if (report.Data[0] == 2) { int length = report.Data[1];
Output.AppendText("<data: 02 " + length);
for (int i = 0; i < length; i++) { Output.AppendText("" + (char)(report.Data[i + 2])); }
Output.AppendText("\r\n"); }
//virtual UART packet if (report.Data[0] == 0) { int length = report.Data[1];
Output.AppendText("<data: 00 " + length); String data = "";
for (int i = 0; i < length; i++) { data += (char)(report.Data[i + 2]); }
Output.AppendText(data); Output.AppendText("\r\n");
if(Linked) serialPort1.Write(report.Data, 2, length); }
//Redut packet if (report.Data[0] == 1) { int length = report.Data[1];
Output.AppendText("<data: 01 " + length);
for (int i = 0; i < length; i++) { Output.AppendText(String.Format("{0:X2}", report.Data[i + 2])); }
Output.AppendText("\r\n");
if (Linked) { serialPort1.Write(report.Data, 2, length);
Output.AppendText(">port: ");
for (int i = 0; i < length; i++) { Output.AppendText(String.Format("{0:X2}", report.Data[i + 2])); }
Output.AppendText("\r\n"); } }
selectedDevice.ReadReport(ReadProcess); }
private void Device_Inserted() { if (InvokeRequired) { BeginInvoke(new Action(Device_Inserted)); return; }
if (selectedDevice == null) return;
if (!selectedDevice.IsOpen) selectedDevice.OpenDevice();
selectedDevice.ReadReport(ReadProcess);
if (Linked) { if (!serialPort1.IsOpen) { serialPort1.Open(); //serialPort1.DiscardInBuffer(); //serialPort1.DiscardOutBuffer(); Output.AppendText(">Serial port opened\r\n"); } }
Output.AppendText(">Connected\r\n"); }
private void Device_Removed() { if (InvokeRequired) { BeginInvoke(new Action(Device_Removed)); return; }
if (Linked) { serialPort1.Close(); }
Output.AppendText(">Disconnected\r\n");
if (selectedDevice != null) { selectedDevice.CloseDevice(); Output.AppendText(">Serial port closed\r\n"); } } Не очень удобно, но вполне работоспособно.
|
|
|
|
|
Jan 19 2013, 12:25
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Код //virtual UART packet if (report.Data[0] == 0) { int length = report.Data[1];
Output.AppendText("<data: 00 " + length); String data = "";
for (int i = 0; i < length; i++) { data += (char)(report.Data[i + 2]); }
Output.AppendText(data); Output.AppendText("\r\n");
if(Linked) serialPort1.Write(report.Data, 2, length); }
//Redut packet if (report.Data[0] == 1) { int length = report.Data[1];
Output.AppendText("<data: 01 " + length);
for (int i = 0; i < length; i++) { Output.AppendText(String.Format("{0:X2}", report.Data[i + 2])); }
Output.AppendText("\r\n");
if (Linked) { serialPort1.Write(report.Data, 2, length);
Output.AppendText(">port: ");
for (int i = 0; i < length; i++) { Output.AppendText(String.Format("{0:X2}", report.Data[i + 2])); }
Output.AppendText("\r\n"); } } Эти части кода как я понимаю, не являются необходимыми? А вот такая штука Вам не попадалась?
USB_Generic_HID_reference_application_3_0_0_0.zip ( 99.36 килобайт )
Кол-во скачиваний: 73
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|