}else{
ndata = count;
wp = emallocz(8+ndata, 0);
+ memmove(wp+8, data, ndata);
}
wp[0] = type;
wp[1] = req;
PUT2(wp+2, value);
PUT2(wp+4, index);
PUT2(wp+6, count);
- if(data != nil)
- memmove(wp+8, data, ndata);
if(usbdebug>2){
hd = hexstr(wp, ndata+8);
rs = reqstr(type, req);
dprint(2, "%s: cmd: short write: %d\n", argv0, n);
return -1;
}
- return n;
+ return ndata;
}
static int
char *hd;
nb = read(d->dfd, buf, nb);
- if(nb >0 && usbdebug > 2){
+ if(nb > 0 && usbdebug > 2){
hd = hexstr(buf, nb);
fprint(2, "%s: in[%d] %s\n", d->dir, nb, hd);
free(hd);
r = cmdreq(d, type, req, value, index, nil, count);
else
r = cmdreq(d, type, req, value, index, data, count);
- if(r > 0){
+ if(r >= 0){
if((type & Rd2h) == 0)
break;
r = cmdrep(d, data, count);
rerrstr(err, sizeof(err));
sleep(Ucdelay);
}
- if(r > 0 && i >= 2)
+ if(r >= 0 && i >= 2)
/* let the user know the device is not in good shape */
fprint(2, "%s: usbcmd: %s: required %d attempts (%s)\n",
argv0, d->dir, i, err);
index |= p->interfc + 1;
dsprint(2, "serial: ftdiread %#p [%d] req: %#x val: %#x idx:%d buf:%p len:%d\n",
p, p->interfc, req, 0, index, buf, len);
- res = usbcmd(ser->dev, Rd2h | Rftdireq | Rdev, req, 0, index, buf, len);
+ res = usbcmd(ser->dev, Rd2h | Rftdireq | Rdev, req, 0, index, buf, len);
dsprint(2, "serial: ftdiread res:%d\n", res);
return res;
}