X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ftekpower-dmm%2Fapi.c;h=dd53f4dd3d64b017fc4ac823f66c1799521ea0eb;hb=39e5d79826cd2c1991007faf1a6cde05af995aa9;hp=bd6cb9402137957bd31edecca545970e3629bd74;hpb=6bef68a7e1abd472753e16e2188aadd36650c163;p=libsigrok.git diff --git a/hardware/tekpower-dmm/api.c b/hardware/tekpower-dmm/api.c index bd6cb940..dd53f4dd 100644 --- a/hardware/tekpower-dmm/api.c +++ b/hardware/tekpower-dmm/api.c @@ -91,91 +91,6 @@ static int hw_init(void) return SR_OK; } -typedef gboolean (*packet_valid_t)(const uint8_t *buf); - -/** - * Try to find a valid packet in a serial data stream. - * - * @param serial Previously initialized serial port structure. - * @param buf Buffer containing the bytes to write. - * @param count Size of the buffer. - * @param packet_size Size, in bytes, of a valid packet. - * @param is_valid Callback that assesses whether the packet is valid or not. - * @param timeout_ms The timeout after which, if no packet is detected, to - * abort scanning. - * @param baudrate The baudrate of the serial port. This parameter is not - * critical, but it helps fine tune the serial port polling - * delay. - * - * @return SR_OK if a valid packet is found within the given timeout, - * SR_ERR upon failure. - */ -static int serial_stream_detect(struct sr_serial_dev_inst *serial, - uint8_t *buf, size_t *buflen, - size_t packet_size, packet_valid_t is_valid, - uint64_t timeout_ms, int baudrate) -{ - uint64_t start, time, byte_delay_us; - size_t ibuf, i, maxlen; - int len; - - maxlen = *buflen; - - sr_dbg("Detecting packets on FD %d (timeout = %" PRIu64 - "ms, baudrate = %d).", serial->fd, timeout_ms, baudrate); - - if (maxlen < (packet_size / 2) ) { - sr_err("Buffer size must be at least twice the packet size."); - return SR_ERR; - } - - timeout_ms *= 1000; - - /* Assume 8n1 transmission. That is 10 bits for every byte. */ - byte_delay_us = 10 * (1000000 / baudrate); - start = g_get_monotonic_time(); - - i = ibuf = len = 0; - while (ibuf < maxlen) { - len = serial_read(serial, &buf[ibuf], 1); - if (len > 0) { - ibuf += len; - } else if (len == 0) { - sr_spew("Error: Only read 0 bytes."); - } else { - /* Error reading byte, but continuing anyway. */ - } - if ((ibuf - i) >= packet_size) { - /* We have at least a packet's worth of data. */ - if (is_valid(&buf[i])) { - time = g_get_monotonic_time() - start; - time /= 1000; - sr_spew("Found valid %d-byte packet after " - "%" PRIu64 "ms.", (ibuf - i), time); - *buflen = ibuf; - return SR_OK; - } else { - sr_spew("Got %d bytes, but not a valid " - "packet.", (ibuf - i)); - } - /* Not a valid packet. Continue searching. */ - i++; - } - if (g_get_monotonic_time() - start > timeout_ms) { - /* Timeout */ - sr_dbg("Detection timed out after %dms.", timeout_ms); - break; - } - g_usleep(byte_delay_us); - } - - *buflen = ibuf; - - sr_err("Didn't find a valid packet (read %d bytes).", *buflen); - - return SR_ERR; -} - static GSList *lcd14_scan(const char *conn, const char *serialcomm) { struct sr_dev_inst *sdi; @@ -191,7 +106,7 @@ static GSList *lcd14_scan(const char *conn, const char *serialcomm) if (!(serial = sr_serial_dev_inst_new(conn, serialcomm))) return NULL; - if (serial_open(serial, O_RDONLY | O_NONBLOCK) != SR_OK) + if (serial_open(serial, SERIAL_RDONLY | SERIAL_NONBLOCK) != SR_OK) return NULL; sr_info("Probing port %s readonly.", conn); @@ -302,7 +217,7 @@ static int hw_dev_open(struct sr_dev_inst *sdi) return SR_ERR_BUG; } - if (serial_open(devc->serial, O_RDONLY) != SR_OK) + if (serial_open(devc->serial, SERIAL_RDONLY) != SR_OK) return SR_ERR; sdi->status = SR_ST_ACTIVE;