Both ina2xx and tmp401 linux drivers used by baylibre-acme expose the standard hwmon update_interval attribute, which affects the internal update interval of the chip.
When setting samplerate for data acquisition try to modify this attribute accordingly. Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com> --- src/hardware/baylibre-acme/api.c | 1 + src/hardware/baylibre-acme/protocol.c | 37 +++++++++++++++++++++++++++++++++++ src/hardware/baylibre-acme/protocol.h | 3 +++ 3 files changed, 41 insertions(+) diff --git a/src/hardware/baylibre-acme/api.c b/src/hardware/baylibre-acme/api.c index def373d..92e1d49 100644 --- a/src/hardware/baylibre-acme/api.c +++ b/src/hardware/baylibre-acme/api.c @@ -241,6 +241,7 @@ static int config_set(uint32_t key, GVariant *data, break; } devc->samplerate = samplerate; + bl_acme_maybe_set_update_interval(sdi, samplerate); break; case SR_CONF_PROBE_FACTOR: if (!cg) diff --git a/src/hardware/baylibre-acme/protocol.c b/src/hardware/baylibre-acme/protocol.c index 656e89f..814f11d 100644 --- a/src/hardware/baylibre-acme/protocol.c +++ b/src/hardware/baylibre-acme/protocol.c @@ -281,6 +281,43 @@ static int get_shunt_path(const struct sr_channel_group *cg, GString *path) return ret; } +/* + * Try setting the update_interval sysfs attribute for each probe according + * to samplerate. + */ +SR_PRIV void bl_acme_maybe_set_update_interval(const struct sr_dev_inst *sdi, + uint64_t samplerate) +{ + struct sr_channel_group *cg; + struct channel_group_priv *cgp; + GString *hwmon; + GSList *l; + FILE *fd; + + for (l = sdi->channel_groups; l != NULL; l = l->next) { + cg = l->data; + cgp = cg->priv; + + hwmon = g_string_sized_new(64); + g_string_append_printf(hwmon, + "/sys/class/hwmon/hwmon%d/update_interval", + cgp->hwmon_num); + + if (g_file_test(hwmon->str, G_FILE_TEST_EXISTS)) { + fd = g_fopen(hwmon->str, "w"); + if (!fd) { + g_string_free(hwmon, TRUE); + continue; + } + + g_fprintf(fd, "%" PRIu64 "\n", 1000 / samplerate); + fclose(fd); + } + + g_string_free(hwmon, TRUE); + } +} + SR_PRIV int bl_acme_get_shunt(const struct sr_channel_group *cg, uint64_t *shunt) { diff --git a/src/hardware/baylibre-acme/protocol.h b/src/hardware/baylibre-acme/protocol.h index 3972aa2..5f21965 100644 --- a/src/hardware/baylibre-acme/protocol.h +++ b/src/hardware/baylibre-acme/protocol.h @@ -81,6 +81,9 @@ SR_PRIV gboolean bl_acme_detect_probe(unsigned int addr, SR_PRIV gboolean bl_acme_register_probe(struct sr_dev_inst *sdi, int type, unsigned int addr, int prb_num); +SR_PRIV void bl_acme_maybe_set_update_interval(const struct sr_dev_inst *sdi, + uint64_t samplerate); + SR_PRIV int bl_acme_get_shunt(const struct sr_channel_group *cg, uint64_t *shunt); SR_PRIV int bl_acme_set_shunt(const struct sr_channel_group *cg, -- 2.1.4 ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ sigrok-devel mailing list sigrok-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sigrok-devel