Go to the documentation of this file.00001 #ifndef _DEV_USART_H_
00002 #define _DEV_USART_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 #include <dev/uart.h>
00064
00074
00079
00083 #ifndef USART_RXBUFSIZ
00084 #define USART_RXBUFSIZ 256
00085 #endif
00086
00092 #ifndef USART_RXHIWMARK
00093 #define USART_RXHIWMARK 240
00094 #endif
00095
00101 #ifndef USART_RXLOWMARK
00102 #define USART_RXLOWMARK 208
00103 #endif
00104
00108 #ifndef USART_TXBUFSIZ
00109 #define USART_TXBUFSIZ 64
00110 #endif
00111
00117 #ifndef USART_TXHIWMARK
00118 #define USART_TXHIWMARK 56
00119 #endif
00120
00126 #ifndef USART_TXLOWMARK
00127 #define USART_TXLOWMARK 40
00128 #endif
00129
00134 typedef struct _RINGBUF RINGBUF;
00135
00140 struct _RINGBUF {
00141
00146 uint8_t * volatile rbf_head;
00147
00152 uint8_t * volatile rbf_tail;
00153
00156 uint8_t *rbf_start;
00157
00160 uint8_t *rbf_last;
00161
00166 size_t rbf_siz;
00167
00172 volatile size_t rbf_cnt;
00173
00179 size_t rbf_lwm;
00180
00186 size_t rbf_hwm;
00187
00193 HANDLE rbf_que;
00194
00195 #ifdef UART_BLOCKING_READ
00196
00202 size_t volatile rbf_blockcnt;
00203
00209 uint8_t* volatile rbf_blockptr;
00210 #endif
00211
00212 };
00213
00221
00226 #define USART_INITSPEED 115200
00227
00231 #define USART_MF_RTSCONTROL 0x0001
00232 #define USART_MF_CTSSENSE 0x0002
00233 #define USART_MF_DTRCONTROL 0x0004
00234 #define USART_MF_DSRSENSE 0x0008
00235 #define USART_MF_DCDSENSE 0x0010
00237 #define USART_MF_SENSEMASK 0x001A
00238 #define USART_MF_CONTROLMASK 0x0005
00247 #define USART_MF_XONXOFF 0x0020
00248
00249 #define USART_MF_LOCALECHO 0x0040
00250 #define USART_MF_COOKEDMODE 0x0080
00252 #define USART_MF_NOBUFFER 0x0100
00253 #define USART_MF_LINEBUFFER 0x0200
00254 #define USART_MF_BUFFERMASK 0x0300
00256 #define USART_MF_HALFDUPLEX 0x0400
00257 #define USART_MF_BLOCKREAD 0x0800
00259 #define USART_SF_RTSOFF 0x0001
00260 #define USART_SF_CTSOFF 0x0002
00261 #define USART_SF_DTROFF 0x0004
00262 #define USART_SF_DSROFF 0x0008
00263 #define USART_SF_DCDOFF 0x0010
00265 #define USART_SF_TXDISABLED 0x0040
00266 #define USART_SF_RXDISABLED 0x0080
00274 struct _USARTDCB {
00275
00278 uint32_t dcb_modeflags;
00279
00282 uint32_t dcb_statusflags;
00283
00286 uint32_t dcb_rtimeout;
00287
00290 uint32_t dcb_wtimeout;
00291
00294 RINGBUF dcb_tx_rbf;
00295
00298 RINGBUF dcb_rx_rbf;
00299
00302 uint8_t dcb_last_eol;
00303
00308 int (*dcb_init) (void);
00309
00313 int (*dcb_deinit) (void);
00314
00318 void (*dcb_tx_start) (void);
00319
00323 void (*dcb_rx_start) (void);
00324
00328 int (*dcb_set_flow_control) (uint32_t flags);
00329
00333 uint32_t(*dcb_get_flow_control) (void);
00334
00338 int (*dcb_set_speed) (uint32_t rate);
00339
00343 uint32_t(*dcb_get_speed) (void);
00344
00348 int (*dcb_set_data_bits) (uint8_t bits);
00349
00353 uint8_t(*dcb_get_data_bits) (void);
00354
00358 int (*dcb_set_parity) (uint8_t bits);
00359
00363 uint8_t(*dcb_get_parity) (void);
00364
00368 int (*dcb_set_stop_bits) (uint8_t bits);
00369
00373 uint8_t(*dcb_get_stop_bits) (void);
00374
00378 int (*dcb_set_status) (uint32_t flags);
00379
00383 uint32_t(*dcb_get_status) (void);
00384
00388 int (*dcb_set_clock_mode) (uint8_t mode);
00389
00393 uint8_t(*dcb_get_clock_mode) (void);
00394 };
00395
00399 typedef struct _USARTDCB USARTDCB;
00400
00404 __BEGIN_DECLS
00405
00408 extern int UsartInit(NUTDEVICE * dev);
00409 extern int UsartIOCtl(NUTDEVICE * dev, int req, void *conf);
00410 extern int UsartRead(NUTFILE * fp, void *buffer, int size);
00411 extern int UsartWrite(NUTFILE * fp, CONST void *buffer, int len);
00412 #ifdef __HARVARD_ARCH__
00413 extern int UsartWrite_P(NUTFILE * fp, PGM_P buffer, int len);
00414 #endif
00415 extern NUTFILE *UsartOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc);
00416 extern int UsartClose(NUTFILE * fp);
00417 extern long UsartSize (NUTFILE *fp);
00420 __END_DECLS
00421
00422 #endif