Author: oxygene Date: 2009-11-19 23:06:13 +0100 (Thu, 19 Nov 2009) New Revision: 56
Modified: trunk/qemu-0.11.0/serialice.c Log: Fix SerialICE host side for Win32
Modified: trunk/qemu-0.11.0/serialice.c =================================================================== --- trunk/qemu-0.11.0/serialice.c 2009-11-19 22:03:12 UTC (rev 55) +++ trunk/qemu-0.11.0/serialice.c 2009-11-19 22:06:13 UTC (rev 56) @@ -372,8 +372,9 @@
while (1) { #ifdef WIN32 - int ret; - if (!ReadFile(state->fd, buf, nbyte - bytes_read, &ret, NULL)) + int ret = 0; + ReadFile(state->fd, buf, nbyte - bytes_read, &ret, NULL); + if (!ret) break; #else int ret = read(state->fd, buf, nbyte - bytes_read); @@ -404,9 +405,11 @@ for (i = 0; i < (int)nbyte; i++) { #ifdef WIN32 int ret = 0; - while (ret == 0) WriteFile(state->fd, buffer + i, 1, &ret, NULL); + while (ret == 0) + WriteFile(state->fd, buffer + i, 1, &ret, NULL); ret = 0; - while (ret == 0) ReadFile(state->fd, &c, 1, &ret, NULL); + while (ret == 0) + ReadFile(state->fd, &c, 1, &ret, NULL); #else while (write(state->fd, buffer + i, 1) != 1) ; while (read(state->fd, &c, 1) != 1) ; @@ -464,6 +467,12 @@ exit(1); }
+ // compensate for CR on the wire. Needed on Win32 + if (s->buffer[0] == '\r') { + memmove(s->buffer, s->buffer+1, reply_len); + serialice_read(s, s->buffer+reply_len-1, 1); + } + if (l != reply_len) { printf("SerialICE: command was not answered sufficiently: " "(%d/%d bytes)\n'%s'\n", l, reply_len, s->buffer); @@ -828,33 +837,16 @@ exit(1); }
- dcb.BaudRate = 115200; + dcb.BaudRate = CBR_115200; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; - dcb.fDtrControl = DTR_CONTROL_DISABLE; - dcb.fInX = FALSE;
if (!SetCommState(s->fd, &dcb)) { perror("SerialICE: Could not store config for target TTY"); exit(1); }
- COMMTIMEOUTS to; - if (!GetCommTimeouts(s->fd, &to)) { - perror("SerialICE: Could not load timeouts for target TTY"); - exit(1); - } - - to.ReadIntervalTimeout = 1000; - to.ReadTotalTimeoutMultiplier = 0; - to.ReadTotalTimeoutConstant = 0; - - if (!SetCommTimeouts(s->fd, &to)) { - perror("SerialICE: Could not store timeouts for target TTY"); - exit(1); - } - #else s->fd = open(serialice_device, O_RDWR | O_NOCTTY | O_NONBLOCK);