Sprawdzenie stanu na rs232

0

Witam!
Wytlumaczenie na MSDN nie za bardzo do mnie przemawia w przypadku sprawdzenia
stanu napiecia (sygnalu logicznego) na jakims pinie na rs232.
Jesli chodzi o wyslanie to robie np.

//wlaczenie DTR
EscapeCommFunction(hCom,SETDTR);

a jak sprawdzic np RING (pin 9) za pomoca

GetCommState(hCom, ??? );

Z gory dziekuje.

0

Za pomoca tej (GetCommState) funkcj raczej sie nie da. Ona okresla konfiguracje portu dla transmisji RS-232 (mozna powiedziec zakladka Port Settings w Device Manager).

0

Dzieki za ta uwage-faktycznie.
Czy mozna to zrobic za pomoca SetCommMask ?
Mnie interesuje np.sprawdzenie stanu na CTS

EV_RXCHAR = 1 - odebrany i umieszczony w kolejce odbiornika dowolny znak ; EV_RXFLAG = 2 - odebrany i umieszczony w kolejce odbiornika znak oznaczony w strukturze Dcb jako flagowy ; EV_TXEMPTY = 4 - wysłano ostatni znak z kolejki nadajnika ; EV_CTS = 8 - uległ zmianie stan linii Cts ; EV_DSR = $10 - uległ zmianie stan linii Dsr ; EV_RLSD = $20 - uległ zmianie stan linii Rlsd ; EV_BREAK = $40 - wykryto na wejściu sygnał Break ; EV_ERR = $80 - został wykryty błąd linii ( ramka, przepełnienie albo parzystość - CE_FRAME , CE_OVERRUN , CE_RXPARITY ) ; EV_RING = $100 - wykryty sygnał dzwonka ; EV_RX80FULL = $200 - kolejka odbiornika zastała wypełniona w 80 % .

Uruchamiam wiec w petli

   if (!SetCommMask(hCom, EV_CTS))
       {
        ...
        }
         else
              {
               ...
               }

Niestety mam zupelny brak reakcji... Czy dalej robie cos zle?

0

mozna w petli ale jak chcesz tylko sprawdzac to

popatrz na
(Serial Device Control Requests)
http://msdn2.microsoft.com/en-us/library/ms800933.aspx

oraz na
(DeviceIoControl Function)
http://msdn2.microsoft.com/en-us/library/aa363216.aspx

0
#define IOCTL_SERIAL_GET_MODEMSTATUS    0x1B0068 // ntddser.h
#define IOCTL_SERIAL_GET_DTRRTS         0x1B0078

#define SERIAL_DTR_STATE         (0x00000001) // IOCTL_SERIAL_GET_DTRRTS
#define SERIAL_RTS_STATE         (0x00000002) // IOCTL_SERIAL_GET_DTRRTS
#define SERIAL_CTS_STATE         (0x00000010)
#define SERIAL_DSR_STATE         (0x00000020)
#define SERIAL_RI_STATE          (0x00000040)
#define SERIAL_DCD_STATE         (0x00000080)

DWORD m_ModemStatus;
DeviceIoControl(m_hComPort, IOCTL_SERIAL_GET_MODEMSTATUS, NULL,0, &m_ModemStatus,4, &bytesReturned, 0);

Sprawdzone, działa!

0

wielkie dzieki!! informacje okazaly sie bardzo pomocne. Wszystko dziala!

1 użytkowników online, w tym zalogowanych: 0, gości: 1