X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fikalogic-scanalogic2%2Fprotocol.h;fp=hardware%2Fikalogic-scanalogic2%2Fprotocol.h;h=0000000000000000000000000000000000000000;hb=155b680da482cea2381becb73c51cfb838bff31e;hp=5e7c7b3b40686e9a149681dbf747709f2c1566ed;hpb=43cd4637285833706f8a404ca027bcf0ee75b9ae;p=libsigrok.git diff --git a/hardware/ikalogic-scanalogic2/protocol.h b/hardware/ikalogic-scanalogic2/protocol.h deleted file mode 100644 index 5e7c7b3b..00000000 --- a/hardware/ikalogic-scanalogic2/protocol.h +++ /dev/null @@ -1,237 +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" - -#define LOG_PREFIX "ikalogic-scanalogic2" - -#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_GET_REPORT 0x01 -#define USB_HID_SET_REPORT 0x09 -#define USB_HID_REPORT_TYPE_FEATURE 0x300 - -#define NUM_SAMPLERATES 11 -#define NUM_CHANNELS 4 - -/* - * 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 channels. */ - const struct sr_channel *channels[NUM_CHANNELS]; - - 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_CHANNELS - 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 channels. */ - unsigned int num_enabled_channels; - - /* Array to provide a sequential access to all enabled channel indices. */ - uint8_t channel_map[NUM_CHANNELS]; - - /* 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 int sl2_convert_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