Admin |
Отправлено: 10.07.2006, 13:05 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Множество устройств разрабатывается с помощью микросхем FTDI.
Для работы с USB-портом в C++Builder для них есть соответствующие библиотеки:
http://ftdichip.com/Drivers/D2XX.htm
это необходимые файлы: Ftd2xx.dll Ftd2xx.lib Ftd2xx.h
Но C++Builder ругается на несовместимость с библиотекой FTD2XX.lib.
Делаем её совместимой:
1/ Из папки bin где установлен C++Builder (у меня это C:\Program Files\Borland\CBuilder6\Bin) копируем в папку с этими библиотеками
файлы implib.exe и impdef.exe
2/ Из командной строки запускаем>impdef.exe Ftd2xx Ftd2xx
создав этим файл Ftd2xx.def
3/ Из командной строки запускаем>implib.exe -f Ftd2xx.lib Ftd2xx.dll
создав файл Ftd2xx.lib совместимый с C++Builder
Проверяем совместимость:
Создаем в С++Builder новый проект, подключаем к нему
Ftd2xx.lib указав этот файл в меню Project->Add to project
Пишем код:
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "FTD2XX.H"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
FT_STATUS ftStatus;
DWORD numDevs=0;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ftStatus = FT_ListDevices(&numDevs, NULL, FT_LIST_NUMBER_ONLY);
if(ftStatus == FT_OK){
ShowMessage("FT_ListDevices Ok !");
ShowMessage(numDevs);
}else{
ShowMessage("FT_ListDevices Failed !");
}
}
//---------------------------------------------------------------------------
|
Запускаем компиляцию.
Если все откомпилилось и запустилось — библиотека подключена успешно.
Также можно почитать:
http://www.filur.net/PDF/FTDI/stat/D2xx.htm
http://www.efo.ru/cgi-bin/go?0009091046
Отредактировано Admin — 10/07/2006, 13:11
|
|
klen |
Отправлено: 12.07.2006, 22:03 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Вставлю свой пятак, благо с рождения FTDI мучаемся с микрухами и много шишек набили
Коротко.
1. Идущий с драйверами .lib не точтобы не совместим с CBuilder (как раз с ним то совместим) а несоместим с .dll. Причина банальна — драйверы пишут по заказу FTDI сторонние изобретатели, причем периодически разны. либы как показала практика обычно не соответствуют содержимому dll. Детальный анализ показывает что часть функций в родной lib оформлены не ввидк ссылок на dll а ввиде скомпилированного кода и предствляют повторную реализацию того что в dll. Причем они отличаются и это приводит к глюкам.
2. Приведенный выше метод решает только часть проблем. Например собранная пророграмма с либой генеренной от одной версии dll может начать глючит на другой машине с другой версией dll. Причина — различные наборы экспортируемых функций в различных версиях dll.
3. Я избавился от постоянных глюков только ОДНИМ способом — непосредственно читать адреса функций из dll не используя никаких либов. Тоесть использую класс врапер который в конструкторе дергает все функции из загруженной dll.
3. На лицо бардак, но FT2233 уже почти без внутренней жизни.
Тема актуальна, давайте обсуждать.
Отредактировано klen — 12/07/2006, 22:08 |
|
Schumi |
Отправлено: 18.07.2006, 08:56 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
я всегда со своим приложением ложу длл. Тогда проблем со статической линковкой не будет.
Хотя я загружаю динамически длл...
И еще — по части vcp. По умолчанию ставится скорость 4 кб/c. Как выставить при установки драйвера скорость 115200. В реестре не нашел где хранится. Всякие там MinReadTimeout, LatencyTimer есть, а вот нужного нет.
Отредактировано Schumi — 18/07/2006, 09:11
|
|
klen |
Отправлено: 31.07.2006, 12:30 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
QUOTE (Schumi @ 18/07/2006, 08:56) | И еще — по части vcp. По умолчанию ставится скорость 4 кб/c. Как выставить при установки драйвера скорость 115200. В реестре не нашел где хранится. Всякие там MinReadTimeout, LatencyTimer есть, а вот нужного нет. |
Непонятно что такое по умолчанию??
Вы когда устройство открываете, Вы же его по любому конфигурите, втом числе и скорость. Какая разница что там по умолчанию драйверы ставят — пишите всегда явно то что нужно и все. |
|
Schumi |
Отправлено: 03.08.2006, 13:38 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Ээээ. Да чего — то загнул. Какой-то глюк был.
А еще байда — виртуальный порт через FTDI вместе с пзу. Там забит серийный номер. Возникает вопрос, как сопоставить порт и серийник.
Программа должна открывать только свой порт.
Понятно, что когда подключен только один порт — просто: получаем список пдключенных устройств, если одно — читаем серийник и все оки.
А когда несколько — список номеров вирт. портов определить могу, ладно.
Соответственно порядковый номер устройства FTDI с заданным серийником напрямую через драйвер тоже узнать могу.
А как их сопоставить?
Точнее, всегда ли будет соответствовать — меньший номер виртуального порта и порядковый номер устройства в списке USB.
В XP то всегда она создает порт, а вот в 98 нет — есть у меня также устройства ftdi, но с другим vid/pid, для которых просто устанавливается usb-устройства без вирт. порта
|
|