2 * This file is part of the libsigrok project.
4 * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef LIBSIGROK_HARDWARE_OPENBENCH_LOGIC_SNIFFER_PROTOCOL_H
21 #define LIBSIGROK_HARDWARE_OPENBENCH_LOGIC_SNIFFER_PROTOCOL_H
26 #include <libsigrok/libsigrok.h>
27 #include "libsigrok-internal.h"
29 #define LOG_PREFIX "openbench-logic-sniffer"
31 #define NUM_BASIC_TRIGGER_STAGES 4
32 #define CLOCK_RATE SR_MHZ(100)
33 #define MIN_NUM_SAMPLES 4
34 #define DEFAULT_SAMPLERATE SR_KHZ(200)
37 #define CMD_RESET 0x00
38 #define CMD_ARM_BASIC_TRIGGER 0x01
40 #define CMD_METADATA 0x04
41 #define CMD_FINISH_NOW 0x05 /* extension of Demon Core */
42 #define CMD_QUERY_INPUT_DATA 0x06 /* extension of Demon Core */
43 #define CMD_QUERY_CAPTURE_STATE 0x07 /* extension of Demon Core */
44 #define CMD_RETURN_CAPTURE_DATA 0x08 /* extension of Demon Core */
45 #define CMD_ARM_ADVANCED_TRIGGER 0x0F /* extension of Demon Core */
48 #define CMD_SET_DIVIDER 0x80
49 #define CMD_CAPTURE_SIZE 0x81
50 #define CMD_SET_FLAGS 0x82
51 #define CMD_CAPTURE_DELAYCOUNT 0x83 /* extension of Pepino */
52 #define CMD_CAPTURE_READCOUNT 0x84 /* extension of Pepino */
53 #define CMD_SET_ADVANCED_TRIG_SEL 0x9E /* extension of Demon Core */
54 #define CMD_SET_ADVANCED_TRIG_WRITE 0x9F /* extension of Demon Core */
55 #define CMD_SET_BASIC_TRIGGER_MASK0 0xC0 /* 4 stages: 0xC0, 0xC4, 0xC8, 0xCC */
56 #define CMD_SET_BASIC_TRIGGER_VALUE0 0xC1 /* 4 stages: 0xC1, 0xC5, 0xC9, 0xCD */
57 #define CMD_SET_BASIC_TRIGGER_CONFIG0 0xC2 /* 4 stages: 0xC2, 0xC6, 0xCA, 0xCE */
60 #define METADATA_TOKEN_END 0x0
61 #define METADATA_TOKEN_DEVICE_NAME 0x1
62 #define METADATA_TOKEN_FPGA_VERSION 0x2
63 #define METADATA_TOKEN_ANCILLARY_VERSION 0x3
64 #define METADATA_TOKEN_NUM_PROBES_LONG 0x20
65 #define METADATA_TOKEN_SAMPLE_MEMORY_BYTES 0x21
66 #define METADATA_TOKEN_DYNAMIC_MEMORY_BYTES 0x22
67 #define METADATA_TOKEN_MAX_SAMPLE_RATE_HZ 0x23
68 #define METADATA_TOKEN_PROTOCOL_VERSION_LONG 0x24
69 #define METADATA_TOKEN_CAPABILITIES 0x25 /* not implemented in Demon Core v3.07 */
70 #define METADATA_TOKEN_NUM_PROBES_SHORT 0x40
71 #define METADATA_TOKEN_PROTOCOL_VERSION_SHORT 0x41
73 /* Device config flags */
74 #define DEVICE_FLAG_IS_DEMON_CORE (1 << 0)
76 /* Basic Trigger Config */
77 #define TRIGGER_START (1 << 3)
79 /* Bit mask used for "set flags" command (0x82) */
80 /* Take care about bit positions in diagrams, they are inverted. */
81 #define CAPTURE_FLAG_RLEMODE1 (1 << 15)
82 #define CAPTURE_FLAG_RLEMODE0 (1 << 14)
83 #define CAPTURE_FLAG_RESERVED1 (1 << 13)
84 #define CAPTURE_FLAG_RESERVED0 (1 << 12)
85 #define CAPTURE_FLAG_INTERNAL_TEST_MODE (1 << 11)
86 #define CAPTURE_FLAG_EXTERNAL_TEST_MODE (1 << 10)
87 #define CAPTURE_FLAG_SWAP_CHANNELS (1 << 9)
88 #define CAPTURE_FLAG_RLE (1 << 8)
89 #define CAPTURE_FLAG_INVERT_EXT_CLOCK (1 << 7)
90 #define CAPTURE_FLAG_CLOCK_EXTERNAL (1 << 6)
91 #define CAPTURE_FLAG_DISABLE_CHANGROUP_4 (1 << 5)
92 #define CAPTURE_FLAG_DISABLE_CHANGROUP_3 (1 << 4)
93 #define CAPTURE_FLAG_DISABLE_CHANGROUP_2 (1 << 3)
94 #define CAPTURE_FLAG_DISABLE_CHANGROUP_1 (1 << 2)
95 #define CAPTURE_FLAG_NOISE_FILTER (1 << 1)
96 #define CAPTURE_FLAG_DEMUX (1 << 0)
98 /* Capture context magic numbers */
99 #define OLS_NO_TRIGGER (-1)
102 /* constant device properties: */
104 uint32_t max_samples;
105 uint32_t max_samplerate;
106 uint32_t protocol_version;
107 uint16_t device_flags;
109 /* acquisition-related properties: */
110 uint64_t cur_samplerate;
111 uint32_t cur_samplerate_divider;
112 uint64_t limit_samples;
113 uint64_t capture_ratio;
115 uint16_t capture_flags;
117 unsigned int num_transfers;
118 unsigned int num_samples;
124 unsigned int rle_count;
125 unsigned char sample[4];
126 unsigned char tmp_sample[4];
127 unsigned char *raw_sample_buf;
130 SR_PRIV extern const char *ols_channel_names[];
132 SR_PRIV int send_shortcommand(struct sr_serial_dev_inst *serial,
134 SR_PRIV int send_longcommand(struct sr_serial_dev_inst *serial, uint8_t command,
136 SR_PRIV int ols_send_reset(struct sr_serial_dev_inst *serial);
137 SR_PRIV int ols_prepare_acquisition(const struct sr_dev_inst *sdi);
138 SR_PRIV uint32_t ols_channel_mask(const struct sr_dev_inst *sdi);
139 SR_PRIV struct dev_context *ols_dev_new(void);
140 SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial);
141 SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
142 uint64_t samplerate);
143 SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi);
144 SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data);