| 341 | } |
| 342 | |
| 343 | void xs_serial_write(xsMachine *the) |
| 344 | { |
| 345 | xsSerial s = xsGetHostData(xsThis); |
| 346 | char *data; |
| 347 | DWORD count; |
| 348 | OVERLAPPED overlapped; |
| 349 | DWORD written; |
| 350 | DWORD written2 = 0; |
| 351 | |
| 352 | if (s->bufferFormat) { |
| 353 | data = xsToArrayBuffer(xsArg(0)); |
| 354 | count = (DWORD)xsGetArrayBufferLength(xsArg(0)); |
| 355 | } |
| 356 | else { |
| 357 | data = xsToString(xsArg(0)); |
| 358 | count = (DWORD)strlen(data); |
| 359 | } |
| 360 | if (!count) |
| 361 | return; |
| 362 | memset(&overlapped, 0, sizeof(overlapped)); |
| 363 | overlapped.hEvent = s->writeEvent; |
| 364 | if (!WriteFile(s->comm, data, (DWORD)count, &written, &overlapped)) { |
| 365 | DWORD error = GetLastError(); |
| 366 | if (error != ERROR_IO_PENDING) xs_serial_throw(the, error, NULL, 0); |
| 367 | xsElseThrow(GetOverlappedResult(s->comm, &overlapped, &written2, TRUE)); |
| 368 | } |
| 369 | // { |
| 370 | // char buffer[256]; |
| 371 | // sprintf(buffer, "WRITE %ld %ld %ld\n", count, written, written2); |
| 372 | // OutputDebugString(buffer); |
| 373 | // } |
| 374 | xs_serial_write_aux(the, s); |
| 375 | } |
| 376 | |
| 377 | void xs_serial_write_aux(void* machine, xsSerial s) |
| 378 | { |
nothing calls this directly
no test coverage detected