Страниц: [1]
  Печать  
Автор Тема: Как узнать состояние CTS, DSR  (Прочитано 3517 раз)
vadim_omsk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« : Февраля 20, 2003, 05:28:00 pm »

При разработке программы возникла необходимость считывать состояние сигналов CTS, DSR, RI и управлять DTR, RTS.
С управлением я разобрался через system("stty +DTR </dev/serN").
Как правильно считать состояние входных сигналов?
Смотрел ioctl(...) и tcgetattr(...), но задачу решить не смог.
Посмотреть состояния можно через ту же system("stty..."), но из нее я не знаю как получить значение.
Не дайте пропасть, подскажите, КАК?
[addsig]
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Февраля 20, 2003, 06:40:00 pm »


Не дайте пропасть, подскажите, КАК?

dcmd_chr.h

#define DCMD_CHR_LINESTATUS      __DIOF(_CMD_IOCTL_TTY, 106, int)         /* TIOCMGET */
   #define _LINESTATUS_SER_DTR         0x0001                        /* TIOCM_DTR */
   #define _LINESTATUS_SER_RTS         0x0002                        /* TIOCM_RTS */
   #define _LINESTATUS_SER_CTS         0x1000                        /* TIOCM_CTS */
   #define _LINESTATUS_SER_DSR         0x2000                        /* TIOCM_DSR */
   #define _LINESTATUS_SER_RI         0x4000                        /* TIOCM_RI */
   #define _LINESTATUS_SER_CD         0x8000                        /* TIOCM_CD */

с использованием devctl + DCMD_CHR_LINESTATUS или ioctl + TIOCMGET.
Записан

vlad
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #2 : Февраля 20, 2003, 06:48:00 pm »


vadim_omsk пишет:
При разработке программы возникла необходимость считывать состояние сигналов CTS, DSR, RI и управлять DTR, RTS.
С управлением я разобрался через system("stty +DTR </dev/serN").
Как правильно считать состояние входных сигналов?
Смотрел ioctl(...) и tcgetattr(...), но задачу решить не смог.
Посмотреть состояния можно через ту же system("stty..."), но из нее я не знаю как получить значение.
Не дайте пропасть, подскажите, КАК?

Если я правильно помню, у Вас QNX4.25?!
Вот что "выдрал" из старых записей:
------------------------------------------
qnx_ioctl(int fildes, unsigned request, const void* sbuf, unsigned sbytes, void* rbuf, unsigned rbytes);

где fildes - дескриптор порта;
   request = QCTL_DEV_CTL;
   long sbuf[2]:
              sbuf[0] - bits;
              sbuf[1] - mask;
   long rbuf - oldbits

правило модификации :
newbits = (oldbits & ~mask) | (bits & mask)

для Dev.ser mask (номера битов):
0 - DTR;
1 - RTS;
20 - CTS;
21 - DSR;
22 - RI;
23 - CD.
------------------------------------------

[ Это Сообщение было отредактировано: vlad в 2003-02-20 15:54 ]
Записан
Страниц: [1]
  Печать  
 
Перейти в: