X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=session_driver.c;h=bf6dd8ed546a1c9bc2cf3765b776e23d79973671;hb=a5b35a167a32ffbaee1ce9c0de8501f781f733d1;hp=ed397a96e466a250020dfd73c2da5a61f00da28b;hpb=40dda2c3a509e9e031078427e32249e2ebc33ec5;p=libsigrok.git diff --git a/session_driver.c b/session_driver.c index ed397a96..bf6dd8ed 100644 --- a/session_driver.c +++ b/session_driver.c @@ -47,31 +47,6 @@ static const int hwcaps[] = { 0, }; -/** - * TODO. - * - * @param dev_index TODO. - */ -static struct session_vdev *get_vdev_by_index(int dev_index) -{ - struct sr_dev_inst *sdi; - struct session_vdev *vdev; - - /* TODO: Sanity checks on dev_index. */ - - if (!(sdi = sr_dev_inst_get(dev_insts, dev_index))) { - sr_err("session driver: %s: device instance with device " - "index %d was not found", __func__, dev_index); - return NULL; - } - - /* TODO: Is sdi->priv == NULL valid? */ - - vdev = sdi->priv; - - return vdev; -} - /** * TODO. * @@ -151,7 +126,7 @@ static int hw_cleanup(void); static int hw_init(void) { - return 0; + return SR_OK; } /** @@ -171,14 +146,8 @@ static int hw_cleanup(void) return SR_OK; } -static int hw_dev_open(int dev_index) +static int hw_dev_open(struct sr_dev_inst *sdi) { - struct sr_dev_inst *sdi; - - sdi = sr_dev_inst_new(dev_index, SR_ST_INITIALIZING, - NULL, NULL, NULL); - if (!sdi) - return SR_ERR; if (!(sdi->priv = g_try_malloc0(sizeof(struct session_vdev)))) { sr_err("session driver: %s: sdi->priv malloc failed", __func__); @@ -190,20 +159,27 @@ static int hw_dev_open(int dev_index) return SR_OK; } -static const void *hw_dev_info_get(int dev_index, int dev_info_id) +static int hw_info_get(int info_id, const void **data, + const struct sr_dev_inst *sdi) { struct session_vdev *vdev; - void *info; - - if (dev_info_id != SR_DI_CUR_SAMPLERATE) - return NULL; - - if (!(vdev = get_vdev_by_index(dev_index))) - return NULL; - info = &vdev->samplerate; + switch (info_id) { + case SR_DI_HWCAPS: + *data = hwcaps; + break; + case SR_DI_CUR_SAMPLERATE: + if (sdi) { + vdev = sdi->priv; + *data = &vdev->samplerate; + } else + return SR_ERR; + break; + default: + return SR_ERR_ARG; + } - return info; + return SR_OK; } static int hw_dev_status_get(int dev_index) @@ -217,24 +193,13 @@ static int hw_dev_status_get(int dev_index) return SR_ERR; } -/** - * Get the list of hardware capabilities. - * - * @return A pointer to the (hardware) capabilities of this virtual session - * driver. This could be NULL, if no such capabilities exist. - */ -static const int *hw_hwcap_get_all(void) -{ - return hwcaps; -} - -static int hw_dev_config_set(int dev_index, int hwcap, const void *value) +static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, + const void *value) { struct session_vdev *vdev; const uint64_t *tmp_u64; - if (!(vdev = get_vdev_by_index(dev_index))) - return SR_ERR; + vdev = sdi->priv; switch (hwcap) { case SR_HWCAP_SAMPLERATE: @@ -270,7 +235,8 @@ static int hw_dev_config_set(int dev_index, int hwcap, const void *value) return SR_OK; } -static int hw_dev_acquisition_start(int dev_index, void *cb_data) +static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, + void *cb_data) { struct zip_stat zs; struct session_vdev *vdev; @@ -279,8 +245,7 @@ static int hw_dev_acquisition_start(int dev_index, void *cb_data) struct sr_datafeed_meta_logic meta; int ret; - if (!(vdev = get_vdev_by_index(dev_index))) - return SR_ERR; + vdev = sdi->priv; sr_info("session_driver: opening archive %s file %s", vdev->sessionfile, vdev->capturefile); @@ -344,9 +309,8 @@ SR_PRIV struct sr_dev_driver session_driver = { .cleanup = hw_cleanup, .dev_open = hw_dev_open, .dev_close = NULL, - .dev_info_get = hw_dev_info_get, + .info_get = hw_info_get, .dev_status_get = hw_dev_status_get, - .hwcap_get_all = hw_hwcap_get_all, .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = NULL,