]> sigrok.org Git - libsigrok.git/commitdiff
tondaj-sl-814: Use software limit helpers
authorLars-Peter Clausen <redacted>
Sun, 1 May 2016 11:55:28 +0000 (13:55 +0200)
committerUwe Hermann <redacted>
Mon, 9 May 2016 10:44:41 +0000 (12:44 +0200)
Signed-off-by: Lars-Peter Clausen <redacted>
src/hardware/tondaj-sl-814/api.c
src/hardware/tondaj-sl-814/protocol.c
src/hardware/tondaj-sl-814/protocol.h

index 5b1a85f9b2a5eb8a3242d40913dcc6a112902221..20beb2325006d63247c7e5f4f091ce3edbec3cf1 100644 (file)
@@ -36,6 +36,7 @@ static const uint32_t devopts[] = {
        SR_CONF_SOUNDLEVELMETER,
        SR_CONF_CONTINUOUS,
        SR_CONF_LIMIT_SAMPLES | SR_CONF_SET,
+       SR_CONF_LIMIT_MSEC | SR_CONF_SET,
 };
 
 SR_PRIV struct sr_dev_driver tondaj_sl_814_driver_info;
@@ -88,6 +89,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sdi->vendor = g_strdup("Tondaj");
        sdi->model = g_strdup("SL-814");
        devc = g_malloc0(sizeof(struct dev_context));
+       sr_sw_limits_init(&devc->limits);
 
        serial = sr_serial_dev_inst_new(conn, serialcomm);
 
@@ -118,15 +120,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd
 
        devc = sdi->priv;
 
-       switch (key) {
-       case SR_CONF_LIMIT_SAMPLES:
-               devc->limit_samples = g_variant_get_uint64(data);
-               break;
-       default:
-               return SR_ERR_NA;
-       }
-
-       return SR_OK;
+       return sr_sw_limits_config_set(&devc->limits, key, data);
 }
 
 static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
@@ -153,12 +147,15 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *
 
 static int dev_acquisition_start(const struct sr_dev_inst *sdi)
 {
+       struct dev_context *devc = sdi->priv;
        struct sr_serial_dev_inst *serial;
 
        if (sdi->status != SR_ST_ACTIVE)
                return SR_ERR_DEV_CLOSED;
 
        std_session_send_df_header(sdi, LOG_PREFIX);
+       
+       sr_sw_limits_acquisition_start(&devc->limits);
 
        /* Poll every 500ms, or whenever some data comes in. */
        serial = sdi->conn;
index d6f470d26a7ad0eb7822b5446f8850a3c67bb93d..d400758a81d221d6e4982c1c693a87477d178200 100644 (file)
@@ -106,7 +106,7 @@ static void decode_packet(struct sr_dev_inst *sdi)
        packet.payload = &analog;
        sr_session_send(sdi, &packet);
 
-       devc->num_samples++;
+       sr_sw_limits_update_samples_read(&devc->limits, 1);
 }
 
 SR_PRIV int tondaj_sl_814_receive_data(int fd, int revents, void *cb_data)
@@ -201,11 +201,8 @@ SR_PRIV int tondaj_sl_814_receive_data(int fd, int revents, void *cb_data)
                return FALSE;
        }
 
-       /* Stop acquisition if we acquired enough samples. */
-       if (devc->limit_samples && devc->num_samples >= devc->limit_samples) {
-               sr_info("Requested number of samples reached.");
+       if (sr_sw_limits_check(&devc->limits))
                sdi->driver->dev_acquisition_stop(sdi);
-       }
 
        return TRUE;
 }
index 27174a2fef62b36824ece3d1a10d53ea0a6b6425..29940d722e5e11703928753b22cb9dc8339eb240 100644 (file)
 
 /** Private, per-device-instance driver context. */
 struct dev_context {
-       /** The current sampling limit (in number of samples). */
-       uint64_t limit_samples;
-
-       /** The current sampling limit (in ms). */
-       uint64_t limit_msec;
-
-       /** The current number of already received samples. */
-       uint64_t num_samples;
-
+       struct sr_sw_limits limits;
        int state;
 
        uint8_t buf[4];