Проблема с настройкой контактов DTR RTS последовательного порта с использованием вызова ioctl() в Linux

Привет, я пишу небольшой код для управления линиями 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 и т. д.?


person rohkumarj    schedule 28.12.2014    source источник


Ответы (1)


Для команды TIOCMSET отправьте последний параметр в качестве ссылки:

ioctl(fd, TIOCMSET, &status);
person istirbu    schedule 17.08.2015