X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fikalogic-scanalogic2%2Fprotocol.h;h=3a14b20b415b740600b7656ff873a96e71794d17;hb=HEAD;hp=1756ed966e56d30af8e642f363f16ba041591dc2;hpb=79914b3a62adb1b0b054d23c2721ce80eb7ba9ea;p=libsigrok.git diff --git a/hardware/ikalogic-scanalogic2/protocol.h b/hardware/ikalogic-scanalogic2/protocol.h deleted file mode 100644 index 1756ed96..00000000 --- a/hardware/ikalogic-scanalogic2/protocol.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * This file is part of the libsigrok project. - * - * Copyright (C) 2013 Marc Schink - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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, see . - */ - -#ifndef LIBSIGROK_HARDWARE_IKALOGIC_SCANALOGIC2_PROTOCOL_H -#define LIBSIGROK_HARDWARE_IKALOGIC_SCANALOGIC2_PROTOCOL_H - -#include -#include -#include -#include -#include "libsigrok.h" -#include "libsigrok-internal.h" - -/* Message logging helpers with subsystem-specific prefix string. */ -#define LOG_PREFIX "ikalogic-scanalogic2: " -#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args) -#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args) -#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args) -#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args) -#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args) -#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args) - -#define VENDOR_NAME "IKALOGIC" -#define MODEL_NAME "Scanalogic-2" - -#define USB_VID_PID "20a0.4123" -#define USB_INTERFACE 0 -#define USB_TIMEOUT 5000 - -#define USB_REQUEST_TYPE_IN (LIBUSB_REQUEST_TYPE_CLASS | \ - LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN) - -#define USB_REQUEST_TYPE_OUT (LIBUSB_REQUEST_TYPE_CLASS | \ - LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT) - -#define USB_HID_SET_REPORT 0x09 -#define USB_HID_REPORT_TYPE_FEATURE 0x300 - -#define NUM_SAMPLERATES 11 -#define NUM_PROBES 4 - -#define TRIGGER_TYPES "rfc" - -/* - * Number of sample bytes and samples the device can acquire. Note that the - * vendor software can acquire 32736 sample bytes only but the device is capable - * to acquire up to 32766 sample bytes. - */ -#define MAX_DEV_SAMPLE_BYTES 32766 -#define MAX_DEV_SAMPLES (MAX_INT_SAMPLE_BYTES * 8) - -/* Number of sample bytes and samples the driver can acquire. */ -#define MAX_SAMPLE_BYTES (MAX_DEV_SAMPLE_BYTES - 1) -#define MAX_SAMPLES (MAX_SAMPLE_BYTES * 8) - -/* Maximum time that the trigger can be delayed in milliseconds. */ -#define MAX_AFTER_TRIGGER_DELAY 65000 - -#define PACKET_LENGTH 128 - -/* Number of sample bytes per packet where a sample byte contains 8 samples. */ -#define PACKET_NUM_SAMPLE_BYTES 124 - -/* Number of samples per packet. */ -#define PACKET_NUM_SAMPLES (PACKET_NUM_SAMPLE_BYTES * 8) - -#define DEFAULT_SAMPLERATE SR_KHZ(1.25) - -/* - * Time interval between the last status of available data received and the - * moment when the next status request will be sent in microseconds. - */ -#define WAIT_DATA_READY_INTERVAL 1500000 - -#define CMD_SAMPLE 0x01 -#define CMD_RESET 0x02 -#define CMD_IDLE 0x07 -#define CMD_INFO 0x0a - -#define TRIGGER_CHANNEL_ALL 0x00 -#define TRIGGER_CHANNEL_0 0x01 -#define TRIGGER_CHANNEL_1 0x02 -#define TRIGGER_CHANNEL_2 0x03 - -#define TRIGGER_TYPE_NEGEDGE 0x00 -#define TRIGGER_TYPE_POSEDGE 0x01 -#define TRIGGER_TYPE_ANYEDGE 0x02 -#define TRIGGER_TYPE_NONE 0x03 - -#define STATUS_DATA_READY 0x60 -#define STATUS_WAITING_FOR_TRIGGER 0x61 -#define STATUS_SAMPLING 0x62 -#define STATUS_DEVICE_READY 0x63 - -struct device_info { - /* Serial number of the device. */ - uint32_t serial; - - /* Major version of the firmware. */ - uint8_t fw_ver_major; - - /* Minor version of the firmware. */ - uint8_t fw_ver_minor; -}; - -enum { - STATE_IDLE = 0, - STATE_SAMPLE, - STATE_WAIT_DATA_READY, - STATE_RECEIVE_DATA, - STATE_RESET_AND_IDLE, - STATE_WAIT_DEVICE_READY -}; - -/** Private, per-device-instance driver context. */ -struct dev_context { - /* Current selected samplerate. */ - uint64_t samplerate; - - /* Device specific identifier for the current samplerate. */ - uint8_t samplerate_id; - - /* Current sampling limit. */ - uint64_t limit_samples; - - /* Calculated number of pre-trigger samples. */ - uint64_t pre_trigger_samples; - - /* Number of pre- and post-trigger sample bytes to acquire. */ - uint16_t pre_trigger_bytes; - uint16_t post_trigger_bytes; - - /* Device specific settings for the trigger. */ - uint8_t trigger_channel; - uint8_t trigger_type; - - unsigned int capture_ratio; - - /* Time that the trigger will be delayed in milliseconds. */ - uint16_t after_trigger_delay; - - void *cb_data; - - /* Array to provide an index based access to all probes. */ - const struct sr_probe *probes[NUM_PROBES]; - - unsigned int num_usbfd; - int *usbfd; - - struct libusb_transfer *xfer_in, *xfer_out; - - /* - * Buffer to store setup and payload data for incoming and outgoing - * transfers. - */ - uint8_t xfer_buf_in[LIBUSB_CONTROL_SETUP_SIZE + PACKET_LENGTH]; - uint8_t xfer_buf_out[LIBUSB_CONTROL_SETUP_SIZE + PACKET_LENGTH]; - - /* Pointers to the payload of incoming and outgoing transfers. */ - uint8_t *xfer_data_in, *xfer_data_out; - - /* Current state of the state machine */ - unsigned int state; - - /* Next state of the state machine. */ - unsigned int next_state; - - /* - * Locking variable to ensure that no status about available data will - * be requested until the last status was received. - */ - gboolean wait_data_ready_locked; - - /* - * Time when the last response about the status of available data was - * received. - */ - int64_t wait_data_ready_time; - - /* - * Indicates that stopping of the acquisition is currently in progress. - */ - gboolean stopping_in_progress; - - /* - * Buffer which contains the samples received from the device for each - * channel except the last one. The samples of the last channel will be - * processed directly after they will be received. - */ - uint8_t sample_buffer[NUM_PROBES - 1][MAX_DEV_SAMPLE_BYTES]; - - /* Expected number of sample packets for each channel. */ - uint16_t num_sample_packets; - - /* Number of samples already processed. */ - uint64_t samples_processed; - - /* Sample packet number that is currently processed. */ - uint16_t sample_packet; - - /* Channel number that is currently processed. */ - uint8_t channel; - - /* Number of enabled probes. */ - unsigned int num_enabled_probes; - - /* Array to provide a sequential access to all enabled probe indices. */ - uint8_t probe_map[NUM_PROBES]; - - /* Indicates whether a transfer failed. */ - gboolean transfer_error; -}; - -SR_PRIV int ikalogic_scanalogic2_receive_data(int fd, int revents, void *cb_data); -SR_PRIV void sl2_receive_transfer_in(struct libusb_transfer *transfer); -SR_PRIV void sl2_receive_transfer_out(struct libusb_transfer *transfer); -SR_PRIV int sl2_set_samplerate(const struct sr_dev_inst *sdi, - uint64_t samplerate); -SR_PRIV int sl2_set_limit_samples(const struct sr_dev_inst *sdi, - uint64_t limit_samples); -SR_PRIV void sl2_configure_trigger(const struct sr_dev_inst *sdi); -SR_PRIV int sl2_set_capture_ratio(const struct sr_dev_inst *sdi, - uint64_t capture_ratio); -SR_PRIV int sl2_set_after_trigger_delay(const struct sr_dev_inst *sdi, - uint64_t after_trigger_delay); -SR_PRIV void sl2_calculate_trigger_samples(const struct sr_dev_inst *sdi); -SR_PRIV int sl2_get_device_info(struct sr_usb_dev_inst usb, - struct device_info *dev_info); -SR_PRIV int sl2_transfer_in(libusb_device_handle *dev_handle, uint8_t *data); -SR_PRIV int sl2_transfer_out(libusb_device_handle *dev_handle, uint8_t *data); - -#endif