00001
00078 #ifndef _RTSERIAL_H
00079 #define _RTSERIAL_H
00080
00081 #include <rtdm/rtdm.h>
00082
00087 #define RTSER_DEF_BAUD 9600
00088
00094 #define RTSER_NO_PARITY 0x00
00095 #define RTSER_ODD_PARITY 0x01
00096 #define RTSER_EVEN_PARITY 0x03
00097 #define RTSER_DEF_PARITY RTSER_NO_PARITY
00098
00104 #define RTSER_5_BITS 0x00
00105 #define RTSER_6_BITS 0x01
00106 #define RTSER_7_BITS 0x02
00107 #define RTSER_8_BITS 0x03
00108 #define RTSER_DEF_BITS RTSER_8_BITS
00109
00115 #define RTSER_1_STOPB 0x00
00116
00117 #define RTSER_1_5_STOPB 0x01
00118 #define RTSER_2_STOPB 0x01
00119 #define RTSER_DEF_STOPB RTSER_1_STOPB
00120
00126 #define RTSER_NO_HAND 0x00
00127 #define RTSER_RTSCTS_HAND 0x01
00128 #define RTSER_DEF_HAND RTSER_NO_HAND
00129
00135 #define RTSER_FIFO_DEPTH_1 0x00
00136 #define RTSER_FIFO_DEPTH_4 0x40
00137 #define RTSER_FIFO_DEPTH_8 0x80
00138 #define RTSER_FIFO_DEPTH_14 0xC0
00139 #define RTSER_DEF_FIFO_DEPTH RTSER_FIFO_DEPTH_1
00140
00146 #define RTSER_TIMEOUT_INFINITE RTDM_TIMEOUT_INFINITE
00147 #define RTSER_TIMEOUT_NONE RTDM_TIMEOUT_NONE
00148 #define RTSER_DEF_TIMEOUT RTDM_TIMEOUT_INFINITE
00149
00155 #define RTSER_RX_TIMESTAMP_HISTORY 0x01
00156 #define RTSER_DEF_TIMESTAMP_HISTORY 0x00
00157
00163 #define RTSER_EVENT_RXPEND 0x01
00164 #define RTSER_EVENT_ERRPEND 0x02
00165 #define RTSER_EVENT_MODEMHI 0x04
00166 #define RTSER_EVENT_MODEMLO 0x08
00167 #define RTSER_DEF_EVENT_MASK 0x00
00168
00175 #define RTSER_SET_BAUD 0x0001
00176 #define RTSER_SET_PARITY 0x0002
00177 #define RTSER_SET_DATA_BITS 0x0004
00178 #define RTSER_SET_STOP_BITS 0x0008
00179 #define RTSER_SET_HANDSHAKE 0x0010
00180 #define RTSER_SET_FIFO_DEPTH 0x0020
00181 #define RTSER_SET_TIMEOUT_RX 0x0100
00182 #define RTSER_SET_TIMEOUT_TX 0x0200
00183 #define RTSER_SET_TIMEOUT_EVENT 0x0400
00184 #define RTSER_SET_TIMESTAMP_HISTORY 0x0800
00185 #define RTSER_SET_EVENT_MASK 0x1000
00186
00193 #define RTSER_LSR_DATA 0x01
00194 #define RTSER_LSR_OVERRUN_ERR 0x02
00195 #define RTSER_LSR_PARITY_ERR 0x04
00196 #define RTSER_LSR_FRAMING_ERR 0x08
00197 #define RTSER_LSR_BREAK_IND 0x10
00198 #define RTSER_LSR_THR_EMTPY 0x20
00199 #define RTSER_LSR_TRANSM_EMPTY 0x40
00200 #define RTSER_LSR_FIFO_ERR 0x80
00201 #define RTSER_SOFT_OVERRUN_ERR 0x0100
00202
00209 #define RTSER_MSR_DCTS 0x01
00210 #define RTSER_MSR_DDSR 0x02
00211 #define RTSER_MSR_TERI 0x04
00212 #define RTSER_MSR_DDCD 0x08
00213 #define RTSER_MSR_CTS 0x10
00214 #define RTSER_MSR_DSR 0x20
00215 #define RTSER_MSR_RI 0x40
00216 #define RTSER_MSR_DCD 0x80
00217
00224 #define RTSER_MCR_DTR 0x01
00225 #define RTSER_MCR_RTS 0x02
00226 #define RTSER_MCR_OUT1 0x04
00227 #define RTSER_MCR_OUT2 0x08
00228 #define RTSER_MCR_LOOP 0x10
00229
00235 typedef struct rtser_config {
00237 int config_mask;
00238
00240 int baud_rate;
00241
00243 int parity;
00244
00246 int data_bits;
00247
00249 int stop_bits;
00250
00252 int handshake;
00253
00255 int fifo_depth;
00256
00258 nanosecs_rel_t rx_timeout;
00259
00261 nanosecs_rel_t tx_timeout;
00262
00264 nanosecs_rel_t event_timeout;
00265
00267 int timestamp_history;
00268
00271 int event_mask;
00272 } rtser_config_t;
00273
00277 typedef struct rtser_status {
00279 int line_status;
00280
00282 int modem_status;
00283 } rtser_status_t;
00284
00288 typedef struct rtser_event {
00290 int events;
00291
00293 int rx_pending;
00294
00296 nanosecs_abs_t last_timestamp;
00297
00299 nanosecs_abs_t rxpend_timestamp;
00300 } rtser_event_t;
00301
00302
00303 #define RTIOC_TYPE_SERIAL RTDM_CLASS_SERIAL
00304
00305
00309 #define RTDM_SUBCLASS_16550A 0
00310
00335 #define RTSER_RTIOC_GET_CONFIG \
00336 _IOR(RTIOC_TYPE_SERIAL, 0x00, struct rtser_config)
00337
00365 #define RTSER_RTIOC_SET_CONFIG \
00366 _IOW(RTIOC_TYPE_SERIAL, 0x01, struct rtser_config)
00367
00391 #define RTSER_RTIOC_GET_STATUS \
00392 _IOR(RTIOC_TYPE_SERIAL, 0x02, struct rtser_status)
00393
00412 #define RTSER_RTIOC_GET_CONTROL \
00413 _IOR(RTIOC_TYPE_SERIAL, 0x03, int)
00414
00432 #define RTSER_RTIOC_SET_CONTROL \
00433 _IOW(RTIOC_TYPE_SERIAL, 0x04, int)
00434
00457 #define RTSER_RTIOC_WAIT_EVENT \
00458 _IOR(RTIOC_TYPE_SERIAL, 0x05, struct rtser_event)
00459
00463 #endif