/*
- * This file is part of the sigrok project.
+ * This file is part of the libsigrok project.
*
* Copyright (C) 2010 Håvard Espeland <gus@ping.uio.no>,
* Copyright (C) 2010 Martin Stensgård <mastensg@ping.uio.no>
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef SIGROK_ASIX_SIGMA_H
-#define SIGROK_ASIX_SIGMA_H
+#ifndef LIBSIGROK_HARDWARE_ASIX_SIGMA_ASIX_SIGMA_H
+#define LIBSIGROK_HARDWARE_ASIX_SIGMA_ASIX_SIGMA_H
+
+#define LOG_PREFIX "asix-sigma"
enum sigma_write_register {
WRITE_CLOCK_SELECT = 0,
READ_TEST = 15,
};
-#define REG_ADDR_LOW (0 << 4)
-#define REG_ADDR_HIGH (1 << 4)
-#define REG_DATA_LOW (2 << 4)
-#define REG_DATA_HIGH_WRITE (3 << 4)
-#define REG_READ_ADDR (4 << 4)
-#define REG_DRAM_WAIT_ACK (5 << 4)
+#define REG_ADDR_LOW (0x0 << 4)
+#define REG_ADDR_HIGH (0x1 << 4)
+#define REG_DATA_LOW (0x2 << 4)
+#define REG_DATA_HIGH_WRITE (0x3 << 4)
+#define REG_READ_ADDR (0x4 << 4)
+#define REG_DRAM_WAIT_ACK (0x5 << 4)
/* Bit (1 << 4) can be low or high (double buffer / cache) */
-#define REG_DRAM_BLOCK (6 << 4)
-#define REG_DRAM_BLOCK_BEGIN (8 << 4)
-#define REG_DRAM_BLOCK_DATA (10 << 4)
+#define REG_DRAM_BLOCK (0x6 << 4)
+#define REG_DRAM_BLOCK_BEGIN (0x8 << 4)
+#define REG_DRAM_BLOCK_DATA (0xa << 4)
#define LEDSEL0 6
#define LEDSEL1 7
#define CHUNK_SIZE 1024
+/*
+ * The entire ASIX Sigma DRAM is an array of struct sigma_dram_line[1024];
+ */
+
+/* One "DRAM cluster" contains a timestamp and 7 samples, 16b total. */
+struct sigma_dram_cluster {
+ uint8_t timestamp_lo;
+ uint8_t timestamp_hi;
+ struct {
+ uint8_t sample_hi;
+ uint8_t sample_lo;
+ } samples[7];
+};
+
+/* One "DRAM line" contains 64 "DRAM clusters", 1024b total. */
+struct sigma_dram_line {
+ struct sigma_dram_cluster cluster[64];
+};
+
struct clockselect_50 {
uint8_t async;
uint8_t fraction;
- uint16_t disabled_probes;
+ uint16_t disabled_channels;
};
/* The effect of all these are still a bit unclear. */
/* Trigger configuration */
struct sigma_trigger {
- /* Only two probes can be used in mask. */
+ /* Only two channels can be used in mask. */
uint16_t risingmask;
uint16_t fallingmask;
SIGMA_DOWNLOAD,
} state;
- uint32_t stoppos, triggerpos;
uint16_t lastts;
uint16_t lastsample;
-
- int triggerchunk;
- int chunks_downloaded;
};
-struct sigma {
+/* Private, per-device-instance driver context. */
+struct dev_context {
struct ftdi_context ftdic;
uint64_t cur_samplerate;
- uint32_t limit_msec;
+ uint64_t period_ps;
+ uint64_t limit_msec;
struct timeval start_tv;
int cur_firmware;
- int num_probes;
+ int num_channels;
+ int cur_channels;
int samples_per_event;
int capture_ratio;
struct sigma_trigger trigger;
int use_triggers;
struct sigma_state state;
- gpointer session_id;
+ void *cb_data;
};
#endif