X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fikalogic-scanalogic2%2Fprotocol.c;h=b1a85b03a621110d64a16c4397d2f01f1524be7f;hb=599f9e1deb6b6a4a75e00e29d86935845164eeed;hp=663ff527a75c42c2851448a3dd716cd983393489;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git
diff --git a/src/hardware/ikalogic-scanalogic2/protocol.c b/src/hardware/ikalogic-scanalogic2/protocol.c
index 663ff527..b1a85b03 100644
--- a/src/hardware/ikalogic-scanalogic2/protocol.c
+++ b/src/hardware/ikalogic-scanalogic2/protocol.c
@@ -17,45 +17,31 @@
* along with this program. If not, see .
*/
+#include
#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;
-
- devc = sdi->priv;
+ struct drv_context *drvc = sdi->driver->context;
- /* 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)
@@ -138,7 +124,7 @@ static void process_sample_data(const struct sr_dev_inst *sdi)
if (devc->trigger_type != TRIGGER_TYPE_NONE &&
devc->pre_trigger_samples == 0) {
packet.type = SR_DF_TRIGGER;
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
}
}
@@ -176,10 +162,10 @@ 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);
+ sr_session_send(sdi, &packet);
n = 0;
}
@@ -192,13 +178,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 +201,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 +245,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 +256,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 +377,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 +387,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 +531,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 +606,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 +621,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 +720,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);
}