root / trunk / code / projects / fp_math / test / serial.c @ 1602
History | View | Annotate | Download (2.15 KB)
1 |
#include <stdio.h> |
---|---|
2 |
#include <stdlib.h> |
3 |
#include <string.h> |
4 |
#include <unistd.h> |
5 |
#include <fcntl.h> |
6 |
#include <errno.h> |
7 |
#include <termios.h> |
8 |
#include <unistd.h> |
9 |
#include "serial.h" |
10 |
|
11 |
/* open and configure the port */
|
12 |
int openport(char* portname){ |
13 |
struct termios oldtio, newtio;
|
14 |
char *error = 0; |
15 |
int fd;
|
16 |
|
17 |
/* open read/write, non-controlling, non-blocking */
|
18 |
fd = open(portname, O_RDWR | O_NOCTTY | O_NONBLOCK); |
19 |
if (fd == -1){ |
20 |
fprintf(stderr, "Unable to open %s: ", portname);
|
21 |
perror(error); |
22 |
exit(-1);
|
23 |
} |
24 |
|
25 |
tcgetattr(fd, &oldtio); //save current port settings
|
26 |
bzero(&newtio, sizeof(newtio)); //clear struct for new settings |
27 |
|
28 |
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD; |
29 |
newtio.c_iflag = IGNPAR | ICRNL; |
30 |
|
31 |
newtio.c_oflag = 0;
|
32 |
newtio.c_lflag = 0;
|
33 |
|
34 |
newtio.c_cc[VINTR] = 0; /* Ctrl-c */ |
35 |
newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */ |
36 |
newtio.c_cc[VERASE] = 0; /* del */ |
37 |
newtio.c_cc[VKILL] = 0; /* @ */ |
38 |
newtio.c_cc[VEOF] = 4; /* Ctrl-d */ |
39 |
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ |
40 |
newtio.c_cc[VMIN] = 1; /* blocking read until 1 character arrives |
41 |
*/
|
42 |
newtio.c_cc[VSWTC] = 0; /* '\0' */ |
43 |
newtio.c_cc[VSTART] = 0; /* Ctrl-q */ |
44 |
newtio.c_cc[VSTOP] = 0; /* Ctrl-s */ |
45 |
newtio.c_cc[VSUSP] = 0; /* Ctrl-z */ |
46 |
newtio.c_cc[VEOL] = 0; /* '\0' */ |
47 |
newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */ |
48 |
newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */ |
49 |
newtio.c_cc[VWERASE] = 0; /* Ctrl-w */ |
50 |
newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */ |
51 |
newtio.c_cc[VEOL2] = 0; /* '\0' */ |
52 |
|
53 |
/* flush the port, and apply the new settings now */
|
54 |
tcflush(fd, TCIFLUSH); |
55 |
tcsetattr(fd, TCSANOW, &newtio); |
56 |
|
57 |
return (fd);
|
58 |
} |
59 |
|
60 |
int putbyte (int fd, char c) |
61 |
{ |
62 |
int result;
|
63 |
result= write(fd, &c, 1);
|
64 |
// Sleep(25);
|
65 |
return result;
|
66 |
} |
67 |
|
68 |
unsigned char getbyte (int fd) |
69 |
{ |
70 |
char c;
|
71 |
ssize_t retval; |
72 |
|
73 |
retval = read(fd, &c, 1);
|
74 |
|
75 |
if (retval <= 0) |
76 |
return 255; |
77 |
|
78 |
return c;
|
79 |
} |
80 |
|
81 |
unsigned char getbyteblock (int fd) |
82 |
{ |
83 |
char c;
|
84 |
ssize_t retval; |
85 |
|
86 |
while ((retval = read(fd, &c, 1)) <= 0){} |
87 |
// usleep(5000);
|
88 |
|
89 |
return c;
|
90 |
} |
91 |
|
92 |
void clearbuf(int fd) |
93 |
{ |
94 |
tcflush(fd, TCIFLUSH); |
95 |
} |
96 |
|