Работа с микросхемами от FTDI через интерфейс D2XX в Linux.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Работа с микросхемами от FTDI через интерфейс D2XX в Linux.

Сообщение Mushroomer » 04.12.2017 15:32:05

Здравствуйте.
Два дня изысканий не привели к успеху, решил обратится к специалистам.
Вот пример кода работающий в Windows, но упорно не желающий работать в Linux.
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, dynlibs;

const
{$IFDEF MSWINDOWS}
  NameLib = 'FTD2XX.DLL';
{$ENDIF}
{$IFDEF UNIX}
  NameLib = '/usr/local/lib/libftd2xx.so';
{$ENDIF}

type
  TFT_ListDevices = function(pvArg1:Pointer; pvArg2:Pointer; dwFlags:Dword): integer; stdcall;
  TFT_Open = function(Index:Integer; ftHandle:Pointer): integer; stdcall;
  TFT_Close = function(ftHandle:Dword): integer; stdcall;

  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    fFtHandle: UInt32;
    fLibHandle: THandle;
    FT_ListDevices: TFT_ListDevices;
    FT_Open: TFT_Open;
    FT_Close: TFT_Close;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  NumDevs: UInt16;
begin
  fLibHandle := LoadLibrary(NameLib);

  if fLibHandle <> 0 then
  begin
    FT_ListDevices := TFT_ListDevices(GetProcAddress(fLibHandle, 'FT_ListDevices'));
    if @FT_ListDevices <> nil then
    begin
      FT_Open := TFT_Open(GetProcAddress(fLibHandle, 'FT_Open'));
      FT_Close := TFT_Close(GetProcAddress(fLibHandle, 'FT_Close'));
    end;
  end;

  if FT_ListDevices(@NumDevs, nil, $80000000) = 0 then // Запрос числа FTDI-устройств, подключенных к ПК.
  begin                                                     // Результат запроса в NumDevs.
    if NumDevs > 0 then
    begin
      FT_Open(0, @fFtHandle);
      FT_Close(fFtHandle);
    end;
    FreeLibrary(fLibHandle);
  end;
  Caption := 'Кол-во: ' + IntToStr(NumDevs); // В Linux NumDevs = 0 ???
end;
end.

В Linux NumDevs = 0. А кроме этого после завершения FormCreate: "Процесс вызвал исключение ...."
К сожалению в Linux я пока ржавый чайник.
Библиотека тут: /usr/local/lib/libftd2xx.so

Буду благодарен если поделитесь опытом.
Последний раз редактировалось Mushroomer 11.12.2017 11:49:01, всего редактировалось 1 раз.
Mushroomer
незнакомец
 
Сообщения: 2
Зарегистрирован: 04.12.2017 15:07:39

Re: Работа с микросхемами от FTDI через интерфейс D2XX в Lin

Сообщение ElectroGuard » 09.12.2017 12:26:40

Я так понимаю - что либа не видит девайсов. Врятли проблема на стороне паса, скорее на стороне либы. Нужно с ней разбираться, мне кажется. Поищите ПО, умеющее работать с либой для проверки. Для начала.
ElectroGuard
новенький
 
Сообщения: 51
Зарегистрирован: 03.06.2016 12:10:22

Re: Работа с микросхемами от FTDI через интерфейс D2XX в Lin

Сообщение MysticCoder » 09.12.2017 14:49:06

http://www.ftdichip.com/Drivers/D2XX.htm
скачай дрова, там примеры есть на си, запусти что нить из них для проверки.
MysticCoder
постоялец
 
Сообщения: 117
Зарегистрирован: 14.09.2013 00:20:28

Re: Работа с микросхемами от FTDI через интерфейс D2XX в Lin

Сообщение serbod » 09.12.2017 18:00:34

Вот готовые компоненты, в том числе и для FTDI. Родной D2XX несколько кривой, заточен под единственное устройство в системе.

https://github.com/serbod/dataport
Аватара пользователя
serbod
постоялец
 
Сообщения: 215
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Работа с микросхемами от FTDI через интерфейс D2XX в Lin

Сообщение Mushroomer » 11.12.2017 11:34:41

Добрый день.
Благодарю за ответы.

MysticCoder писал(а):MysticCoder » 09.12.2017 15:49:06

Примеры от производителя запускал - не работают.

serbod писал(а): serbod » 09.12.2017 19:00:34

Спасибо за ссылку, буду разбираться.
Mushroomer
незнакомец
 
Сообщения: 2
Зарегистрирован: 04.12.2017 15:07:39


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Google Adsense [Bot] и гости: 13

Рейтинг@Mail.ru