Перейти к содержанию
Fire Monkey от А до Я
  • 0

пример отправки данных через USB


fsdb

Вопрос

Рекомендуемые сообщения

  • 0

Вот например есть https://github.com/LongDirtyAnimAlf/Delphi-Android-USB-HID  . К сожалению библиотека старая , не использует возможности последний версий API . И, подозреваю, глючная. 

Ссылка на комментарий
  • 0

Я вот кстати пробовал реализовать более простой пример подключения , чем в этой библиотеке. 

 


   //NewUSB:=TUSB.Create;
   FEpOut:=nil;
   Memo1.Lines.Append('Begin');
   if UsbManager=nil then UsbManager:= TJvHidDeviceController.Create(Self); //usbManager = context.getSystemService(Context.USB_SERVICE) as UsbManager
   DeviceList := UsbManager.FUsbManager.getDeviceList;
   iter := DeviceList.values.iterator;
   while iter.hasNext do
    begin
      LocalUSBDevice := TJUSBDevice.Wrap((iter.next as ILocalObject).GetObjectID);
      if (LocalUSBDevice.getVendorId <> VENDOR) or (LocalUSBDevice.getproductId <> PRODUCT) then continue;//continue;
      Memo1.Lines.Append('Stage 1');
      for i:=0 to LocalUsbDevice.getInterfaceCount-1 do
        begin
          Memo1.Lines.Append('Stage 2');
          LocalUsbInterface := LocalUsbDevice.getInterface(0);
          if LocalUsbInterface.getInterfaceClass=3 then break;
        end;

      //Open
    end;
    if NOT UsbManager.UsbManager.hasPermission(LocalUSBDevice) then
    begin

      PermissionIntent:=TJPendingIntent.JavaClass.getBroadcast(SharedActivityContext, 0, TJIntent.JavaClass.init(StringToJString(ACTION_USB_PERMISSION)), 0);
      Filter := TJIntentFilter.JavaClass.init;
      Filter.addAction(StringToJString(ACTION_USB_PERMISSION));
      FBroadcastReceiverListener := TBroadcastReceiverListener.Create(UsbManager);
      FReceiver := TJFMXBroadcastReceiver.JavaClass.init(FBroadcastReceiverListener);
      SharedActivityContext.getApplicationContext.registerReceiver(
          FReceiver,
          Filter);

      UsbManager.UsbManager.requestPermission(LocalUSBDevice,PermissionIntent);
      exit;
    end;


   if LocalUsbInterface=nil then exit
   else Memo1.Lines.Append('Stage 3');
   for I := 0 to LocalUsbInterface.getEndpointCount-1 do
        begin
          FUsbEP := LocalUsbInterface.getEndpoint(i);
          if FUsbEP.getType=3 then
            begin
              if FUsbEP.getDirection = TJUsbConstantsUSB_DIR_OUT then
                begin
                  if FEpOut=nil then FEpOut := FUsbEP;
                end
              else if FUsbEP.getDirection = TJUsbConstantsUSB_DIR_IN then
                begin
                  if FEpIn=nil then FEpIn := FUsbEP;
                end;
            end;
        end;
      if {(EpIn=nil) AND} (FEpOut=nil) then  exit;
      Memo1.Lines.Append('Stage 4');

      // Open device
      FUsbDeviceConnection := UsbManager.UsbManager.openDevice(LocalUSBDevice);
      if not assigned( FUsbDeviceConnection) then exit;
      Memo1.Lines.Append('Stage 5');
      if not FUsbDeviceConnection.claimInterface(LocalUsbInterface, True) then exit;
      Memo1.Lines.Append('Stage 6');
      btnHIDEnable.Enabled := True;
      btnGetSerial.Enabled := True;
      //FUsbDeviceConnection.

Соотвественно, передача делается через

S:=IntToStr(FUsbDeviceConnection.bulkTransfer(FEpOut, Buffer, {Buffer.Length}3, 0));  //можно 0
  Memo1.Lines.Append('Retval = '+S);

Он кстати при подключении пишет, что всё нормально. Но при попытке отправки данных увы, ничего не передаёт. Даже более того, другие программы на Java , запущенные параллельно тоже после моей не могут ничего передать. 

 

Изменено пользователем Андрей Рулин
Ссылка на комментарий
  • 0
 bytes_written := FUsbDeviceConnection.bulkTransfer({FUsbEPBO}FUsbEPII, Buffer, Size, 100);

Что характерно, если так вот записать, то есть пытаться передать данные в не ту EndPoint всё равно выдаёт,что передано 3 байта. Истина, похоже где-то рядом...

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...