X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fchronovu-la%2Fapi.c;h=0c94b398586629a57659310720cdfa5acc0b4e7e;hb=f1ba6b4b2c9a8ecf90bb31efb218752aa7e49d1a;hp=5c58e4f96b1e3027f8860fd50aa39ca8e3ccb764;hpb=dd5c48a6d567a3cac62c4b0058588273bbeea171;p=libsigrok.git diff --git a/src/hardware/chronovu-la/api.c b/src/hardware/chronovu-la/api.c index 5c58e4f9..0c94b398 100644 --- a/src/hardware/chronovu-la/api.c +++ b/src/hardware/chronovu-la/api.c @@ -14,8 +14,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ #include @@ -44,8 +43,6 @@ static const int32_t trigger_matches[] = { SR_TRIGGER_FALLING, }; -static int dev_acquisition_stop(struct sr_dev_inst *sdi); - static void clear_helper(void *priv) { struct dev_context *devc; @@ -61,20 +58,17 @@ static int dev_clear(const struct sr_dev_driver *di) return std_dev_clear(di, clear_helper); } -static int add_device(struct sr_dev_driver *di, int model, - struct libusb_device_descriptor *des, const char *serial_num, - const char *connection_id, libusb_device *usbdev, GSList **devices) +static int add_device(int model, struct libusb_device_descriptor *des, + const char *serial_num, const char *connection_id, libusb_device *usbdev, + GSList **devices) { int ret; unsigned int i; struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; ret = SR_OK; - drvc = di->context; - /* Allocate memory for our private device context. */ devc = g_malloc0(sizeof(struct dev_context)); @@ -116,7 +110,6 @@ static int add_device(struct sr_dev_driver *di, int model, sdi->connection_id = g_strdup(connection_id); sdi->conn = sr_usb_dev_inst_new(libusb_get_bus_number(usbdev), libusb_get_device_address(usbdev), NULL); - sdi->driver = di; sdi->priv = devc; for (i = 0; i < devc->prof->num_channels; i++) @@ -124,7 +117,6 @@ static int add_device(struct sr_dev_driver *di, int model, cv_channel_names[i]); *devices = g_slist_append(*devices, sdi); - drvc->instances = g_slist_append(drvc->instances, sdi); if (ret == SR_OK) return SR_OK; @@ -149,7 +141,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) char product[64], serial_num[64], connection_id[64]; drvc = di->context; - drvc->instances = NULL; conn = NULL; for (l = options; l; l = l->next) { @@ -225,7 +216,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_get_bus_number(devlist[i]), libusb_get_device_address(devlist[i]), connection_id); - if ((ret = add_device(di, model, &des, serial_num, connection_id, + if ((ret = add_device(model, &des, serial_num, connection_id, devlist[i], &devices)) < 0) { sr_dbg("Failed to add device: %d.", ret); } @@ -234,7 +225,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) libusb_free_device_list(devlist, 1); g_slist_free_full(conn_devices, (GDestroyNotify)sr_usb_dev_inst_free); - return devices; + return std_scan_complete(di, devices); } static int dev_open(struct sr_dev_inst *sdi) @@ -281,15 +272,12 @@ static int dev_open(struct sr_dev_inst *sdi) /* Wait 100ms. */ g_usleep(100 * 1000); - sdi->status = SR_ST_ACTIVE; - - if (ret == SR_OK) - return SR_OK; + return SR_OK; err_ftdi_free: ftdi_free(devc->ftdic); /* Close device (if open), free FTDI context. */ devc->ftdic = NULL; - return ret; + return SR_ERR; } static int dev_close(struct sr_dev_inst *sdi) @@ -297,17 +285,16 @@ static int dev_close(struct sr_dev_inst *sdi) int ret; struct dev_context *devc; - if (sdi->status != SR_ST_ACTIVE) - return SR_OK; - devc = sdi->priv; - if (devc->ftdic && (ret = ftdi_usb_close(devc->ftdic)) < 0) + if (!devc->ftdic) + return SR_ERR_BUG; + + if ((ret = ftdi_usb_close(devc->ftdic)) < 0) sr_err("Failed to close FTDI device (%d): %s.", ret, ftdi_get_error_string(devc->ftdic)); - sdi->status = SR_ST_INACTIVE; - return SR_OK; + return (ret == 0) ? SR_OK : SR_ERR; } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -346,9 +333,6 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd (void)cg; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - devc = sdi->priv; switch (key) { @@ -459,7 +443,7 @@ static int receive_data(int fd, int revents, void *cb_data) /* Get one block of data. */ if ((ret = cv_read_block(devc)) < 0) { sr_err("Failed to read data block: %d.", ret); - dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); return FALSE; } @@ -482,7 +466,7 @@ static int receive_data(int fd, int revents, void *cb_data) for (i = 0; i < NUM_BLOCKS; i++) cv_send_block_to_session_bus(sdi, i); - dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); return TRUE; } @@ -493,9 +477,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) uint8_t buf[8]; int bytes_to_write, bytes_written; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - devc = sdi->priv; if (!devc->ftdic) { @@ -543,7 +524,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) sr_dbg("Hardware acquisition started successfully."); - std_session_send_df_header(sdi, LOG_PREFIX); + std_session_send_df_header(sdi); /* Time when we should be done (for detecting trigger timeouts). */ devc->done = (devc->divcount + 1) * devc->prof->trigger_constant + @@ -559,9 +540,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) static int dev_acquisition_stop(struct sr_dev_inst *sdi) { - sr_dbg("Stopping acquisition."); sr_session_source_remove(sdi->session, -1); - std_session_send_df_end(sdi, LOG_PREFIX); + std_session_send_df_end(sdi); return SR_OK; }