Change API of channel accessor functions to take struct sr_channel *.

This commit is contained in:
Martin Ling 2015-03-19 21:55:48 +00:00
parent 837b08660a
commit 6f1346fbd7
4 changed files with 38 additions and 61 deletions

View File

@ -652,8 +652,7 @@ string Channel::name()
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()
@ -668,7 +667,7 @@ bool Channel::enabled()
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()

View File

@ -54,9 +54,9 @@ SR_API char *sr_log_logdomain_get(void);
/*--- 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);

View File

@ -70,53 +70,37 @@ SR_PRIV struct sr_channel *sr_channel_new(struct sr_dev_inst *sdi,
}
/**
* 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
@ -124,37 +108,29 @@ SR_API int sr_dev_channel_name_set(const struct sr_dev_inst *sdi,
*
* @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;
}
/**

View File

@ -122,6 +122,7 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session)
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;
@ -219,10 +220,11 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session)
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);