]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/ikalogic-scanalogic2/protocol.c
uni-t-ut181a: silence compiler warning, use of uninitialized variable
[libsigrok.git] / src / hardware / ikalogic-scanalogic2 / protocol.c
index 663ff527a75c42c2851448a3dd716cd983393489..f4ceb67ab4b26b2f1ea569c7682c357cddb9b219 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <config.h>
 #include "protocol.h"
 
-extern struct sr_dev_driver ikalogic_scanalogic2_driver_info;
-static struct sr_dev_driver *di = &ikalogic_scanalogic2_driver_info;
-
 extern uint64_t sl2_samplerates[NUM_SAMPLERATES];
 
 static void stop_acquisition(struct sr_dev_inst *sdi)
 {
-       struct drv_context *drvc = sdi->driver->priv;
-       struct dev_context *devc;
-       struct sr_datafeed_packet packet;
+       struct drv_context *drvc = sdi->driver->context;
 
-       devc = sdi->priv;
-
-       /* Remove USB file descriptors from polling. */
        usb_source_remove(sdi->session, drvc->sr_ctx);
 
-       packet.type = SR_DF_END;
-       sr_session_send(devc->cb_data, &packet);
+       std_session_send_df_end(sdi);
 
        sdi->status = SR_ST_ACTIVE;
 }
 
 static void abort_acquisition(struct sr_dev_inst *sdi)
 {
-       struct drv_context *drvc = sdi->driver->priv;
-       struct dev_context *devc;
-       struct sr_datafeed_packet packet;
+       struct drv_context *drvc = sdi->driver->context;
 
-       devc = sdi->priv;
-
-       /* Remove USB file descriptors from polling. */
        usb_source_remove(sdi->session, drvc->sr_ctx);
 
-       packet.type = SR_DF_END;
-       sr_session_send(devc->cb_data, &packet);
+       std_session_send_df_end(sdi);
 
-       sdi->driver->dev_close(sdi);
+       sr_dev_close(sdi);
 }
 
 static void buffer_sample_data(const struct sr_dev_inst *sdi)
@@ -136,10 +122,8 @@ static void process_sample_data(const struct sr_dev_inst *sdi)
                         * through the capture ratio.
                         */
                        if (devc->trigger_type != TRIGGER_TYPE_NONE &&
-                                       devc->pre_trigger_samples == 0) {
-                               packet.type = SR_DF_TRIGGER;
-                               sr_session_send(devc->cb_data, &packet);
-                       }
+                                       devc->pre_trigger_samples == 0)
+                               std_session_send_df_trigger(sdi);
                }
 
                for (; k >= 0; k--) {
@@ -176,10 +160,9 @@ static void process_sample_data(const struct sr_dev_inst *sdi)
                                logic.length = n;
                                logic.unitsize = 1;
                                logic.data = buffer;
-                               sr_session_send(devc->cb_data, &packet);
+                               sr_session_send(sdi, &packet);
 
-                               packet.type = SR_DF_TRIGGER;
-                               sr_session_send(devc->cb_data, &packet);
+                               std_session_send_df_trigger(sdi);
 
                                n = 0;
                        }
@@ -192,13 +175,14 @@ static void process_sample_data(const struct sr_dev_inst *sdi)
                logic.length = n;
                logic.unitsize = 1;
                logic.data = buffer;
