diff options
author | aiju <devnull@localhost> | 2017-03-31 20:20:25 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-03-31 20:20:25 +0000 |
commit | 9cb67a523ff08a41ff0025d117cbdd598c00e36a (patch) | |
tree | 0ed4eca84a952ffb04d9863218f4177271bd24f3 /sys/src/cmd | |
parent | 330916bfa517734e93cf8799ecf3fe7dd1b53e69 (diff) |
nusb/serial: pl2303: better error handling
Diffstat (limited to 'sys/src/cmd')
-rw-r--r-- | sys/src/cmd/nusb/serial/prolific.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/sys/src/cmd/nusb/serial/prolific.c b/sys/src/cmd/nusb/serial/prolific.c index 4ada08fa9..a73c93bed 100644 --- a/sys/src/cmd/nusb/serial/prolific.c +++ b/sys/src/cmd/nusb/serial/prolific.c @@ -266,7 +266,7 @@ vendorread(Serialport *p, int val, int index, uchar *buf) val, index, buf); res = usbcmd(ser->dev, Rd2h | Rvendor | Rdev, VendorReadReq, val, index, buf, 1); - dsprint(2, "serial: vendorread res:%d\n", res); + if(res != 1) fprint(2, "serial: vendorread failed with res=%d\n", res); return res; } @@ -281,7 +281,7 @@ vendorwrite(Serialport *p, int val, int index) dsprint(2, "serial: vendorwrite val: 0x%x idx:%d\n", val, index); res = usbcmd(ser->dev, Rh2d | Rvendor | Rdev, VendorWriteReq, val, index, nil, 0); - dsprint(2, "serial: vendorwrite res:%d\n", res); + if(res != 8) fprint(2, "serial: vendorwrite failed with res=%d\n", res); return res; } @@ -319,6 +319,8 @@ plgetparam(Serialport *p) res = usbcmd(ser->dev, Rd2h | Rclass | Riface, GetLineReq, 0, 0, buf, sizeof buf); + if(res != ParamReqSz) + memset(buf, 0, sizeof(buf)); p->baud = GET4(buf); /* @@ -340,8 +342,12 @@ plgetparam(Serialport *p) dsprint(2, "serial: getparam: "); if(serialdebug) dumpbuf(buf, sizeof buf); - dsprint(2, "serial: getparam res: %d\n", res); - return res; + + if(res == ParamReqSz) + return 0; + fprint(2, "serial: plgetparam failed with res=%d\n", res); + if(res >= 0) werrstr("plgetparam failed with res=%d", res); + return -1; } static int @@ -367,11 +373,16 @@ plsetparam(Serialport *p) dumpbuf(buf, sizeof buf); res = usbcmd(ser->dev, Rh2d | Rclass | Riface, SetLineReq, 0, 0, buf, sizeof buf); + if(res != 8+ParamReqSz){ + fprint(2, "serial: plsetparam failed with res=%d\n", res); + if(res >= 0) werrstr("plsetparam failed with res=%d", res); + return -1; + } plmodemctl(p, p->mctl); - plgetparam(p); /* make sure our state corresponds */ + if(plgetparam(p) < 0) /* make sure our state corresponds */ + return -1; - dsprint(2, "serial: setparam res: %d\n", res); - return res; + return 0; } static int |