| 21 | static const DWORD readTimeout = 0, writeTimeout = 0; |
| 22 | |
| 23 | BOOL configPort(void *portHandle) |
| 24 | { |
| 25 | // Retrieve existing port configuration |
| 26 | DCB dcbSerialParams; |
| 27 | memset(&dcbSerialParams, 0, sizeof(DCB)); |
| 28 | dcbSerialParams.DCBlength = sizeof(DCB); |
| 29 | DWORD receiveDeviceQueueSize = 4096, sendDeviceQueueSize = 4096; |
| 30 | if (!SetupComm(portHandle, receiveDeviceQueueSize, sendDeviceQueueSize) || !GetCommState(portHandle, &dcbSerialParams)) |
| 31 | { |
| 32 | printf("Error Line = %d, Code = %d\n", __LINE__ - 2, GetLastError()); |
| 33 | return FALSE; |
| 34 | } |
| 35 | |
| 36 | // Set updated port parameters |
| 37 | dcbSerialParams.BaudRate = 9600; |
| 38 | dcbSerialParams.ByteSize = 8; |
| 39 | dcbSerialParams.StopBits = ONESTOPBIT; |
| 40 | dcbSerialParams.Parity = NOPARITY; |
| 41 | dcbSerialParams.fParity = FALSE; |
| 42 | dcbSerialParams.fBinary = TRUE; |
| 43 | dcbSerialParams.fAbortOnError = FALSE; |
| 44 | dcbSerialParams.fRtsControl = RTS_CONTROL_DISABLE; |
| 45 | dcbSerialParams.fOutxCtsFlow = FALSE; |
| 46 | dcbSerialParams.fOutxDsrFlow = FALSE; |
| 47 | dcbSerialParams.fDtrControl = DTR_CONTROL_DISABLE; |
| 48 | dcbSerialParams.fDsrSensitivity = FALSE; |
| 49 | dcbSerialParams.fOutX = FALSE; |
| 50 | dcbSerialParams.fInX = FALSE; |
| 51 | dcbSerialParams.fTXContinueOnXoff = TRUE; |
| 52 | dcbSerialParams.fErrorChar = FALSE; |
| 53 | dcbSerialParams.fNull = FALSE; |
| 54 | dcbSerialParams.XonLim = 2048; |
| 55 | dcbSerialParams.XoffLim = 512; |
| 56 | dcbSerialParams.XonChar = 17; |
| 57 | dcbSerialParams.XoffChar = 19; |
| 58 | |
| 59 | // Apply changes |
| 60 | if (!SetCommState(portHandle, &dcbSerialParams)) |
| 61 | { |
| 62 | printf("Error Line = %d, Code = %d\n", __LINE__ - 2, GetLastError()); |
| 63 | return FALSE; |
| 64 | } |
| 65 | |
| 66 | // Get event flags from the Java class |
| 67 | int eventFlags = EV_ERR; |
| 68 | if ((eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_AVAILABLE) || (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_RECEIVED)) |
| 69 | eventFlags |= EV_RXCHAR; |
| 70 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DATA_WRITTEN) |
| 71 | eventFlags |= EV_TXEMPTY; |
| 72 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_BREAK_INTERRUPT) |
| 73 | eventFlags |= EV_BREAK; |
| 74 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_CTS) |
| 75 | eventFlags |= EV_CTS; |
| 76 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_DSR) |
| 77 | eventFlags |= EV_DSR; |
| 78 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_RING_INDICATOR) |
| 79 | eventFlags |= EV_RING; |
| 80 | if (eventsToMonitor & com_fazecast_jSerialComm_SerialPort_LISTENING_EVENT_CARRIER_DETECT) |