X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ftekpower-dmm%2Fapi.c;h=dd53f4dd3d64b017fc4ac823f66c1799521ea0eb;hb=39e5d79826cd2c1991007faf1a6cde05af995aa9;hp=8f78ca51e254f94a14953cde828ef5b2bda61ca1;hpb=2546b05c801c90a84fb2e6690d8c253c6576b4ab;p=libsigrok.git diff --git a/hardware/tekpower-dmm/api.c b/hardware/tekpower-dmm/api.c index 8f78ca51..dd53f4dd 100644 --- a/hardware/tekpower-dmm/api.c +++ b/hardware/tekpower-dmm/api.c @@ -91,78 +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 fd File descriptor of the serial port. - * @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 he given timeout, - * SR_ERR upon failure. - */ -static int serial_stream_detect(struct sr_serial_dev_inst *serial, - uint8_t *buf, size_t *buflen, - const size_t packet_size, - packet_valid_t is_valid, - uint64_t timeout_ms, int baudrate) -{ - uint64_t start; - uint64_t time; - uint64_t byte_delay_us; - size_t ibuf, i; - int len; - const size_t maxlen = *buflen; - - if(maxlen < (packet_size << 1) ) { - 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 = 10000000 / 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; - 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("Serial detection took %li ms", time); - *buflen = ibuf; - return SR_OK; - } - /* Not a valid packet; continue searching */ - i++; - } - if (g_get_monotonic_time() - start > timeout_ms) { - /* Timeout */ - sr_warn("Serial detection timeout"); - break; - } - g_usleep(byte_delay_us); - } - - *buflen = ibuf; - return SR_ERR; - -} - static GSList *lcd14_scan(const char *conn, const char *serialcomm) { struct sr_dev_inst *sdi; @@ -178,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); @@ -209,16 +137,15 @@ static GSList *lcd14_scan(const char *conn, const char *serialcomm) * the serial port or USB to serial adapter. */ dropped = len - FS9721_PACKET_SIZE; - if (dropped > 2 * FS9721_PACKET_SIZE) { - - sr_warn("Had to drop too much data"); - } + if (dropped > 2 * FS9721_PACKET_SIZE) + sr_warn("Had to drop too much data."); sr_info("Found device on port %s.", conn); if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "TekPower", "TP4000ZC", ""))) goto scan_cleanup; + if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) { sr_err("Device context malloc failed."); goto scan_cleanup; @@ -290,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;