-               sr_session_send(devc->cb_data, &packet);
+               sr_session_send(sdi, &packet);
        }
 }
 
 SR_PRIV int ikalogic_scanalogic2_receive_data(int fd, int revents, void *cb_data)
 {
        struct sr_dev_inst *sdi;
+       struct sr_dev_driver *di;
        struct dev_context *devc;
        struct drv_context *drvc;
        struct timeval tv;
@@ -214,7 +198,8 @@ SR_PRIV int ikalogic_scanalogic2_receive_data(int fd, int revents, void *cb_data
        if (!(devc = sdi->priv))
                return TRUE;
 
-       drvc = di->priv;
+       di = sdi->driver;
+       drvc = di->context;
        current_time = g_get_monotonic_time();
 
        if (devc->state == STATE_WAIT_DATA_READY &&
@@ -257,7 +242,7 @@ SR_PRIV int ikalogic_scanalogic2_receive_data(int fd, int revents, void *cb_data
        return TRUE;
 }
 
-SR_PRIV void sl2_receive_transfer_in( struct libusb_transfer *transfer)
+SR_PRIV void LIBUSB_CALL sl2_receive_transfer_in( struct libusb_transfer *transfer)
 {
        struct sr_dev_inst *sdi;
        struct dev_context *devc;
@@ -268,7 +253,8 @@ SR_PRIV void sl2_receive_transfer_in( struct libusb_transfer *transfer)
        devc = sdi->priv;
 
        if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
-               sr_err("Transfer to device failed: %i.", transfer->status);
+               sr_err("Transfer to device failed: %s.",
+                       libusb_error_name(transfer->status));
                devc->transfer_error = TRUE;
                return;
        }
@@ -388,7 +374,7 @@ SR_PRIV void sl2_receive_transfer_in( struct libusb_transfer *transfer)
        }
 }
 
-SR_PRIV void sl2_receive_transfer_out( struct libusb_transfer *transfer)
+SR_PRIV void LIBUSB_CALL sl2_receive_transfer_out( struct libusb_transfer *transfer)
 {
        struct sr_dev_inst *sdi;
        struct dev_context *devc;
@@ -398,7 +384,8 @@ SR_PRIV void sl2_receive_transfer_out( struct libusb_transfer *transfer)
        devc = sdi->priv;
 
        if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
-               sr_err("Transfer to device failed: %i.", transfer->status);
+               sr_err("Transfer to device failed: %s.",
+                       libusb_error_name(transfer->status));
                devc->transfer_error = TRUE;
                return;
        }
@@ -541,25 +528,6 @@ SR_PRIV int sl2_convert_trigger(const struct sr_dev_inst *sdi)
        return SR_OK;
 }
 
-SR_PRIV int sl2_set_capture_ratio(const struct sr_dev_inst *sdi,
-                                 uint64_t capture_ratio)
-{
-       struct dev_context *devc;
-
-       devc = sdi->priv;
-
-       if (capture_ratio > 100) {
-               sr_err("Invalid capture ratio: %" PRIu64 " %%.", capture_ratio);
-               return SR_ERR_ARG;
-       }
-
-       sr_info("Capture ratio set to %" PRIu64 " %%.", capture_ratio);
-
-       devc->capture_ratio = capture_ratio;
-
-       return SR_OK;
-}
-
 SR_PRIV int sl2_set_after_trigger_delay(const struct sr_dev_inst *sdi,
                                        uint64_t after_trigger_delay)
 {
@@ -635,14 +603,14 @@ SR_PRIV void sl2_calculate_trigger_samples(const struct sr_dev_inst *sdi)
        devc->post_trigger_bytes = post_trigger_bytes;
 }
 
-SR_PRIV int sl2_get_device_info(struct sr_usb_dev_inst usb,
-               struct device_info *dev_info)
+SR_PRIV int sl2_get_device_info(struct sr_dev_driver *di,
+               struct sr_usb_dev_inst usb, struct device_info *dev_info)
 {
        struct drv_context *drvc;
        uint8_t buffer[PACKET_LENGTH];
        int ret;
 
-       drvc = di->priv;
+       drvc = di->context;
 
        if (!dev_info)
                return SR_ERR_ARG;
@@ -650,10 +618,6 @@ SR_PRIV int sl2_get_device_info(struct sr_usb_dev_inst usb,
        if (sr_usb_open(drvc->sr_ctx->libusb_ctx, &usb) != SR_OK)
                return SR_ERR;
 
-       /*
-        * Determine if a kernel driver is active on this interface and, if so,
-        * detach it.
-        */
        if (libusb_kernel_driver_active(usb.devhdl, USB_INTERFACE) == 1) {
                ret = libusb_detach_kernel_driver(usb.devhdl,
                        USB_INTERFACE);
@@ -753,12 +717,12 @@ SR_PRIV int sl2_transfer_in(libusb_device_handle *dev_handle, uint8_t *data)
 {
        return libusb_control_transfer(dev_handle, USB_REQUEST_TYPE_IN,
                USB_HID_GET_REPORT, USB_HID_REPORT_TYPE_FEATURE, USB_INTERFACE,
-               (unsigned char *)data, PACKET_LENGTH, USB_TIMEOUT);
+               (unsigned char *)data, PACKET_LENGTH, USB_TIMEOUT_MS);
 }
 
 SR_PRIV int sl2_transfer_out(libusb_device_handle *dev_handle, uint8_t *data)
 {
        return libusb_control_transfer(dev_handle, USB_REQUEST_TYPE_OUT,
                USB_HID_SET_REPORT, USB_HID_REPORT_TYPE_FEATURE, USB_INTERFACE,
-               (unsigned char *)data, PACKET_LENGTH, USB_TIMEOUT);
+               (unsigned char *)data, PACKET_LENGTH, USB_TIMEOUT_MS);
 }