void Channel::set_name(string name)
{
- check(sr_dev_channel_name_set(_parent->_structure,
- _structure->index, name.c_str()));
+ check(sr_dev_channel_name_set(_structure, name.c_str()));
}
const ChannelType *Channel::type()
void Channel::set_enabled(bool value)
{
- check(sr_dev_channel_enable(_parent->_structure, _structure->index, value));
+ check(sr_dev_channel_enable(_structure, value));
}
unsigned int Channel::index()
/*--- device.c --------------------------------------------------------------*/
-SR_API int sr_dev_channel_name_set(const struct sr_dev_inst *sdi,
- int channelnum, const char *name);
-SR_API int sr_dev_channel_enable(const struct sr_dev_inst *sdi, int channelnum,
+SR_API int sr_dev_channel_name_set(struct sr_channel *channel,
+ const char *name);
+SR_API int sr_dev_channel_enable(struct sr_channel *channel,
gboolean state);
SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key);
SR_API GSList *sr_dev_list(const struct sr_dev_driver *driver);
}
/**
- * Set the name of the specified channel in the specified device.
+ * Set the name of the specified channel.
*
* If the channel already has a different name assigned to it, it will be
* removed, and the new name will be saved instead.
*
- * @param sdi The device instance the channel is connected to.
- * @param[in] channelnum The number of the channel whose name to set.
- * Note that the channel numbers start at 0.
- * @param[in] name The new name that the specified channel should get. A copy
- * of the string is made.
+ * @param[in] channel The channel whose name to set.
+ * @param[in] name The new name that the specified channel should get. A
+ * copy of the string is made.
*
* @return SR_OK on success, or SR_ERR_ARG on invalid arguments.
*
* @since 0.3.0
*/
-SR_API int sr_dev_channel_name_set(const struct sr_dev_inst *sdi,
- int channelnum, const char *name)
+SR_API int sr_dev_channel_name_set(struct sr_channel *channel,
+ const char *name)
{
- GSList *l;
- struct sr_channel *ch;
- int ret;
-
- if (!sdi) {
- sr_err("%s: sdi was NULL", __func__);
+ if (!channel) {
+ sr_err("%s: channel was NULL", __func__);
return SR_ERR_ARG;
}
- ret = SR_ERR_ARG;
- for (l = sdi->channels; l; l = l->next) {
- ch = l->data;
- if (ch->index == channelnum) {
- g_free(ch->name);
- ch->name = g_strdup(name);
- ret = SR_OK;
- break;
- }
- }
-
- return ret;
+ g_free(channel->name);
+ channel->name = g_strdup(name);
+ return SR_OK;
}
/**
- * Enable or disable a channel on the specified device.
+ * Enable or disable a channel.
*
- * @param sdi The device instance the channel is connected to.
- * @param channelnum The channel number, starting from 0.
- * @param state TRUE to enable the channel, FALSE to disable.
+ * @param[in] channel The channel to enable or disable.
+ * @param[in] state TRUE to enable the channel, FALSE to disable.
*
* @return SR_OK on success or SR_ERR on failure. In case of invalid
* arguments, SR_ERR_ARG is returned and the channel enabled state
*
* @since 0.3.0
*/
-SR_API int sr_dev_channel_enable(const struct sr_dev_inst *sdi, int channelnum,
+SR_API int sr_dev_channel_enable(struct sr_channel *channel,
gboolean state)
{
- GSList *l;
- struct sr_channel *ch;
int ret;
gboolean was_enabled;
+ struct sr_dev_inst *sdi;
- if (!sdi)
+ if (!channel)
return SR_ERR_ARG;
- ret = SR_ERR_ARG;
- for (l = sdi->channels; l; l = l->next) {
- ch = l->data;
- if (ch->index == channelnum) {
- was_enabled = ch->enabled;
- ch->enabled = state;
- ret = SR_OK;
- if (!state != !was_enabled && sdi->driver
- && sdi->driver->config_channel_set) {
- ret = sdi->driver->config_channel_set(
- sdi, ch, SR_CHANNEL_SET_ENABLED);
- /* Roll back change if it wasn't applicable. */
- if (ret == SR_ERR_ARG)
- ch->enabled = was_enabled;
- }
- break;
- }
+ sdi = channel->sdi;
+ was_enabled = channel->enabled;
+ channel->enabled = state;
+ if (!state != !was_enabled && sdi->driver
+ && sdi->driver->config_channel_set) {
+ ret = sdi->driver->config_channel_set(
+ sdi, channel, SR_CHANNEL_SET_ENABLED);
+ /* Roll back change if it wasn't applicable. */
+ if (ret != SR_OK)
+ return ret;
}
- return ret;
+ return SR_OK;
}
/**
struct zip_file *zf;
struct zip_stat zs;
struct sr_dev_inst *sdi;
+ struct sr_channel *ch;
int ret, i, j;
uint64_t tmp_u64, total_channels, p;
char **sections, **keys, *metafile, *val;
ret = SR_ERR_DATA;
break;
}
- tmp_u64 = strtoul(keys[j]+5, NULL, 10);
+ tmp_u64 = strtoul(keys[j]+5, NULL, 10) - 1;
+ ch = g_slist_nth_data(sdi->channels, tmp_u64);
/* sr_session_save() */
- sr_dev_channel_name_set(sdi, tmp_u64 - 1, val);
- sr_dev_channel_enable(sdi, tmp_u64 - 1, TRUE);
+ sr_dev_channel_name_set(ch, val);
+ sr_dev_channel_enable(ch, TRUE);
}
}
g_strfreev(keys);