]> sigrok.org Git - libsigrok.git/blame_incremental - src/hardware/openbench-logic-sniffer/protocol.h
ols: move device context creation from protocol.c to api.c
[libsigrok.git] / src / hardware / openbench-logic-sniffer / protocol.h
... / ...
CommitLineData
1/*
2 * This file is part of the libsigrok project.
3 *
4 * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
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
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>
26#include <libsigrok/libsigrok.h>
27#include "libsigrok-internal.h"
28
29#define LOG_PREFIX "openbench-logic-sniffer"
30
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)
35
36/* Command opcodes */
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 */
58
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 */
77#define TRIGGER_START (1 << 3)
78
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)
97
98/* Capture context magic numbers */
99#define OLS_NO_TRIGGER (-1)
100
101struct dev_context {
102 /* constant device properties: */
103 int max_channels;
104 uint32_t max_samples;
105 uint32_t max_samplerate;
106 uint32_t protocol_version;
107 uint16_t device_flags;
108
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;
114 int trigger_at_smpl;
115 uint16_t capture_flags;
116
117 unsigned int num_transfers;
118 unsigned int num_samples;
119 int num_bytes;
120 int cnt_bytes;
121 int cnt_samples;
122 int cnt_samples_rle;
123
124 unsigned int rle_count;
125 unsigned char sample[4];
126 unsigned char *raw_sample_buf;
127};
128
129SR_PRIV extern const char *ols_channel_names[];
130
131SR_PRIV int send_shortcommand(struct sr_serial_dev_inst *serial,
132 uint8_t command);
133SR_PRIV int send_longcommand(struct sr_serial_dev_inst *serial, uint8_t command,
134 uint8_t *data);
135SR_PRIV int ols_send_reset(struct sr_serial_dev_inst *serial);
136SR_PRIV int ols_prepare_acquisition(const struct sr_dev_inst *sdi);
137SR_PRIV uint32_t ols_channel_mask(const struct sr_dev_inst *sdi);
138SR_PRIV int ols_get_metadata(struct sr_dev_inst *sdi);
139SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
140 uint64_t samplerate);
141SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi);
142SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data);
143
144#endif