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

device_filter.xml


Андрей Рулин

Вопрос

Устанавливая в device_filter.xml устройство, с которым хочу работать. Например для PicKIT3  ставлю

<usb-device vendor-id="1240" product-id="36874"/> 

После этого при подключении данного устройства он предлагает выполнить мою программу.  Это было ожидаемый результат.  Неожидаемый результат, что если не прописать это устройство, то например выдаётся

Device VID=04D8 PID=900

А если устройство прописать, то выдаётся хрень вида

                  (Serial=                        )

 

Это что, особенность планшета? Или это потому, что я к нему не правильно подключился? Или я как-то в лог могу неправильно записывать то, что он прислал? 

 

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

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

  • 0

Приведу куски кода, которые , собственно эту хрень и вызывают.

function THidServer.DeviceName(HidDev: TJvHidDevice): string;
begin
  if HidDev.ProductName <> '' then
    Result := HidDev.ProductName
  else
    Result := Format('Device VID=%.4x PID=%.4x',
      [HidDev.Attributes.VendorID, HidDev.Attributes.ProductID]);
  if HidDev.SerialNumber <> '' then
    Result := Result + Format(' (Serial=%s)', [HidDev.SerialNumber]);
end;


Соотвественно HidDev.ProductName и HidDev.SerialNumber  получаем так

function TJvHidDevice.GetProductName: String;
begin
  if FProductName = '' then
  begin
    FProductName := GetDeviceString(2);
    //FProductName := JStringToString(FUsbDevice.getDeviceName);
  end;
  Result := FProductName;
end;

function TJvHidDevice.GetSerialNumber: String;
begin
  if FSerialNumber = '' then
  begin
    FSerialNumber:=GetDeviceString(3);
    //if Openfile then FSerialNumber:=JStringToString(FUsbDeviceConnection.getSerial);
  end;
  Result := FSerialNumber;
end;

 

Наконец GetDeviceString - это вот что:


function TJvHidDevice.GetDeviceString(Idx: Byte): string;
const
  STD_USB_REQUEST_GET_DESCRIPTOR = $06;
  STD_USB_REQUEST_GET_REPORT = $01;
  LIBUSB_FEATURE_REPORT = $0301; //Feature report, ID = 1
  LIBUSB_DT_STRING = $03;
var
  i,rdo:integer;
  rawDescs,buffer : TJavaArray<Byte>;
  requestidx:integer;
  S : String;
begin

  if Openfile then
  begin
    rawDescs := FUsbDeviceConnection.getRawDescriptors;

    if (13+Idx)>rawDescs.Length then
    begin
      result:='';
      exit;
    end;

    requestidx := rawDescs[13+Idx];

    rawDescs.Free;

    buffer := TJavaArray<Byte>.Create(255);

    rdo := FUsbDeviceConnection.controlTransfer(
           (TJUsbConstantsUSB_DIR_IN	OR TJUsbConstantsUSB_TYPE_STANDARD),
           STD_USB_REQUEST_GET_DESCRIPTOR,
           ((LIBUSB_DT_STRING SHL 8) OR requestidx),
           0,
           buffer,
           $FF,
           0);

    if rdo>100 then rdo:=100;

    if rdo<3 then
    begin
      result:='';
      exit;
    end;

    S:='';
    for i:=1 to (rdo-2) do
    begin
      S:=S+Char(buffer.Items[i+1]);
    end;
    result:=S;
    buffer.Free;
  end
  else result:='';
end;


 

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

Arrival of  #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 (Serial= #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0 #0)

 

 

Изменено пользователем Андрей Рулин
дополнение
Ссылка на комментарий
  • 0

В итоге для определеления имени продукта изменил код на

FProductName := JStringToString(FUsbDevice.getProductName); 

Вместо

Цитата

 FProductName := GetDeviceString(2);
    //FProductName := JStringToString(FUsbDevice.getDeviceName);

Серийный номер так и не получилось получать. 

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

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

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

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

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

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

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

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

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

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

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