X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session_file.c;h=1e76028d1e01cd8ff3cbc68e3a2673de1e47df45;hb=4d15e5c9077a543a452a976933286c705c2e7088;hp=204dee963182df92c756b1876711d326530bb031;hpb=44fc870c9cc5c0e53b47b9d7fa3dffe81731ee3c;p=libsigrok.git diff --git a/session_file.c b/session_file.c index 204dee96..1e76028d 100644 --- a/session_file.c +++ b/session_file.c @@ -146,18 +146,18 @@ SR_API int sr_session_load(const char *filename) /* first device, init the driver */ sdi->driver->init(NULL); sr_session_dev_add(sdi); - sdi->driver->dev_config_set(sdi, SR_HWCAP_SESSIONFILE, filename); - sdi->driver->dev_config_set(sdi, SR_HWCAP_CAPTUREFILE, val); + sdi->driver->config_set(SR_CONF_SESSIONFILE, filename, sdi); + sdi->driver->config_set(SR_CONF_CAPTUREFILE, val, sdi); g_ptr_array_add(capturefiles, val); } else if (!strcmp(keys[j], "samplerate")) { sr_parse_sizestring(val, &tmp_u64); - sdi->driver->dev_config_set(sdi, SR_HWCAP_SAMPLERATE, &tmp_u64); + sdi->driver->config_set(SR_CONF_SAMPLERATE, &tmp_u64, sdi); } else if (!strcmp(keys[j], "unitsize")) { tmp_u64 = strtoull(val, NULL, 10); - sdi->driver->dev_config_set(sdi, SR_HWCAP_CAPTURE_UNITSIZE, &tmp_u64); + sdi->driver->config_set(SR_CONF_CAPTURE_UNITSIZE, &tmp_u64, sdi); } else if (!strcmp(keys[j], "total probes")) { total_probes = strtoull(val, NULL, 10); - sdi->driver->dev_config_set(sdi, SR_HWCAP_CAPTURE_NUM_PROBES, &total_probes); + sdi->driver->config_set(SR_CONF_CAPTURE_NUM_PROBES, &total_probes, sdi); for (p = 0; p < total_probes; p++) { snprintf(probename, SR_MAX_PROBENAME_LEN, "%" PRIu64, p); if (!(probe = sr_probe_new(p, SR_PROBE_LOGIC, TRUE, @@ -193,25 +193,27 @@ SR_API int sr_session_load(const char *filename) /** * Save the current session to the specified file. * - * @param filename The name of the file where to save the current session. + * @param filename The name of the filename to save the current session as. * Must not be NULL. * @param sdi The device instance from which the data was captured. - * @param ds The datastore where the session's captured data was stored. + * @param buf The data to be saved. + * @param unitsize The number of bytes per sample. + * @param units The number of samples. * * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments, or SR_ERR * upon other errors. */ -SR_API int sr_session_save(const char *filename, - const struct sr_dev_inst *sdi, struct sr_datastore *ds) +SR_API int sr_session_save(const char *filename, const struct sr_dev_inst *sdi, + unsigned char *buf, int unitsize, int units) { - GSList *l, *d; + GSList *l; FILE *meta; struct sr_probe *probe; struct zip *zipfile; struct zip_source *versrc, *metasrc, *logicsrc; - int bufcnt, tmpfile, ret, probecnt; + int tmpfile, ret, probecnt; uint64_t *samplerate; - char version[1], rawname[16], metafile[32], *buf, *s; + char version[1], rawname[16], metafile[32], *s; if (!filename) { sr_err("%s: filename was NULL", __func__); @@ -249,10 +251,10 @@ SR_API int sr_session_save(const char *filename, /* metadata */ fprintf(meta, "capturefile = logic-1\n"); - fprintf(meta, "unitsize = %d\n", ds->ds_unitsize); + fprintf(meta, "unitsize = %d\n", unitsize); fprintf(meta, "total probes = %d\n", g_slist_length(sdi->probes)); - if (sr_dev_has_hwcap(sdi, SR_HWCAP_SAMPLERATE)) { - if (sr_info_get(sdi->driver, SR_DI_CUR_SAMPLERATE, + if (sr_dev_has_option(sdi, SR_CONF_SAMPLERATE)) { + if (sr_config_get(sdi->driver, SR_CONF_SAMPLERATE, (const void **)&samplerate, sdi) == SR_OK) { s = sr_samplerate_string(*samplerate); fprintf(meta, "samplerate = %s\n", s); @@ -271,22 +273,8 @@ SR_API int sr_session_save(const char *filename, } } - /* dump datastore into logic-n */ - buf = g_try_malloc(ds->num_units * ds->ds_unitsize + - DATASTORE_CHUNKSIZE); - if (!buf) { - sr_err("%s: buf malloc failed", __func__); - return SR_ERR_MALLOC; - } - - bufcnt = 0; - for (d = ds->chunklist; d; d = d->next) { - memcpy(buf + bufcnt, d->data, - DATASTORE_CHUNKSIZE); - bufcnt += DATASTORE_CHUNKSIZE; - } if (!(logicsrc = zip_source_buffer(zipfile, buf, - ds->num_units * ds->ds_unitsize, TRUE))) + units * unitsize, FALSE))) return SR_ERR; snprintf(rawname, 15, "logic-1"); if (zip_add(zipfile, rawname, logicsrc) == -1)