Привет, я пишу небольшой код для управления линиями DTR и RTS микросхемы преобразователя USB в последовательный порт FT232 в Linux (Mint Linux 13 Maya, x86).
Я успешно написал код для чтения и записи данных на микросхему FT232 с помощью termios. Теперь я хочу управлять линиями DTR и RTS, поэтому я использую вызов ioctl() для установки и очистки линий DTR и RTS.
вот код
#include <stdio.h>
#include <fcntl.h> /* File Control Definitions */
#include <termios.h> /* POSIX Terminal Control Definitions */
#include <unistd.h> /* UNIX Standard Definitions */
#include <errno.h> /* ERROR Number Definitions */
#include <sys/ioctl.h> /* ioctl() */
main(void)
{
int fd; /*File Descriptor*/
int status;
fd = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY ); //Opening the serial port
ioctl(fd,TIOCMGET,&status); /* GET the State of MODEM bits in Status */
status |= TIOCM_RTS; // Set the RTS pin
ioctl(fd, TIOCMSET, status);
getchar(); //To view the change in status pins before closing the port
close(fd);
}
Код успешно компилируется на gcc без каких-либо ошибок. Я подключил два светодиода к линиям RTS и DTR FT232. Поскольку линии RTS и DTR перевернуты, установка RTS отключит светодиод. Светодиоды, подключенные к RTS и DTR, изначально включены.
При запуске кода с использованием «sudo ./serial»
светодиоды RTS и DTR гаснут, а не только RTS (как кодируется статус |= TIOCM_RTS;) и включаются после getchar().
Почему DTR становится НИЗКИМ вместе с линией RTS? также я не могу изменить другие линии модема, такие как RI, DCD, DCD, DTR и т. д., используя TIOCM_CD, TIOCM_DTR и т. д.?