Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > libubs usb термометр. перевод кода на delphi


Автор: maloicds 26.2.2012, 00:53
Всем привет. Есть схема usb термометра и к ней программа USB Thermometer написанная на с++ (как я понимаю). Подробности http://kibermaster.net/mnogokanalnyiy-usb-termometr/. В http://kibermaster.net/wp-content/uploads/blogs_files/mnogokanalnyiy-usb-termomet/USBThermometer_V2.rar исходники прошивки мк и программы для пк. Пытаюсь софт переписать на Delphi с использованием libusb. Начал с простого. Включение (выключение) каналов. В интеренте нашел только код инициализации устройства. Всё остальное идёт для HID устройств.
Код

function USBDeviceOpen(var devhandle:pusb_dev_handle;VID, PID: word): bool;
var
  bus: pusb_bus;
  dev: pusb_device;
begin
  usb_init;
  usb_find_busses;
  usb_find_devices;
  bus := usb_get_busses;
  Result := false;
  while Assigned(bus) do
    begin
      dev := bus^.devices;
      while Assigned(dev) do
        begin
          if (dev.descriptor.idVendor = VID) and (dev.descriptor.idProduct = PID) then
          begin
            devhandle := usb_open(dev);
            Result := true;
          end;
          dev := dev^.next
        end;
      bus := bus^.next;
    end;
end;


Дальше делаю так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  res: byte;
  Buffer: array [0..63] of byte;
  udev: pusb_dev_handle;
begin
  if USBDeviceOpen(udev,$0000, $10B0) = true then
  begin
    res := usb_set_configuration(udev, 1);
    if res = 0 then
      begin
        res := usb_claim_interface(udev, 0);
        if res = 0 then
          begin
            Form1.Memo1.Lines.Add('Connection OK');
            usb_bulk_write(udev,  USB_ENDPOINT_OUT, Buffer, 64, 100);
            usb_release_interface(udev, 0);
            usb_close(udev);
          end;
      end;
  end;
end;

Что писать в функции usb_bulk_write я не знаю. Естественно и как получить значения температуры и номера датчиков тоже  smile . Нужна помощь!!

Автор: Pr0100Man 22.12.2013, 21:43
Тоже начал биться над этой темой, подскажите пожалуйста удалось ли вам написать программу на Delphi?

Автор: Alexeis 23.12.2013, 10:21
  У меня работает связь через Libusb, по bulk . Вообще, maloicds по логике делал все правильно, нужно смотреть коды ошибок. Для тестов можно использовать его код.

Автор: Romikgy 24.12.2013, 13:07
код показан дельфовый , а вопрос по коду в МК .... 

Автор: Pr0100Man 26.12.2013, 19:11
Вот я тоже скачал LibUSB но додуматься не могу... если все исправно работает подилитесь пожалуйста кодом!! smile  а то верхний пример вроде работает а вроде нет )) на массив почему то ругается ))) и вот на res := usb_set_configuration(udev, 1); 

Автор: Alexeis 27.12.2013, 13:27
  Нууу в этом разделе обучать основам языка Object Pascal никто не будет. Открываем описание функции usb_set_configuration в модуле libusb, читаем какой тип оно хочет, делаем переменную соответствующего типа. Тоже самое с функцией usb_bulk_write . У меня вообще, код на С++, так что как там в делфи назвали соответствующие типы данных загадка.  Может вместо 

usb_bulk_write(udev,  USB_ENDPOINT_OUT, Buffer, 64, 100);

usb_bulk_write(udev,  USB_ENDPOINT_OUT, @Buffer[0], 64, 100);

В делфи есть разные правильные варианты как описать одну и ту же функцию С++, можно через массив, можно через указатель или даже через var параметр.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)