From: Uwe Hermann Date: Tue, 11 Nov 2014 20:58:49 +0000 (+0100) Subject: Add sr_dev_inst_user_new(), sr_dev_inst_channel_add(). X-Git-Tag: libsigrok-0.4.0~805 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=e705ce3bf6203b03efd66390b02c2352c62229bc;p=libsigrok.git Add sr_dev_inst_user_new(), sr_dev_inst_channel_add(). --- diff --git a/include/libsigrok/libsigrok.h b/include/libsigrok/libsigrok.h index d626bac6..63201bfb 100644 --- a/include/libsigrok/libsigrok.h +++ b/include/libsigrok/libsigrok.h @@ -907,6 +907,8 @@ enum sr_dev_inst_type { SR_INST_SERIAL, /** Device instance type for SCPI devices. */ SR_INST_SCPI, + /** Device-instance type for user-created "devices". */ + SR_INST_USER, }; /** Device instance status, struct sr_dev_inst.status */ diff --git a/include/libsigrok/proto.h b/include/libsigrok/proto.h index dbe9eed0..f4fbb049 100644 --- a/include/libsigrok/proto.h +++ b/include/libsigrok/proto.h @@ -64,6 +64,10 @@ SR_API const char *sr_dev_inst_connid_get(const struct sr_dev_inst *sdi); SR_API GSList *sr_dev_inst_channels_get(const struct sr_dev_inst *sdi); SR_API GSList *sr_dev_inst_channel_groups_get(const struct sr_dev_inst *sdi); +SR_API struct sr_dev_inst *sr_dev_inst_user_new(const char *vendor, + const char *model, const char *version); +SR_API int sr_dev_inst_channel_add(struct sr_dev_inst *sdi, int index, int type, const char *name); + /*--- hwdriver.c ------------------------------------------------------------*/ SR_API struct sr_dev_driver **sr_driver_list(void); diff --git a/src/device.c b/src/device.c index 969faa4d..fb40182c 100644 --- a/src/device.c +++ b/src/device.c @@ -202,7 +202,7 @@ SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key) } /** @private - * Allocate and init new device instance struct. + * Allocate and init a new device instance struct. * @param[in] index @copydoc sr_dev_inst::index * @param[in] status @copydoc sr_dev_inst::status * @param[in] vendor @copydoc sr_dev_inst::vendor @@ -240,6 +240,42 @@ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int status, return sdi; } +/** + * Allocate and init a new user-generated device instance. + */ +SR_API struct sr_dev_inst *sr_dev_inst_user_new(const char *vendor, + const char *model, const char *version) +{ + struct sr_dev_inst *sdi; + + sdi = sr_dev_inst_new(0, vendor, model, version); + if (!sdi) + return NULL; + + sdi->inst_type = SR_INST_USER; + + return sdi; +} + +/** + * Add a new channel to the specified device instance. + */ +SR_API int sr_dev_inst_channel_add(struct sr_dev_inst *sdi, int index, int type, const char *name) +{ + struct sr_channel *ch; + + if (!sdi || sdi->inst_type != SR_INST_USER || index < 0) + return SR_ERR_ARG; + + ch = sr_channel_new(index, type, TRUE, name); + if (!ch) + return SR_ERR; + + sdi->channels = g_slist_append(sdi->channels, ch); + + return SR_OK; +} + /** @private * Free device instance struct created by sr_dev_inst(). * @param sdi device instance to free.