]> sigrok.org Git - libsigrok.git/commitdiff
Add sr_dev_inst_user_new(), sr_dev_inst_channel_add().
authorUwe Hermann <redacted>
Tue, 11 Nov 2014 20:58:49 +0000 (21:58 +0100)
committerUwe Hermann <redacted>
Tue, 11 Nov 2014 21:16:12 +0000 (22:16 +0100)
include/libsigrok/libsigrok.h
include/libsigrok/proto.h
src/device.c

index d626bac66bf08c484d566d38e1cb99722ddccedc..63201bfbf6c08670174935c1324c15b009ebafaa 100644 (file)
@@ -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 */
index dbe9eed0a563350400f2d12d0b716c7946fd4465..f4fbb0494c86a94559fdc7000c66a6eb7bc95cc1 100644 (file)
@@ -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);
index 969faa4de5bd4d3e7f7e7d38179170b9a1c8458c..fb40182c13b6404a773fe0814520fe0092f64823 100644 (file)
@@ -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 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.