X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Fhardware%2Fsaleae-logic16%2Fprotocol.h;fp=src%2Fhardware%2Fsaleae-logic16%2Fprotocol.h;h=8a1ded823900e7ae41c194f355d1a73b5f07fb15;hp=0000000000000000000000000000000000000000;hb=155b680da482cea2381becb73c51cfb838bff31e;hpb=43cd4637285833706f8a404ca027bcf0ee75b9ae diff --git a/src/hardware/saleae-logic16/protocol.h b/src/hardware/saleae-logic16/protocol.h new file mode 100644 index 00000000..8a1ded82 --- /dev/null +++ b/src/hardware/saleae-logic16/protocol.h @@ -0,0 +1,91 @@ +/* + * This file is part of the libsigrok project. + * + * Copyright (C) 2013 Marcus Comstedt + * Copyright (C) 2013 Bert Vermeulen + * Copyright (C) 2012 Joel Holdsworth + * + * 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_SALEAE_LOGIC16_PROTOCOL_H +#define LIBSIGROK_HARDWARE_SALEAE_LOGIC16_PROTOCOL_H + +#include +#include +#include "libsigrok.h" +#include "libsigrok-internal.h" + +#define LOG_PREFIX "saleae-logic16" + +enum voltage_range { + VOLTAGE_RANGE_UNKNOWN, + VOLTAGE_RANGE_18_33_V, /* 1.8V and 3.3V logic */ + VOLTAGE_RANGE_5_V, /* 5V logic */ +}; + +/** Private, per-device-instance driver context. */ +struct dev_context { + /* + * Since we can't keep track of a Logic16 device after upgrading + * the firmware (it renumerates into a different device address + * after the upgrade) this is like a global lock. No device will open + * until a proper delay after the last device was upgraded. + */ + int64_t fw_updated; + + /** The currently configured samplerate of the device. */ + uint64_t cur_samplerate; + + /** Maximum number of samples to capture, if nonzero. */ + uint64_t limit_samples; + + /** The currently configured input voltage of the device. */ + enum voltage_range cur_voltage_range; + + /** The input voltage selected by the user. */ + enum voltage_range selected_voltage_range; + + /** Channels to use. */ + uint16_t cur_channels; + + /* EEPROM data from address 8. */ + uint8_t eeprom_data[8]; + + int64_t sent_samples; + int submitted_transfers; + int empty_transfer_count; + int num_channels; + int cur_channel; + uint16_t channel_masks[16]; + uint16_t channel_data[16]; + uint8_t *convbuffer; + size_t convbuffer_size; + struct soft_trigger_logic *stl; + gboolean trigger_fired; + + void *cb_data; + unsigned int num_transfers; + struct libusb_transfer **transfers; + struct sr_context *ctx; +}; + +SR_PRIV int logic16_setup_acquisition(const struct sr_dev_inst *sdi, + uint64_t samplerate, uint16_t channels); +SR_PRIV int logic16_start_acquisition(const struct sr_dev_inst *sdi); +SR_PRIV int logic16_abort_acquisition(const struct sr_dev_inst *sdi); +SR_PRIV int logic16_init_device(const struct sr_dev_inst *sdi); +SR_PRIV void logic16_receive_transfer(struct libusb_transfer *transfer); + +#endif