bool MacroPacket::read(CommPortPtr dev, int len, QString &err) { if (command == 0) { if (MACRO_DEBUG) printf("reading command from device\n"); int n = dev->read(&command, 1, err); if (n <= 0) { err = (n < 0) ? (tr("read command error: ") + err) : tr("read timeout"); return false; } checksum += command; len--; if (MACRO_DEBUG) printf("command %s\n" ,cEscape(&command,n).toLatin1().constData()); } if (MACRO_DEBUG) printf("reading %d from device\n", len); char buf[len]; int n = dev->read(&buf, len, err); if (n <= 0) { err = (n < 0) ? (tr("read error: ") + err) : tr("read timeout"); return false; } else if (n < len) { err += QString(tr(", read only %1 bytes instead of: %2")) .arg(n).arg(len); return false; } if (MACRO_DEBUG) printf("payload %s\n" ,cEscape(buf,n).toLatin1().constData()); addToPayload(buf,n); return true; }
bool PowerTapDevice::doWrite(CommPortPtr dev, char c, bool hwecho, QString &err) { if (PT_DEBUG) printf("writing '%c' to device\n", c); int n = dev->write(&c, 1, err); if (n != 1) { if (n < 0) err = QString(tr("failed to write %1 to device: %2")).arg(c).arg(err); else err = QString(tr("timeout writing %1 to device")).arg(c); return false; } if (hwecho) { char c; int n = dev->read(&c, 1, err); if (n != 1) { if (n < 0) err = QString(tr("failed to read back hardware echo: %2")).arg(err); else err = tr("timeout reading back hardware echo"); return false; } } return true; }
static int readOneByOne(CommPortPtr dev, void *buf, size_t nbyte, QString &err) { char * data = ((char *)buf); int rtn=0; for (size_t i = 0; i < nbyte; i++) { int n = dev->read(data + i, 1, err); if (n <= 0) { return rtn; } if (data[i] == START_1){ int n = dev->read(data + i, 1, err); if (n <= 0) { return rtn; } } rtn++; } return rtn; }
bool MacroPacket::verifyCheckSum(CommPortPtr dev, QString &err) { char _checksum; if (MACRO_DEBUG) printf("reading checksum from device\n"); int n = dev->read(&_checksum, 1, err); if (n <= 0) { err = (n < 0) ? (tr("read checksum error: ") + err) : tr("read timeout"); return false; } if (MACRO_DEBUG) printf("CheckSum1 %d CheckSum2 %d", (0xff & (unsigned) checksum) , (0xff & (unsigned) _checksum)); return checksum == _checksum; }
int PowerTapDevice::readUntilNewline(CommPortPtr dev, char *buf, int len, QString &err) { int sofar = 0; while (!hasNewline(buf, sofar)) { assert(sofar < len); // Read one byte at a time to avoid waiting for timeout. int n = dev->read(buf + sofar, 1, err); if (n <= 0) { err = (n < 0) ? (tr("read error: ") + err) : tr("read timeout"); err += QString(tr(", read %1 bytes so far: \"%2\"")) .arg(sofar).arg(cEscape(buf, sofar)); return -1; } sofar += n; } return sofar; }