| 208 | return 0; |
| 209 | } |
| 210 | int uart_rx (int len, unsigned char *data, int timeout_ms) |
| 211 | { |
| 212 | int l = len; |
| 213 | DWORD r, rread; |
| 214 | COMMTIMEOUTS timeouts; |
| 215 | timeouts.ReadIntervalTimeout = MAXDWORD; |
| 216 | timeouts.ReadTotalTimeoutMultiplier = 0; |
| 217 | timeouts.ReadTotalTimeoutConstant = timeout_ms; |
| 218 | timeouts.WriteTotalTimeoutMultiplier = 0; |
| 219 | timeouts.WriteTotalTimeoutConstant = 0; |
| 220 | |
| 221 | SetCommTimeouts (serial_handle, &timeouts); |
| 222 | while (len) |
| 223 | { |
| 224 | r = ReadFile (serial_handle, data, len, &rread, NULL); |
| 225 | |
| 226 | if (!r) |
| 227 | { |
| 228 | l = GetLastError (); |
| 229 | if (l == ERROR_SUCCESS) |
| 230 | return 0; |
| 231 | return -1; |
| 232 | } |
| 233 | else |
| 234 | { |
| 235 | if (rread == 0) |
| 236 | return 0; |
| 237 | } |
| 238 | len -= rread; |
| 239 | data += rread; |
| 240 | } |
| 241 | |
| 242 | return l; |
| 243 | } |
| 244 | |
| 245 | #else |
| 246 | |