]> sigrok.org Git - libsigrok.git/blame - src/hardware/openbench-logic-sniffer/protocol.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / openbench-logic-sniffer / protocol.h
CommitLineData
4fe9a6da 1/*
50985c20 2 * This file is part of the libsigrok project.
4fe9a6da 3 *
13d8e03c 4 * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
4fe9a6da
BV
5 *
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.
10 *
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.
15 *
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/>.
18 */
19
0aba65da
UH
20#ifndef LIBSIGROK_HARDWARE_OPENBENCH_LOGIC_SNIFFER_PROTOCOL_H
21#define LIBSIGROK_HARDWARE_OPENBENCH_LOGIC_SNIFFER_PROTOCOL_H
22
23#include <stdint.h>
24#include <string.h>
25#include <glib.h>
c1aae900 26#include <libsigrok/libsigrok.h>
0aba65da 27#include "libsigrok-internal.h"
4fe9a6da 28
8dacbcf6 29#define LOG_PREFIX "openbench-logic-sniffer"
a567547e 30
55eca716 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)
4fe9a6da
BV
35
36/* Command opcodes */
6f9234e6 37#define CMD_RESET 0x00
38#define CMD_ARM_BASIC_TRIGGER 0x01
39#define CMD_ID 0x02
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 */
46#define CMD_XON 0x11
47#define CMD_XOFF 0x13
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 */
016e72f3 58
6f9234e6 59/* Metadata tokens */
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
72
73/* Device config flags */
74#define DEVICE_FLAG_IS_DEMON_CORE (1 << 0)
75
76/* Basic Trigger Config */
016e72f3 77#define TRIGGER_START (1 << 3)
4fe9a6da 78
58a75642 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)
4fe9a6da 97
a2b1a53b 98/* Capture context magic numbers */
99#define OLS_NO_TRIGGER (-1)
100
fefc4b85 101struct dev_context {
20077702
GS
102 char **channel_names;
103
0ccc6f7c 104 /* constant device properties: */
fbf9e657 105 size_t max_channels;
4fe9a6da 106 uint32_t max_samples;
bf256783 107 uint32_t max_samplerate;
4fe9a6da 108 uint32_t protocol_version;
6f9234e6 109 uint16_t device_flags;
4fe9a6da 110
0ccc6f7c 111 /* acquisition-related properties: */
4fe9a6da
BV
112 uint64_t cur_samplerate;
113 uint32_t cur_samplerate_divider;
114 uint64_t limit_samples;
efad7ccc 115 uint64_t capture_ratio;
a2b1a53b 116 int trigger_at_smpl;
a80bed76 117 uint16_t capture_flags;
4fe9a6da
BV
118
119 unsigned int num_transfers;
22130421 120 unsigned int num_samples;
4fe9a6da 121 int num_bytes;
625763e2
BV
122 int cnt_bytes;
123 int cnt_samples;
124 int cnt_samples_rle;
bf256783 125
00d04d3b 126 unsigned int rle_count;
4fe9a6da 127 unsigned char sample[4];
4fe9a6da
BV
128 unsigned char *raw_sample_buf;
129};
130
53cda65a 131SR_PRIV extern const char *ols_channel_names[];
0aba65da
UH
132
133SR_PRIV int send_shortcommand(struct sr_serial_dev_inst *serial,
55eca716 134 uint8_t command);
135SR_PRIV int send_longcommand(struct sr_serial_dev_inst *serial, uint8_t command,
136 uint8_t *data);
244995a2 137SR_PRIV int ols_send_reset(struct sr_serial_dev_inst *serial);
f8fd8420 138SR_PRIV int ols_prepare_acquisition(const struct sr_dev_inst *sdi);
139SR_PRIV uint32_t ols_channel_mask(const struct sr_dev_inst *sdi);
838f0122 140SR_PRIV int ols_get_metadata(struct sr_dev_inst *sdi);
0aba65da 141SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
55eca716 142 uint64_t samplerate);
0aba65da
UH
143SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi);
144SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data);
145
0f8522bf 146#endif