From: Gerhard Sittig Date: Sun, 30 Sep 2018 02:45:27 +0000 (+0200) Subject: serial-dmm: introduce support for subdriver specific channel names X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=7d40b5ee62f625a87e7ab37508d37b97a65dc66b;p=libsigrok.git serial-dmm: introduce support for subdriver specific channel names Default to the existing "P1" etc naming scheme for analog channels of serial-dmm subdrivers. Add support for subdriver specific channel names (which can reference the channel number if they desire). This is useful for devices with multiple displays, or special purpose devices where other names than P1 can better reflect the channel's nature. --- diff --git a/src/hardware/serial-dmm/api.c b/src/hardware/serial-dmm/api.c index 88e3b88a..c127000d 100644 --- a/src/hardware/serial-dmm/api.c +++ b/src/hardware/serial-dmm/api.c @@ -138,8 +138,12 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) dmm->channel_count = 4; for (ch_idx = 0; ch_idx < dmm->channel_count; ch_idx++) { size_t ch_num; + const char *fmt; + fmt = "P%zu"; + if (dmm->channel_formats && dmm->channel_formats[ch_idx]) + fmt = dmm->channel_formats[ch_idx]; ch_num = ch_idx + 1; - snprintf(ch_name, sizeof(ch_name), "P%zu", ch_num); + snprintf(ch_name, sizeof(ch_name), fmt, ch_num); sr_channel_new(sdi, ch_idx, SR_CHANNEL_ANALOG, TRUE, ch_name); } devices = g_slist_append(devices, sdi); @@ -207,7 +211,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) .context = NULL, \ }, \ VENDOR, MODEL, CONN, BAUDRATE, PACKETSIZE, TIMEOUT, DELAY, \ - REQUEST, 1, VALID, PARSE, DETAILS, sizeof(struct CHIPSET##_info) \ + REQUEST, 1, NULL, VALID, PARSE, DETAILS, sizeof(struct CHIPSET##_info) \ }).di SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers, diff --git a/src/hardware/serial-dmm/protocol.h b/src/hardware/serial-dmm/protocol.h index 696f6b6e..decd429d 100644 --- a/src/hardware/serial-dmm/protocol.h +++ b/src/hardware/serial-dmm/protocol.h @@ -49,6 +49,8 @@ struct dmm_info { int (*packet_request)(struct sr_serial_dev_inst *); /** Number of channels / displays. */ size_t channel_count; + /** (Optional) printf formats for channel names. */ + const char **channel_formats; /** Packet validation function. */ gboolean (*packet_valid)(const uint8_t *); /** Packet parsing function. */