| 126 | } |
| 127 | |
| 128 | void fxOpenSerial(txSerialTool self) |
| 129 | { |
| 130 | char configuration[256]; |
| 131 | DCB dcb; |
| 132 | COMMTIMEOUTS timeouts; |
| 133 | |
| 134 | sprintf(configuration, "baud=%d parity=%c data=%d stop=%d", self->baud, self->parity, self->data, self->stop); |
| 135 | |
| 136 | self->serialConnection = CreateFile(self->path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, NULL); |
| 137 | if (INVALID_HANDLE_VALUE == self->serialConnection) { |
| 138 | if (!self->reconnecting) |
| 139 | mxThrowElse(self->serialConnection != INVALID_HANDLE_VALUE); |
| 140 | return; |
| 141 | } |
| 142 | memset(&dcb, 0, sizeof(dcb)); |
| 143 | dcb.DCBlength = sizeof(dcb); |
| 144 | BuildCommDCB(configuration, &dcb); |
| 145 | mxThrowElse(SetCommState(self->serialConnection, &dcb)); |
| 146 | memset(&timeouts, 0, sizeof(timeouts)); |
| 147 | timeouts.ReadIntervalTimeout = 1; |
| 148 | timeouts.ReadTotalTimeoutMultiplier = 0; |
| 149 | timeouts.ReadTotalTimeoutConstant = 0; |
| 150 | timeouts.WriteTotalTimeoutMultiplier = 0; |
| 151 | timeouts.WriteTotalTimeoutConstant = 0; |
| 152 | mxThrowElse(SetCommTimeouts(self->serialConnection, &timeouts)); |
| 153 | CloseHandle(self->serialConnection); |
| 154 | |
| 155 | self->serialConnection = CreateFile(self->path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); |
| 156 | |
| 157 | // mxThrowElse(GetCommState(self->serialConnection, &dcb)); |
| 158 | // fprintf(stderr, "# BaudRate %d\n", dcb.BaudRate); |
| 159 | // fprintf(stderr, "# fBinary %d\n", dcb.fBinary); |
| 160 | // fprintf(stderr, "# fParity %d\n", dcb.fParity); |
| 161 | // fprintf(stderr, "# fOutxCtsFlow %d\n", dcb.fOutxCtsFlow); |
| 162 | // fprintf(stderr, "# fOutxDsrFlow %d\n", dcb.fOutxDsrFlow); |
| 163 | // fprintf(stderr, "# fDtrControl %d\n", dcb.fDtrControl); |
| 164 | // fprintf(stderr, "# fDsrSensitivity %d\n", dcb.fDsrSensitivity); |
| 165 | // fprintf(stderr, "# fTXContinueOnXoff %d\n", dcb.fTXContinueOnXoff); |
| 166 | // fprintf(stderr, "# fOutX %d\n", dcb.fOutX); |
| 167 | // fprintf(stderr, "# fInX %d\n", dcb.fInX); |
| 168 | // fprintf(stderr, "# fErrorChar %d\n", dcb.fErrorChar); |
| 169 | // fprintf(stderr, "# fNull %d\n", dcb.fNull); |
| 170 | // fprintf(stderr, "# fRtsControl %d\n", dcb.fRtsControl); |
| 171 | // fprintf(stderr, "# fAbortOnError %d\n", dcb.fAbortOnError); |
| 172 | // fprintf(stderr, "# fDummy2 %d\n", dcb.fDummy2); |
| 173 | // fprintf(stderr, "# wReserved %d\n", dcb.wReserved); |
| 174 | // fprintf(stderr, "# XonLim %d\n", dcb.XonLim); |
| 175 | // fprintf(stderr, "# XoffLim %d\n", dcb.XoffLim); |
| 176 | // fprintf(stderr, "# ByteSize %d\n", dcb.ByteSize); |
| 177 | // fprintf(stderr, "# Parity %d\n", dcb.Parity); |
| 178 | // fprintf(stderr, "# StopBits %d\n", dcb.StopBits); |
| 179 | // fprintf(stderr, "# XonChar %d\n", dcb.XonChar); |
| 180 | // fprintf(stderr, "# XoffChar %d\n", dcb.XoffChar); |
| 181 | // fprintf(stderr, "# ErrorChar %d\n", dcb.ErrorChar); |
| 182 | // fprintf(stderr, "# EofChar %d\n", dcb.EofChar); |
| 183 | // fprintf(stderr, "# EvtChar %d\n", dcb.EvtChar); |
| 184 | // fprintf(stderr, "# wReserved1 %d\n", dcb.wReserved1); |
| 185 | // mxThrowElse(GetCommTimeouts(self->serialConnection, &timeouts)); |
no test coverage detected