Считать статус контактов FT245RL
Извините за мое невежество, но я очень новичок в разработке программного обеспечения для Linux на FTDI-чипах. У меня есть модуль, основанный на микросхеме FT245RL, запрограммированный на 4-портовый выход (реле) и 4-портовый оптоизолированный входной блок. Я узнал в интернет-программе на C, чтобы включить / выключить реле, подключенные к выходам D0-D3. После компиляции все работает нормально. Ниже проект этой рабочей программы:
/* switch4.c
* # gcc -o switch4 switch4.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib
* Usage
* # switch4 [0-15], for example # switch4 1
* */
#include <stdio.h>
#include <stdlib.h>
#include "./ftd2xx.h"
int main(int argc, char *argv[])
{
FT_STATUS ftStatus;
FT_HANDLE ftHandle0;
int parametr;
LPVOID pkod;
DWORD nBufferSize = 0x0001;
DWORD dwBytesWritten;
if(argc > 1) {
sscanf(argv[1], "%d", ¶metr);
}
else {
parametr = 0;
}
FT_SetVIDPID(0x5555,0x0001); // id from lsusb
FT_Open(0,&ftHandle0);
FT_SetBitMode(ftHandle0,15,1);
pkod=¶metr;
ftStatus = FT_Write(ftHandle0,pkod,nBufferSize,&dwBytesWritten);
ftStatus = FT_Close(ftHandle0);
}
Мой вопрос Как я могу прочитать в той же программе, состояние контактов D4 - D7, запрограммированных как входы? Я имею в виду "printf", чтобы выводить число, представляющее состояние (ноль или один) входных контактов (или всех входных / выходных контактов). Кто-нибудь может помочь новичку?
UPDATE-1
Это моя программа с FT_GetBitMode
// # gcc -o read5 read5.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib
#include <stdio.h>
#include <stdlib.h>
#include "./ftd2xx.h"
int main(int argc, char *argv[])
{
FT_STATUS ftStatus;
FT_HANDLE ftHandle0;
UCHAR BitMode;
FT_SetVIDPID(0x5555,0x0001); // id from lsusb
ftStatus = FT_Open(0,&ftHandle0);
if(ftStatus != FT_OK) {
printf("FT_Open failed");
return;
}
FT_SetBitMode(ftHandle0,15,1);
ftStatus = FT_GetBitMode(ftHandle0, &BitMode);
if (ftStatus == FT_OK) {
printf("BitMode contains - %d",BitMode);
}
else {
printf("FT_GetBitMode FAILED!");
}
ftStatus = FT_Close(ftHandle0);
}
Но он возвращает "FT_GetBitMode FAILED!" вместо значения BitMode
2 ответа
FT_GetBitMode возвращает мгновенное значение выводов. Будет возвращен один байт, содержащий текущие значения выводов, как входных, так и выходных.
Наконец я узнал, что происходит не так. Я использовал неверную версию библиотеки ftdi. Правильная версия для платформы x86_64 находится здесь: