]> sigrok.org Git - libsigrok.git/blame - src/hardware/hantek-6xxx/protocol.h
dev_acquisition_{start,stop}(): Drop duplicate 'cb_data' parameter.
[libsigrok.git] / src / hardware / hantek-6xxx / protocol.h
CommitLineData
6c6bc80a
C
1/*
2 * This file is part of the libsigrok project.
3 *
f2a66a8e 4 * Copyright (C) 2015 Christer Ekholm <christerekholm@gmail.com>
6c6bc80a
C
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_HANTEK_6XXX_PROTOCOL_H
21#define LIBSIGROK_HARDWARE_HANTEK_6XXX_PROTOCOL_H
22
23#include <stdint.h>
f2a66a8e 24#include <string.h>
6c6bc80a
C
25#include <glib.h>
26#include <libsigrok/libsigrok.h>
27#include "libsigrok-internal.h"
28
29#define LOG_PREFIX "hantek-6xxx"
30
f2a66a8e
C
31#define MAX_RENUM_DELAY_MS 3000
32
33#define DEFAULT_VOLTAGE 2
cc5ebc8a 34#define DEFAULT_COUPLING COUPLING_DC
f2a66a8e
C
35#define DEFAULT_SAMPLERATE SR_MHZ(8)
36
37#define NUM_CHANNELS 2
38
39#define SAMPLERATE_VALUES \
40 SR_MHZ(48), SR_MHZ(30), SR_MHZ(24), \
41 SR_MHZ(16), SR_MHZ(8), SR_MHZ(4), \
42 SR_MHZ(1), SR_KHZ(500), SR_KHZ(200), \
43 SR_KHZ(100),
44
45#define SAMPLERATE_REGS \
46 48, 30, 24, 16, 8, 4, 1, 50, 20, 10,
47
48#define VDIV_VALUES \
49 { 100, 1000 }, \
50 { 250, 1000 }, \
51 { 500, 1000 }, \
52 { 1, 1 },
53
54#define VDIV_REG \
55 10, 5, 2, 1,
56
57#define VDIV_MULTIPLIER 10
58
59/* Weird flushing needed for filtering glitch away. */
050eb3b3 60#define FLUSH_PACKET_SIZE 1024
f2a66a8e 61
050eb3b3 62#define MIN_PACKET_SIZE 512
f2a66a8e
C
63#define MAX_PACKET_SIZE (12 * 1024 * 1024)
64
65#define HANTEK_EP_IN 0x86
66#define USB_INTERFACE 0
67#define USB_CONFIGURATION 1
68
69enum control_requests {
70 VDIV_CH1_REG = 0xe0,
71 VDIV_CH2_REG = 0xe1,
72 SAMPLERATE_REG = 0xe2,
73 TRIGGER_REG = 0xe3,
74 CHANNELS_REG = 0xe4,
cc5ebc8a 75 COUPLING_REG = 0xe5,
f2a66a8e
C
76};
77
78enum states {
79 IDLE,
80 FLUSH,
81 CAPTURE,
82 STOPPING,
83};
84
cc5ebc8a
BL
85enum couplings {
86 COUPLING_AC = 0,
87 COUPLING_DC,
88};
89
f2a66a8e
C
90struct hantek_6xxx_profile {
91 /* VID/PID after cold boot */
92 uint16_t orig_vid;
93 uint16_t orig_pid;
94 /* VID/PID after firmware upload */
95 uint16_t fw_vid;
96 uint16_t fw_pid;
97 const char *vendor;
98 const char *model;
99 const char *firmware;
100};
101
6c6bc80a 102struct dev_context {
f2a66a8e 103 const struct hantek_6xxx_profile *profile;
f2a66a8e
C
104 GSList *enabled_channels;
105 /*
106 * We can't keep track of an FX2-based device after upgrading
107 * the firmware (it re-enumerates into a different device address
108 * after the upgrade) this is like a global lock. No device will open
109 * until a proper delay after the last device was upgraded.
110 */
111 int64_t fw_updated;
112 int dev_state;
113 uint64_t samp_received;
114 uint64_t aq_started;
6c6bc80a 115
f2a66a8e
C
116 uint64_t read_start_ts;
117 uint32_t read_data_amount;
6c6bc80a 118
f2a66a8e
C
119 struct libusb_transfer **sample_buf;
120 uint32_t sample_buf_write;
121 uint32_t sample_buf_size;
6c6bc80a 122
f2a66a8e
C
123 gboolean ch_enabled[NUM_CHANNELS];
124 int voltage[NUM_CHANNELS];
cc5ebc8a 125 int coupling[NUM_CHANNELS];
f2a66a8e 126 uint64_t samplerate;
6c6bc80a 127
f2a66a8e
C
128 uint64_t limit_msec;
129 uint64_t limit_samples;
6c6bc80a
C
130};
131
f2a66a8e
C
132SR_PRIV int hantek_6xxx_open(struct sr_dev_inst *sdi);
133SR_PRIV void hantek_6xxx_close(struct sr_dev_inst *sdi);
134SR_PRIV int hantek_6xxx_get_channeldata(const struct sr_dev_inst *sdi,
135 libusb_transfer_cb_fn cb, uint32_t data_amount);
136
137SR_PRIV int hantek_6xxx_start_data_collecting(const struct sr_dev_inst *sdi);
138SR_PRIV int hantek_6xxx_stop_data_collecting(const struct sr_dev_inst *sdi);
139
cc5ebc8a 140SR_PRIV int hantek_6xxx_update_coupling(const struct sr_dev_inst *sdi);
f2a66a8e
C
141SR_PRIV int hantek_6xxx_update_samplerate(const struct sr_dev_inst *sdi);
142SR_PRIV int hantek_6xxx_update_vdiv(const struct sr_dev_inst *sdi);
143SR_PRIV int hantek_6xxx_update_channels(const struct sr_dev_inst *sdi);
144SR_PRIV int hantek_6xxx_init(const struct sr_dev_inst *sdi);
6c6bc80a
C
145
146#endif