X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fsession_file.c;h=b8a1cb60d8e098d2986319767db2760a982ec461;hp=e27ed85c0adf3f256b6a76cefbfab62f8922816a;hb=421bc3eba02f060319c752a26461148fc93563ec;hpb=5e23fcab889c62864b92aa3ad6902ce3e9f5be49 diff --git a/src/session_file.c b/src/session_file.c index e27ed85c..b8a1cb60 100644 --- a/src/session_file.c +++ b/src/session_file.c @@ -49,7 +49,6 @@ extern SR_PRIV struct sr_dev_driver session_driver; static int session_driver_initialized = 0; - /** @private */ SR_PRIV int sr_sessionfile_check(const char *filename) { @@ -122,6 +121,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; @@ -174,16 +174,17 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) if (!session_driver_initialized) { /* first device, init the driver */ session_driver_initialized = 1; - sdi->driver->init(NULL); + sdi->driver->init(sdi->driver, NULL); } sr_dev_open(sdi); sr_session_dev_add(*session, sdi); (*session)->owned_devs = g_slist_append( (*session)->owned_devs, sdi); - sdi->driver->config_set(SR_CONF_SESSIONFILE, - g_variant_new_string(filename), sdi, NULL); - sdi->driver->config_set(SR_CONF_CAPTUREFILE, - g_variant_new_string(val), sdi, NULL); + + sr_config_set(sdi, NULL, SR_CONF_SESSIONFILE, + g_variant_new_string(filename)); + sr_config_set(sdi, NULL, SR_CONF_CAPTUREFILE, + g_variant_new_string(val)); g_ptr_array_add(capturefiles, val); } else if (!strcmp(keys[j], "samplerate")) { if (!sdi) { @@ -191,24 +192,24 @@ SR_API int sr_session_load(const char *filename, struct sr_session **session) break; } sr_parse_sizestring(val, &tmp_u64); - sdi->driver->config_set(SR_CONF_SAMPLERATE, - g_variant_new_uint64(tmp_u64), sdi, NULL); + sr_config_set(sdi, NULL, SR_CONF_SAMPLERATE, + g_variant_new_uint64(tmp_u64)); } else if (!strcmp(keys[j], "unitsize")) { if (!sdi) { ret = SR_ERR_DATA; break; } tmp_u64 = strtoull(val, NULL, 10); - sdi->driver->config_set(SR_CONF_CAPTURE_UNITSIZE, - g_variant_new_uint64(tmp_u64), sdi, NULL); + sr_config_set(sdi, NULL, SR_CONF_CAPTURE_UNITSIZE, + g_variant_new_uint64(tmp_u64)); } else if (!strcmp(keys[j], "total probes")) { if (!sdi) { ret = SR_ERR_DATA; break; } total_channels = strtoull(val, NULL, 10); - sdi->driver->config_set(SR_CONF_NUM_LOGIC_CHANNELS, - g_variant_new_uint64(total_channels), sdi, NULL); + sr_config_set(sdi, NULL, SR_CONF_NUM_LOGIC_CHANNELS, + g_variant_new_uint64(total_channels)); for (p = 0; p < total_channels; p++) { snprintf(channelname, SR_MAX_CHANNELNAME_LEN, "%" PRIu64, p); sr_channel_new(sdi, p, SR_CHANNEL_LOGIC, FALSE, @@ -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);