|
| 1 | + |
| 2 | + |
1 | 3 | /* |
2 | 4 | * Copyright 2009-2011 Cedric Priscal |
3 | 5 | * |
@@ -32,40 +34,40 @@ static const char *TAG="serial_port"; |
32 | 34 |
|
33 | 35 | static speed_t getBaudrate(jint baudrate) |
34 | 36 | { |
35 | | - switch(baudrate) { |
36 | | - case 0: return B0; |
37 | | - case 50: return B50; |
38 | | - case 75: return B75; |
39 | | - case 110: return B110; |
40 | | - case 134: return B134; |
41 | | - case 150: return B150; |
42 | | - case 200: return B200; |
43 | | - case 300: return B300; |
44 | | - case 600: return B600; |
45 | | - case 1200: return B1200; |
46 | | - case 1800: return B1800; |
47 | | - case 2400: return B2400; |
48 | | - case 4800: return B4800; |
49 | | - case 9600: return B9600; |
50 | | - case 19200: return B19200; |
51 | | - case 38400: return B38400; |
52 | | - case 57600: return B57600; |
53 | | - case 115200: return B115200; |
54 | | - case 230400: return B230400; |
55 | | - case 460800: return B460800; |
56 | | - case 500000: return B500000; |
57 | | - case 576000: return B576000; |
58 | | - case 921600: return B921600; |
59 | | - case 1000000: return B1000000; |
60 | | - case 1152000: return B1152000; |
61 | | - case 1500000: return B1500000; |
62 | | - case 2000000: return B2000000; |
63 | | - case 2500000: return B2500000; |
64 | | - case 3000000: return B3000000; |
65 | | - case 3500000: return B3500000; |
66 | | - case 4000000: return B4000000; |
67 | | - default: return -1; |
68 | | - } |
| 37 | + switch(baudrate) { |
| 38 | + case 0: return B0; |
| 39 | + case 50: return B50; |
| 40 | + case 75: return B75; |
| 41 | + case 110: return B110; |
| 42 | + case 134: return B134; |
| 43 | + case 150: return B150; |
| 44 | + case 200: return B200; |
| 45 | + case 300: return B300; |
| 46 | + case 600: return B600; |
| 47 | + case 1200: return B1200; |
| 48 | + case 1800: return B1800; |
| 49 | + case 2400: return B2400; |
| 50 | + case 4800: return B4800; |
| 51 | + case 9600: return B9600; |
| 52 | + case 19200: return B19200; |
| 53 | + case 38400: return B38400; |
| 54 | + case 57600: return B57600; |
| 55 | + case 115200: return B115200; |
| 56 | + case 230400: return B230400; |
| 57 | + case 460800: return B460800; |
| 58 | + case 500000: return B500000; |
| 59 | + case 576000: return B576000; |
| 60 | + case 921600: return B921600; |
| 61 | + case 1000000: return B1000000; |
| 62 | + case 1152000: return B1152000; |
| 63 | + case 1500000: return B1500000; |
| 64 | + case 2000000: return B2000000; |
| 65 | + case 2500000: return B2500000; |
| 66 | + case 3000000: return B3000000; |
| 67 | + case 3500000: return B3500000; |
| 68 | + case 4000000: return B4000000; |
| 69 | + default: return -1; |
| 70 | + } |
69 | 71 | } |
70 | 72 |
|
71 | 73 | /* |
@@ -151,23 +153,42 @@ JNIEXPORT jobject JNICALL Java_com_kongqw_serialportlibrary_SerialPort_open |
151 | 153 | return NULL; |
152 | 154 | } |
153 | 155 |
|
154 | | - // Set parity |
155 | 156 | switch (parity) { |
156 | | - case 0: // None |
157 | | - cfg.c_cflag &= ~PARENB; |
| 157 | + case 0: |
| 158 | + cfg.c_cflag &= ~PARENB; //PARITY OFF |
158 | 159 | break; |
159 | | - case 1: // Odd |
160 | | - cfg.c_cflag |= PARENB; |
161 | | - cfg.c_cflag |= PARODD; |
| 160 | + case 1: |
| 161 | + cfg.c_cflag |= (PARODD | PARENB); //PARITY ODD |
| 162 | + cfg.c_iflag &= ~IGNPAR; |
| 163 | + cfg.c_iflag |= PARMRK; |
| 164 | + cfg.c_iflag |= INPCK; |
162 | 165 | break; |
163 | | - case 2: // Even |
| 166 | + case 2: |
| 167 | + cfg.c_iflag &= ~(IGNPAR | PARMRK); //PARITY EVEN |
| 168 | + cfg.c_iflag |= INPCK; |
164 | 169 | cfg.c_cflag |= PARENB; |
165 | 170 | cfg.c_cflag &= ~PARODD; |
166 | 171 | break; |
| 172 | + case 3: |
| 173 | + // PARITY SPACE |
| 174 | + cfg.c_iflag &= ~IGNPAR; // Make sure wrong parity is not ignored |
| 175 | + cfg.c_iflag |= PARMRK; // Marks parity error, parity error |
| 176 | + // is given as three char sequence |
| 177 | + cfg.c_iflag |= INPCK; // Enable input parity checking |
| 178 | + cfg.c_cflag |= PARENB | CMSPAR; // Enable parity and set space parity |
| 179 | + cfg.c_cflag &= ~PARODD; // |
| 180 | + break; |
| 181 | + case 4: |
| 182 | + // PARITY MARK |
| 183 | + cfg.c_iflag &= ~IGNPAR; // Make sure wrong parity is not ignored |
| 184 | + cfg.c_iflag |= PARMRK; // Marks parity error, parity error |
| 185 | + // is given as three char sequence |
| 186 | + cfg.c_iflag |= INPCK; // Enable input parity checking |
| 187 | + cfg.c_cflag |= PARENB | CMSPAR | PARODD; |
| 188 | + break; |
167 | 189 | default: |
168 | | - LOGE("Invalid parity"); |
169 | | - close(fd); |
170 | | - return NULL; |
| 190 | + cfg.c_cflag &= ~PARENB; |
| 191 | + break; |
171 | 192 | } |
172 | 193 |
|
173 | 194 | // Set baud rate |
|
0 commit comments