]> sigrok.org Git - libsigrok.git/blame - src/hardware/kingst-la2016/protocol.c
kingst-la2016: style nit, drop unnecessary typedefs
[libsigrok.git] / src / hardware / kingst-la2016 / protocol.c
CommitLineData
f2cd2deb
FS
1/*
2 * This file is part of the libsigrok project.
3 *
4 * Copyright (C) 2020 Florian Schmidt <schmidt_florian@gmx.de>
5 * Copyright (C) 2013 Marcus Comstedt <marcus@mc.pp.se>
6 * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
7 * Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
8 *
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23#include <config.h>
a7740b06 24
f2cd2deb 25#include <libsigrok/libsigrok.h>
a7740b06
GS
26#include <string.h>
27
f2cd2deb
FS
28#include "libsigrok-internal.h"
29#include "protocol.h"
30
f2cd2deb 31#define UC_FIRMWARE "kingst-la-%04x.fw"
9de389b1
KG
32#define FPGA_FW_LA2016 "kingst-la2016-fpga.bitstream"
33#define FPGA_FW_LA2016A "kingst-la2016a1-fpga.bitstream"
8b172e78
KG
34#define FPGA_FW_LA1016 "kingst-la1016-fpga.bitstream"
35#define FPGA_FW_LA1016A "kingst-la1016a1-fpga.bitstream"
f2cd2deb 36
852c7d14 37/* Maximum device capabilities. May differ between models. */
8b172e78
KG
38#define MAX_SAMPLE_RATE_LA2016 SR_MHZ(200)
39#define MAX_SAMPLE_RATE_LA1016 SR_MHZ(100)
e9430410
GS
40#define MAX_SAMPLE_DEPTH 10e9
41#define MAX_PWM_FREQ SR_MHZ(20)
42#define PWM_CLOCK SR_MHZ(200) /* 200MHz for both LA2016 and LA1016 */
f2cd2deb 43
852c7d14
GS
44/*
45 * Default device configuration. Must be applicable to any of the
46 * supported devices (no model specific default values yet). Specific
47 * firmware implementation details unfortunately won't let us detect
48 * and keep using previously configured values.
49 */
50#define LA2016_DFLT_SAMPLERATE SR_MHZ(100)
51#define LA2016_DFLT_SAMPLEDEPTH (5 * 1000 * 1000)
52#define LA2016_DFLT_CAPT_RATIO 5 /* Capture ratio, in percent. */
53
54/* TODO
55 * What is the origin and motivation of that 128Mi literal? What is its
56 * unit? How does it relate to a device's hardware capabilities? How to
57 * map the 1GiB of RAM of an LA2016 (at 16 channels) to the 128Mi value?
58 * It cannot be sample count. Is it memory size in bytes perhaps?
59 */
60#define LA2016_PRE_MEM_LIMIT_BASE (128 * 1024 * 1024)
61
96dc954e 62/* USB vendor class control requests, executed by the Cypress FX2 MCU. */
84fe94bd 63#define CMD_FPGA_ENABLE 0x10
96dc954e
GS
64#define CMD_FPGA_SPI 0x20 /* R/W access to FPGA registers via SPI. */
65#define CMD_BULK_START 0x30 /* Start sample data download via USB EP6 IN. */
66#define CMD_BULK_RESET 0x38 /* Flush FIFO of FX2 USB EP6 IN. */
67#define CMD_FPGA_INIT 0x50 /* Used before and after FPGA bitstream upload. */
68#define CMD_KAUTH 0x60 /* Communicate to auth IC (U10). Not used. */
69#define CMD_EEPROM 0xa2 /* R/W access to EEPROM content. */
00849545 70
42f6dd55 71/*
96dc954e
GS
72 * FPGA register addresses (base addresses when registers span multiple
73 * bytes, in that case data is kept in little endian format). Passed to
74 * CMD_FPGA_SPI requests. The FX2 MCU transparently handles the detail
75 * of SPI transfers encoding the read (1) or write (0) direction in the
76 * MSB of the address field. There are some 60 byte-wide FPGA registers.
d6f89d4b
GS
77 *
78 * Unfortunately the FPGA registers change their meaning between the
79 * read and write directions of access, or exclusively provide one of
80 * these directions and not the other. This is an arbitrary vendor's
81 * choice, there is nothing which the sigrok driver could do about it.
82 * Values written to registers typically cannot get read back, neither
83 * verified after writing a configuration, nor queried upon startup for
84 * automatic detection of the current configuration. Neither appear to
85 * be there echo registers for presence and communication checks, nor
86 * version identifying registers, as far as we know.
42f6dd55 87 */
96dc954e
GS
88#define REG_RUN 0x00 /* Read capture status, write start capture. */
89#define REG_PWM_EN 0x02 /* User PWM channels on/off. */
90#define REG_CAPT_MODE 0x03 /* Write 0x00 capture to SDRAM, 0x01 streaming. */
91#define REG_BULK 0x08 /* Write start addr, byte count to download samples. */
92#define REG_SAMPLING 0x10 /* Write capture config, read capture SDRAM location. */
93#define REG_TRIGGER 0x20 /* write level and edge trigger config. */
94#define REG_THRESHOLD 0x68 /* Write PWM config to setup input threshold DAC. */
95#define REG_PWM1 0x70 /* Write config for user PWM1. */
96#define REG_PWM2 0x78 /* Write config for user PWM2. */
f2cd2deb 97
852c7d14
GS
98/* Bit patterns to write to REG_RUN, setup run mode. */
99#define RUNMODE_HALT 0x00
100#define RUNMODE_RUN 0x03
101
b711fd8e
GS
102/* Bit patterns when reading from REG_RUN, get run state. */
103#define RUNSTATE_IDLE_BIT (1UL << 0)
104#define RUNSTATE_DRAM_BIT (1UL << 1)
105#define RUNSTATE_TRGD_BIT (1UL << 2)
106#define RUNSTATE_POST_BIT (1UL << 3)
107
f2cd2deb 108static int ctrl_in(const struct sr_dev_inst *sdi,
1ed93110
GS
109 uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
110 void *data, uint16_t wLength)
f2cd2deb
FS
111{
112 struct sr_usb_dev_inst *usb;
113 int ret;
114
115 usb = sdi->conn;
116
852c7d14
GS
117 if ((ret = libusb_control_transfer(usb->devhdl,
118 LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN,
f2cd2deb
FS
119 bRequest, wValue, wIndex, (unsigned char *)data, wLength,
120 DEFAULT_TIMEOUT_MS)) != wLength) {
91f73872
GS
121 sr_dbg("USB ctrl in: %d bytes, req %d val %#x idx %d: %s.",
122 wLength, bRequest, wValue, wIndex,
123 libusb_error_name(ret));
124 sr_err("Cannot read %d bytes from USB: %s.",
125 wLength, libusb_error_name(ret));
f2cd2deb
FS
126 return SR_ERR;
127 }
128
129 return SR_OK;
130}
131
132static int ctrl_out(const struct sr_dev_inst *sdi,
1ed93110
GS
133 uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
134 void *data, uint16_t wLength)
f2cd2deb
FS
135{
136 struct sr_usb_dev_inst *usb;
137 int ret;
138
139 usb = sdi->conn;
140
852c7d14
GS
141 if ((ret = libusb_control_transfer(usb->devhdl,
142 LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT,
f2cd2deb
FS
143 bRequest, wValue, wIndex, (unsigned char*)data, wLength,
144 DEFAULT_TIMEOUT_MS)) != wLength) {
91f73872
GS
145 sr_dbg("USB ctrl out: %d bytes, req %d val %#x idx %d: %s.",
146 wLength, bRequest, wValue, wIndex,
147 libusb_error_name(ret));
148 sr_err("Cannot write %d bytes to USB: %s.",
149 wLength, libusb_error_name(ret));
f2cd2deb
FS
150 return SR_ERR;
151 }
152
153 return SR_OK;
154}
155
d6f89d4b
GS
156/*
157 * Check the necessity for FPGA bitstream upload, because another upload
158 * would take some 600ms which is undesirable after program startup. Try
159 * to access some FPGA registers and check the values' plausibility. The
160 * check should fail on the safe side, request another upload when in
161 * doubt. A positive response (the request to continue operation with the
162 * currently active bitstream) should be conservative. Accessing multiple
163 * registers is considered cheap compared to the cost of bitstream upload.
164 *
165 * It helps though that both the vendor software and the sigrok driver
166 * use the same bundle of MCU firmware and FPGA bitstream for any of the
167 * supported models. We don't expect to successfully communicate to the
168 * device yet disagree on its protocol. Ideally we would access version
169 * identifying registers for improved robustness, but are not aware of
170 * any. A bitstream reload can always be forced by a power cycle.
171 */
172static int check_fpga_bitstream(const struct sr_dev_inst *sdi)
173{
174 uint8_t init_rsp;
175 int ret;
176 uint16_t run_state;
177 uint8_t pwm_en;
178 size_t read_len;
179 uint8_t buff[sizeof(run_state)];
180 const uint8_t *rdptr;
181
182 sr_dbg("Checking operation of the FPGA bitstream.");
183
852c7d14 184 init_rsp = ~0;
d6f89d4b
GS
185 ret = ctrl_in(sdi, CMD_FPGA_INIT, 0x00, 0, &init_rsp, sizeof(init_rsp));
186 if (ret != SR_OK || init_rsp != 0) {
187 sr_dbg("FPGA init query failed, or unexpected response.");
188 return SR_ERR_IO;
189 }
190
191 read_len = sizeof(run_state);
192 ret = ctrl_in(sdi, CMD_FPGA_SPI, REG_RUN, 0, buff, read_len);
193 if (ret != SR_OK) {
194 sr_dbg("FPGA register access failed (run state).");
195 return SR_ERR_IO;
196 }
197 rdptr = buff;
198 run_state = read_u16le_inc(&rdptr);
199 sr_spew("FPGA register: run state 0x%04x.", run_state);
200 if (run_state && (run_state & 0x3) != 0x1) {
201 sr_dbg("Unexpected FPGA register content (run state).");
202 return SR_ERR_DATA;
203 }
204 if (run_state && (run_state & ~0xf) != 0x85e0) {
205 sr_dbg("Unexpected FPGA register content (run state).");
206 return SR_ERR_DATA;
207 }
208
209 read_len = sizeof(pwm_en);
210 ret = ctrl_in(sdi, CMD_FPGA_SPI, REG_PWM_EN, 0, buff, read_len);
211 if (ret != SR_OK) {
212 sr_dbg("FPGA register access failed (PWM enable).");
213 return SR_ERR_IO;
214 }
215 rdptr = buff;
216 pwm_en = read_u8_inc(&rdptr);
217 sr_spew("FPGA register: PWM enable 0x%02x.", pwm_en);
218 if ((pwm_en & 0x3) != 0x0) {
219 sr_dbg("Unexpected FPGA register content (PWM enable).");
220 return SR_ERR_DATA;
221 }
222
223 sr_info("Could re-use current FPGA bitstream. No upload required.");
224 return SR_OK;
225}
226
1ed93110
GS
227static int upload_fpga_bitstream(const struct sr_dev_inst *sdi,
228 const char *bitstream_fname)
f2cd2deb
FS
229{
230 struct drv_context *drvc;
231 struct sr_usb_dev_inst *usb;
232 struct sr_resource bitstream;
b0d0131e 233 uint32_t bitstream_size;
c3d40037
HK
234 uint8_t buffer[sizeof(uint32_t)];
235 uint8_t *wrptr;
f2cd2deb 236 uint8_t block[4096];
3f48ab02
FS
237 int len, act_len;
238 unsigned int pos;
f2cd2deb 239 int ret;
b0d0131e 240 unsigned int zero_pad_to;
f2cd2deb
FS
241
242 drvc = sdi->driver->context;
243 usb = sdi->conn;
244
9de389b1 245 sr_info("Uploading FPGA bitstream '%s'.", bitstream_fname);
f2cd2deb 246
9de389b1 247 ret = sr_resource_open(drvc->sr_ctx, &bitstream, SR_RESOURCE_FIRMWARE, bitstream_fname);
f2cd2deb 248 if (ret != SR_OK) {
91f73872 249 sr_err("Cannot find FPGA bitstream %s.", bitstream_fname);
f2cd2deb
FS
250 return ret;
251 }
252
b0d0131e 253 bitstream_size = (uint32_t)bitstream.size;
c3d40037 254 wrptr = buffer;
b0d0131e 255 write_u32le_inc(&wrptr, bitstream_size);
00849545 256 if ((ret = ctrl_out(sdi, CMD_FPGA_INIT, 0x00, 0, buffer, wrptr - buffer)) != SR_OK) {
91f73872 257 sr_err("Cannot initiate FPGA bitstream upload.");
f2cd2deb
FS
258 sr_resource_close(drvc->sr_ctx, &bitstream);
259 return ret;
260 }
b0d0131e
GS
261 zero_pad_to = bitstream_size;
262 zero_pad_to += LA2016_EP2_PADDING - 1;
263 zero_pad_to /= LA2016_EP2_PADDING;
264 zero_pad_to *= LA2016_EP2_PADDING;
f2cd2deb
FS
265
266 pos = 0;
267 while (1) {
3f48ab02
FS
268 if (pos < bitstream.size) {
269 len = (int)sr_resource_read(drvc->sr_ctx, &bitstream, &block, sizeof(block));
270 if (len < 0) {
91f73872 271 sr_err("Cannot read FPGA bitstream.");
3f48ab02
FS
272 sr_resource_close(drvc->sr_ctx, &bitstream);
273 return SR_ERR;
274 }
275 } else {
96dc954e 276 /* Zero-pad until 'zero_pad_to'. */
3f48ab02
FS
277 len = zero_pad_to - pos;
278 if ((unsigned)len > sizeof(block))
279 len = sizeof(block);
280 memset(&block, 0, len);
f2cd2deb
FS
281 }
282 if (len == 0)
283 break;
284
852c7d14 285 ret = libusb_bulk_transfer(usb->devhdl, USB_EP_FPGA_BITSTREAM,
1ed93110 286 &block[0], len, &act_len, DEFAULT_TIMEOUT_MS);
f2cd2deb 287 if (ret != 0) {
91f73872
GS
288 sr_dbg("Cannot write FPGA bitstream, block %#x len %d: %s.",
289 pos, (int)len, libusb_error_name(ret));
f2cd2deb
FS
290 ret = SR_ERR;
291 break;
292 }
293 if (act_len != len) {
91f73872
GS
294 sr_dbg("Short write for FPGA bitstream, block %#x len %d: got %d.",
295 pos, (int)len, act_len);
f2cd2deb
FS
296 ret = SR_ERR;
297 break;
298 }
299 pos += len;
300 }
301 sr_resource_close(drvc->sr_ctx, &bitstream);
302 if (ret != 0)
303 return ret;
91f73872
GS
304 sr_info("FPGA bitstream upload (%" PRIu64 " bytes) done.",
305 bitstream.size);
f2cd2deb 306
d6f89d4b
GS
307 return SR_OK;
308}
309
310static int enable_fpga_bitstream(const struct sr_dev_inst *sdi)
311{
312 int ret;
313 uint8_t cmd_resp;
314
00849545 315 if ((ret = ctrl_in(sdi, CMD_FPGA_INIT, 0x00, 0, &cmd_resp, sizeof(cmd_resp))) != SR_OK) {
91f73872 316 sr_err("Cannot read response after FPGA bitstream upload.");
f2cd2deb
FS
317 return ret;
318 }
3f48ab02 319 if (cmd_resp != 0) {
91f73872
GS
320 sr_err("Unexpected FPGA bitstream upload response, got 0x%02x, want 0.",
321 cmd_resp);
3f48ab02
FS
322 return SR_ERR;
323 }
852c7d14 324 g_usleep(30 * 1000);
f2cd2deb 325
00849545 326 if ((ret = ctrl_out(sdi, CMD_FPGA_ENABLE, 0x01, 0, NULL, 0)) != SR_OK) {
91f73872 327 sr_err("Cannot enable FPGA after bitstream upload.");
f2cd2deb
FS
328 return ret;
329 }
852c7d14 330 g_usleep(40 * 1000);
d6f89d4b 331
f2cd2deb
FS
332 return SR_OK;
333}
334
335static int set_threshold_voltage(const struct sr_dev_inst *sdi, float voltage)
336{
337 struct dev_context *devc;
f2cd2deb
FS
338 int ret;
339
340 devc = sdi->priv;
f2cd2deb 341
1ed93110 342 uint16_t duty_R79, duty_R56;
f2ad79d1
KG
343 uint8_t buf[2 * sizeof(uint16_t)];
344 uint8_t *wrptr;
345
96dc954e 346 /* Clamp threshold setting to valid range for LA2016. */
f2ad79d1
KG
347 if (voltage > 4.0) {
348 voltage = 4.0;
1ed93110 349 } else if (voltage < -4.0) {
f2ad79d1
KG
350 voltage = -4.0;
351 }
352
353 /*
96dc954e
GS
354 * Two PWM output channels feed one DAC which generates a bias
355 * voltage, which offsets the input probe's voltage level, and
356 * in combination with the FPGA pins' fixed threshold result in
357 * a programmable input threshold from the user's perspective.
358 * The PWM outputs can be seen on R79 and R56 respectively, the
359 * frequency is 100kHz and the duty cycle varies. The R79 PWM
360 * uses three discrete settings. The R56 PWM varies with desired
361 * thresholds and depends on the R79 PWM configuration. See the
362 * schematics comments which discuss the formulae.
f2ad79d1
KG
363 */
364 if (voltage >= 2.9) {
96dc954e 365 duty_R79 = 0; /* PWM off (0V). */
f2ad79d1 366 duty_R56 = (uint16_t)(302 * voltage - 363);
c34f4a89 367 } else if (voltage > -0.4) {
96dc954e 368 duty_R79 = 0x00f2; /* 25% duty cycle. */
f2ad79d1 369 duty_R56 = (uint16_t)(302 * voltage + 121);
c34f4a89
GS
370 } else {
371 duty_R79 = 0x02d7; /* 72% duty cycle. */
372 duty_R56 = (uint16_t)(302 * voltage + 1090);
f2ad79d1
KG
373 }
374
96dc954e 375 /* Clamp duty register values to sensible limits. */
f2ad79d1
KG
376 if (duty_R56 < 10) {
377 duty_R56 = 10;
1ed93110 378 } else if (duty_R56 > 1100) {
f2ad79d1
KG
379 duty_R56 = 1100;
380 }
381
91f73872
GS
382 sr_dbg("Set threshold voltage %.2fV.", voltage);
383 sr_dbg("Duty cycle values: R56 0x%04x, R79 0x%04x.", duty_R56, duty_R79);
f2ad79d1
KG
384
385 wrptr = buf;
386 write_u16le_inc(&wrptr, duty_R56);
387 write_u16le_inc(&wrptr, duty_R79);
388
389 ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_THRESHOLD, 0, buf, wrptr - buf);
f2cd2deb 390 if (ret != SR_OK) {
91f73872 391 sr_err("Cannot set threshold voltage %.2fV.", voltage);
f2cd2deb
FS
392 return ret;
393 }
394 devc->threshold_voltage = voltage;
395
396 return SR_OK;
397}
398
86d77b75 399static int enable_pwm(const struct sr_dev_inst *sdi, gboolean p1, gboolean p2)
f2cd2deb
FS
400{
401 struct dev_context *devc;
402 uint8_t cfg;
403 int ret;
404
405 devc = sdi->priv;
f2cd2deb 406
86d77b75
GS
407 cfg = 0;
408 if (p1)
409 cfg |= 1U << 0;
410 if (p2)
411 cfg |= 1U << 1;
91f73872 412 sr_dbg("Set PWM enable %d %d. Config 0x%02x.", p1, p2, cfg);
86d77b75 413
42f6dd55 414 ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_PWM_EN, 0, &cfg, sizeof(cfg));
f2cd2deb 415 if (ret != SR_OK) {
91f73872 416 sr_err("Cannot setup PWM enabled state.");
f2cd2deb
FS
417 return ret;
418 }
86d77b75 419
f2cd2deb
FS
420 devc->pwm_setting[0].enabled = (p1) ? 1 : 0;
421 devc->pwm_setting[1].enabled = (p2) ? 1 : 0;
422
423 return SR_OK;
424}
425
86d77b75 426static int configure_pwm(const struct sr_dev_inst *sdi, uint8_t which,
1ed93110 427 float freq, float duty)
f2cd2deb 428{
86d77b75
GS
429 static uint8_t ctrl_reg_tab[] = { REG_PWM1, REG_PWM2, };
430
f2cd2deb 431 struct dev_context *devc;
86d77b75
GS
432 uint8_t ctrl_reg;
433 struct pwm_setting_dev cfg;
434 struct pwm_setting *setting;
f2cd2deb 435 int ret;
c3d40037
HK
436 uint8_t buf[2 * sizeof(uint32_t)];
437 uint8_t *wrptr;
f2cd2deb
FS
438
439 devc = sdi->priv;
440
86d77b75 441 if (which < 1 || which > ARRAY_SIZE(ctrl_reg_tab)) {
91f73872 442 sr_err("Invalid PWM channel: %d.", which);
f2cd2deb
FS
443 return SR_ERR;
444 }
86d77b75 445 if (freq < 0 || freq > MAX_PWM_FREQ) {
91f73872 446 sr_err("Too high a PWM frequency: %.1f.", freq);
f2cd2deb
FS
447 return SR_ERR;
448 }
86d77b75 449 if (duty < 0 || duty > 100) {
91f73872 450 sr_err("Invalid PWM duty cycle: %f.", duty);
f2cd2deb
FS
451 return SR_ERR;
452 }
453
86d77b75 454 memset(&cfg, 0, sizeof(cfg));
f2cd2deb
FS
455 cfg.period = (uint32_t)(PWM_CLOCK / freq);
456 cfg.duty = (uint32_t)(0.5f + (cfg.period * duty / 100.));
91f73872 457 sr_dbg("Set PWM%d period %d, duty %d.", which, cfg.period, cfg.duty);
f2cd2deb 458
86d77b75 459 ctrl_reg = ctrl_reg_tab[which - 1];
c3d40037
HK
460 wrptr = buf;
461 write_u32le_inc(&wrptr, cfg.period);
462 write_u32le_inc(&wrptr, cfg.duty);
86d77b75 463 ret = ctrl_out(sdi, CMD_FPGA_SPI, ctrl_reg, 0, buf, wrptr - buf);
f2cd2deb 464 if (ret != SR_OK) {
91f73872
GS
465 sr_err("Cannot setup PWM%d configuration %d %d.",
466 which, cfg.period, cfg.duty);
f2cd2deb
FS
467 return ret;
468 }
86d77b75 469
f2cd2deb
FS
470 setting = &devc->pwm_setting[which - 1];
471 setting->freq = freq;
472 setting->duty = duty;
f2cd2deb
FS
473
474 return SR_OK;
475}
476
477static int set_defaults(const struct sr_dev_inst *sdi)
478{
479 struct dev_context *devc;
480 int ret;
481
482 devc = sdi->priv;
483
852c7d14 484 devc->capture_ratio = LA2016_DFLT_CAPT_RATIO;
852c7d14
GS
485 devc->limit_samples = LA2016_DFLT_SAMPLEDEPTH;
486 devc->cur_samplerate = LA2016_DFLT_SAMPLERATE;
f2cd2deb
FS
487
488 ret = set_threshold_voltage(sdi, devc->threshold_voltage);
489 if (ret)
490 return ret;
491
86d77b75 492 ret = enable_pwm(sdi, FALSE, FALSE);
f2cd2deb
FS
493 if (ret)
494 return ret;
495
86d77b75 496 ret = configure_pwm(sdi, 1, SR_KHZ(1), 50);
f2cd2deb
FS
497 if (ret)
498 return ret;
499
86d77b75 500 ret = configure_pwm(sdi, 2, SR_KHZ(100), 50);
f2cd2deb
FS
501 if (ret)
502 return ret;
503
86d77b75 504 ret = enable_pwm(sdi, TRUE, TRUE);
f2cd2deb
FS
505 if (ret)
506 return ret;
507
508 return SR_OK;
509}
510
511static int set_trigger_config(const struct sr_dev_inst *sdi)
512{
513 struct dev_context *devc;
514 struct sr_trigger *trigger;
66f5f697 515 struct trigger_cfg cfg;
f2cd2deb
FS
516 GSList *stages;
517 GSList *channel;
518 struct sr_trigger_stage *stage1;
519 struct sr_trigger_match *match;
520 uint16_t ch_mask;
521 int ret;
c3d40037
HK
522 uint8_t buf[4 * sizeof(uint32_t)];
523 uint8_t *wrptr;
f2cd2deb
FS
524
525 devc = sdi->priv;
526 trigger = sr_session_trigger_get(sdi->session);
527
528 memset(&cfg, 0, sizeof(cfg));
529
530 cfg.channels = devc->cur_channels;
531
532 if (trigger && trigger->stages) {
533 stages = trigger->stages;
534 stage1 = stages->data;
535 if (stages->next) {
536 sr_err("Only one trigger stage supported for now.");
537 return SR_ERR;
538 }
539 channel = stage1->matches;
540 while (channel) {
541 match = channel->data;
cf057ac4 542 ch_mask = 1UL << match->channel->index;
f2cd2deb
FS
543
544 switch (match->match) {
545 case SR_TRIGGER_ZERO:
546 cfg.level |= ch_mask;
547 cfg.high_or_falling &= ~ch_mask;
548 break;
549 case SR_TRIGGER_ONE:
550 cfg.level |= ch_mask;
551 cfg.high_or_falling |= ch_mask;
552 break;
553 case SR_TRIGGER_RISING:
554 if ((cfg.enabled & ~cfg.level)) {
91f73872 555 sr_err("Device only supports one edge trigger.");
f2cd2deb
FS
556 return SR_ERR;
557 }
558 cfg.level &= ~ch_mask;
559 cfg.high_or_falling &= ~ch_mask;
560 break;
561 case SR_TRIGGER_FALLING:
562 if ((cfg.enabled & ~cfg.level)) {
91f73872 563 sr_err("Device only supports one edge trigger.");
f2cd2deb
FS
564 return SR_ERR;
565 }
566 cfg.level &= ~ch_mask;
567 cfg.high_or_falling |= ch_mask;
568 break;
569 default:
91f73872 570 sr_err("Unknown trigger condition.");
f2cd2deb
FS
571 return SR_ERR;
572 }
573 cfg.enabled |= ch_mask;
574 channel = channel->next;
575 }
576 }
91f73872
GS
577 sr_dbg("Set trigger config: "
578 "channels 0x%04x, trigger-enabled 0x%04x, "
579 "level-triggered 0x%04x, high/falling 0x%04x.",
580 cfg.channels, cfg.enabled, cfg.level, cfg.high_or_falling);
f2cd2deb 581
cf057ac4 582 devc->trigger_involved = cfg.enabled != 0;
f2cd2deb 583
c3d40037
HK
584 wrptr = buf;
585 write_u32le_inc(&wrptr, cfg.channels);
586 write_u32le_inc(&wrptr, cfg.enabled);
587 write_u32le_inc(&wrptr, cfg.level);
588 write_u32le_inc(&wrptr, cfg.high_or_falling);
852c7d14
GS
589 /* TODO
590 * Comment on this literal 16. Origin, meaning? Cannot be the
591 * register offset, nor the transfer length. Is it a channels
592 * count that is relevant for 16 and 32 channel models? Is it
593 * an obsolete experiment?
594 */
42f6dd55 595 ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_TRIGGER, 16, buf, wrptr - buf);
f2cd2deb 596 if (ret != SR_OK) {
91f73872 597 sr_err("Cannot setup trigger configuration.");
f2cd2deb
FS
598 return ret;
599 }
600
601 return SR_OK;
602}
603
604static int set_sample_config(const struct sr_dev_inst *sdi)
605{
606 struct dev_context *devc;
f2cd2deb 607 double clock_divisor;
adab4d91
GS
608 uint16_t divider_u16;
609 uint64_t pre_trigger_samples;
610 uint64_t pre_trigger_memory;
611 uint8_t buf[REG_TRIGGER - REG_SAMPLING]; /* Width of REG_SAMPLING. */
c3d40037 612 uint8_t *wrptr;
adab4d91 613 int ret;
f2cd2deb
FS
614
615 devc = sdi->priv;
f2cd2deb 616
8b172e78 617 if (devc->cur_samplerate > devc->max_samplerate) {
91f73872
GS
618 sr_err("Too high a sample rate: %" PRIu64 ".",
619 devc->cur_samplerate);
f2cd2deb
FS
620 return SR_ERR;
621 }
622
8b172e78 623 clock_divisor = devc->max_samplerate / (double)devc->cur_samplerate;
adab4d91
GS
624 if (clock_divisor > 65535)
625 return SR_ERR_ARG;
626 divider_u16 = (uint16_t)(clock_divisor + 0.5);
627 devc->cur_samplerate = devc->max_samplerate / divider_u16;
f2cd2deb
FS
628
629 if (devc->limit_samples > MAX_SAMPLE_DEPTH) {
91f73872
GS
630 sr_err("Too high a sample depth: %" PRIu64 ".",
631 devc->limit_samples);
f2cd2deb
FS
632 return SR_ERR;
633 }
f2cd2deb 634
adab4d91
GS
635 /*
636 * The acquisition configuration communicates "pre-trigger"
637 * specs in several formats. sigrok users provide a percentage
638 * (0-100%), which translates to a pre-trigger samples count
639 * (assuming that a total samples count limit was specified).
640 * The device supports hardware compression, which depends on
641 * slowly changing input data to be effective. Fast changing
642 * input data may occupy more space in sample memory than its
643 * uncompressed form would. This is why a third parameter can
644 * limit the amount of sample memory to use for pre-trigger
645 * data. Only the upper 24 bits of that memory size spec get
646 * communicated to the device (written to its FPGA register).
647 */
648 pre_trigger_samples = devc->limit_samples * devc->capture_ratio / 100;
649 pre_trigger_memory = LA2016_PRE_MEM_LIMIT_BASE;
650 pre_trigger_memory *= devc->capture_ratio;
651 pre_trigger_memory /= 100;
f2cd2deb 652
adab4d91
GS
653 sr_dbg("Set sample config: %" PRIu64 "kHz, %" PRIu64 " samples.",
654 devc->cur_samplerate / 1000, devc->limit_samples);
655 sr_dbg("Capture ratio %" PRIu64 "%%, count %" PRIu64 ", mem %" PRIu64 ".",
656 devc->capture_ratio, pre_trigger_samples, pre_trigger_memory);
f2cd2deb 657
b1a17c1a
GS
658 /*
659 * The acquisition configuration occupies a total of 16 bytes:
660 * - A 34bit total samples count limit (up to 10 billions) that
661 * is kept in a 40bit register.
662 * - A 34bit pre-trigger samples count limit (up to 10 billions)
663 * in another 40bit register.
664 * - A 32bit pre-trigger memory space limit (in bytes) of which
665 * the upper 24bits are kept in an FPGA register.
666 * - A 16bit clock divider which gets applied to the maximum
667 * samplerate of the device.
668 * - An 8bit register of unknown meaning. Currently always 0.
669 */
c3d40037 670 wrptr = buf;
b1a17c1a
GS
671 write_u40le_inc(&wrptr, devc->limit_samples);
672 write_u40le_inc(&wrptr, pre_trigger_samples);
673 write_u24le_inc(&wrptr, pre_trigger_memory >> 8);
adab4d91 674 write_u16le_inc(&wrptr, divider_u16);
0d8e1ffc 675 write_u8_inc(&wrptr, 0);
42f6dd55 676 ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_SAMPLING, 0, buf, wrptr - buf);
f2cd2deb 677 if (ret != SR_OK) {
91f73872 678 sr_err("Cannot setup acquisition configuration.");
f2cd2deb
FS
679 return ret;
680 }
681
682 return SR_OK;
683}
684
96dc954e
GS
685/*
686 * FPGA register REG_RUN holds the run state (u16le format). Bit fields
687 * of interest:
688 * bit 0: value 1 = idle
689 * bit 1: value 1 = writing to SDRAM
690 * bit 2: value 0 = waiting for trigger, 1 = trigger seen
691 * bit 3: value 0 = pretrigger sampling, 1 = posttrigger sampling
692 * The meaning of other bit fields is unknown.
7601dca7 693 *
96dc954e 694 * Typical values in order of appearance during execution:
b711fd8e
GS
695 * 0x85e1: idle, no acquisition pending
696 * IDLE set, TRGD don't care, POST don't care; DRAM don't care
697 * "In idle state." Takes precedence over all others.
96dc954e
GS
698 * 0x85e2: pre-sampling, samples before the trigger position,
699 * when capture ratio > 0%
b711fd8e
GS
700 * IDLE clear, TRGD clear, POST clear; DRAM don't care
701 * "Not idle any more, no post yet, not triggered yet."
96dc954e
GS
702 * 0x85ea: pre-sampling complete, now waiting for the trigger
703 * (whilst sampling continuously)
b711fd8e
GS
704 * IDLE clear, TRGD clear, POST set; DRAM don't care
705 * "Post set thus after pre, not triggered yet"
96dc954e 706 * 0x85ee: trigger seen, capturing post-trigger samples, running
b711fd8e
GS
707 * IDLE clear, TRGD set, POST set; DRAM don't care
708 * "Triggered and in post, not idle yet."
96dc954e 709 * 0x85ed: idle
b711fd8e
GS
710 * IDLE set, TRGD don't care, POST don't care; DRAM don't care
711 * "In idle state." TRGD/POST don't care, same meaning as above.
f2cd2deb 712 */
b711fd8e
GS
713static const uint16_t runstate_mask_idle = RUNSTATE_IDLE_BIT;
714static const uint16_t runstate_patt_idle = RUNSTATE_IDLE_BIT;
715static const uint16_t runstate_mask_step =
716 RUNSTATE_IDLE_BIT | RUNSTATE_TRGD_BIT | RUNSTATE_POST_BIT;
717static const uint16_t runstate_patt_pre_trig = 0;
718static const uint16_t runstate_patt_wait_trig = RUNSTATE_POST_BIT;
719static const uint16_t runstate_patt_post_trig =
720 RUNSTATE_TRGD_BIT | RUNSTATE_POST_BIT;
721
f2cd2deb
FS
722static uint16_t run_state(const struct sr_dev_inst *sdi)
723{
21d68fd9
GS
724 static uint16_t previous_state;
725
f2cd2deb 726 int ret;
21d68fd9
GS
727 uint16_t state;
728 uint8_t buff[sizeof(state)];
729 const uint8_t *rdptr;
730 const char *label;
f2cd2deb 731
21d68fd9 732 if ((ret = ctrl_in(sdi, CMD_FPGA_SPI, REG_RUN, 0, buff, sizeof(state))) != SR_OK) {
91f73872 733 sr_err("Cannot read run state.");
f2cd2deb
FS
734 return ret;
735 }
21d68fd9
GS
736 rdptr = buff;
737 state = read_u16le_inc(&rdptr);
7601dca7 738
96dc954e
GS
739 /*
740 * Avoid flooding the log, only dump values as they change.
741 * The routine is called about every 50ms.
7601dca7 742 */
b711fd8e
GS
743 if (state == previous_state)
744 return state;
745
746 previous_state = state;
747 label = NULL;
748 if ((state & runstate_mask_idle) == runstate_patt_idle)
749 label = "idle";
750 if ((state & runstate_mask_step) == runstate_patt_pre_trig)
751 label = "pre-trigger sampling";
752 if ((state & runstate_mask_step) == runstate_patt_wait_trig)
753 label = "sampling, waiting for trigger";
754 if ((state & runstate_mask_step) == runstate_patt_post_trig)
755 label = "post-trigger sampling";
756 if (label && *label)
757 sr_dbg("Run state: 0x%04x (%s).", state, label);
758 else
759 sr_dbg("Run state: 0x%04x.", state);
f2cd2deb
FS
760
761 return state;
762}
763
cf057ac4 764static int la2016_is_idle(const struct sr_dev_inst *sdi)
c34f4a89
GS
765{
766 uint16_t state;
767
768 state = run_state(sdi);
b711fd8e 769 if ((state & runstate_mask_idle) == runstate_patt_idle)
c34f4a89
GS
770 return 1;
771
772 return 0;
773}
774
775static int set_run_mode(const struct sr_dev_inst *sdi, uint8_t mode)
f2cd2deb
FS
776{
777 int ret;
778
c34f4a89
GS
779 if ((ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_RUN, 0, &mode, sizeof(mode))) != SR_OK) {
780 sr_err("Cannot configure run mode %d.", mode);
f2cd2deb
FS
781 return ret;
782 }
783
784 return SR_OK;
785}
786
787static int get_capture_info(const struct sr_dev_inst *sdi)
788{
789 struct dev_context *devc;
790 int ret;
c3d40037
HK
791 uint8_t buf[3 * sizeof(uint32_t)];
792 const uint8_t *rdptr;
f2cd2deb
FS
793
794 devc = sdi->priv;
795
42f6dd55 796 if ((ret = ctrl_in(sdi, CMD_FPGA_SPI, REG_SAMPLING, 0, buf, sizeof(buf))) != SR_OK) {
91f73872 797 sr_err("Cannot read capture info.");
f2cd2deb
FS
798 return ret;
799 }
c3d40037
HK
800
801 rdptr = buf;
802 devc->info.n_rep_packets = read_u32le_inc(&rdptr);
803 devc->info.n_rep_packets_before_trigger = read_u32le_inc(&rdptr);
804 devc->info.write_pos = read_u32le_inc(&rdptr);
f2cd2deb 805
cf057ac4 806 sr_dbg("Capture info: n_rep_packets: 0x%08x/%d, before_trigger: 0x%08x/%d, write_pos: 0x%08x/%d.",
1ed93110
GS
807 devc->info.n_rep_packets, devc->info.n_rep_packets,
808 devc->info.n_rep_packets_before_trigger,
809 devc->info.n_rep_packets_before_trigger,
810 devc->info.write_pos, devc->info.write_pos);
f2cd2deb 811
852c7d14
GS
812 if (devc->info.n_rep_packets % NUM_PACKETS_IN_CHUNK) {
813 sr_warn("Unexpected packets count %lu, not a multiple of %d.",
814 (unsigned long)devc->info.n_rep_packets,
815 NUM_PACKETS_IN_CHUNK);
91f73872 816 }
f2cd2deb
FS
817
818 return SR_OK;
819}
820
1ed93110
GS
821SR_PRIV int la2016_upload_firmware(struct sr_context *sr_ctx,
822 libusb_device *dev, uint16_t product_id)
f2cd2deb
FS
823{
824 char fw_file[1024];
825 snprintf(fw_file, sizeof(fw_file) - 1, UC_FIRMWARE, product_id);
40a0b2f4 826 return ezusb_upload_firmware(sr_ctx, dev, USB_CONFIGURATION, fw_file);
f2cd2deb
FS
827}
828
829SR_PRIV int la2016_setup_acquisition(const struct sr_dev_inst *sdi)
830{
831 struct dev_context *devc;
832 int ret;
833 uint8_t cmd;
834
835 devc = sdi->priv;
836
837 ret = set_threshold_voltage(sdi, devc->threshold_voltage);
838 if (ret != SR_OK)
839 return ret;
840
841 cmd = 0;
42f6dd55 842 if ((ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_CAPT_MODE, 0, &cmd, sizeof(cmd))) != SR_OK) {
91f73872 843 sr_err("Cannot send command to stop sampling.");
f2cd2deb
FS
844 return ret;
845 }
846
847 ret = set_trigger_config(sdi);
848 if (ret != SR_OK)
849 return ret;
850
851 ret = set_sample_config(sdi);
852 if (ret != SR_OK)
853 return ret;
854
855 return SR_OK;
856}
857
858SR_PRIV int la2016_start_acquisition(const struct sr_dev_inst *sdi)
859{
3ebc1cb2
GS
860 int ret;
861
852c7d14 862 ret = set_run_mode(sdi, RUNMODE_RUN);
3ebc1cb2
GS
863 if (ret != SR_OK)
864 return ret;
865
866 return SR_OK;
f2cd2deb
FS
867}
868
3ebc1cb2 869static int la2016_stop_acquisition(const struct sr_dev_inst *sdi)
f2cd2deb 870{
3ebc1cb2
GS
871 int ret;
872
852c7d14 873 ret = set_run_mode(sdi, RUNMODE_HALT);
3ebc1cb2
GS
874 if (ret != SR_OK)
875 return ret;
876
877 return SR_OK;
f2cd2deb
FS
878}
879
880SR_PRIV int la2016_abort_acquisition(const struct sr_dev_inst *sdi)
881{
3ebc1cb2
GS
882 int ret;
883 struct dev_context *devc;
884
885 ret = la2016_stop_acquisition(sdi);
886 if (ret != SR_OK)
887 return ret;
888
889 devc = sdi ? sdi->priv : NULL;
890 if (devc && devc->transfer)
891 libusb_cancel_transfer(devc->transfer);
892
893 return SR_OK;
f2cd2deb
FS
894}
895
cf057ac4 896static int la2016_start_download(const struct sr_dev_inst *sdi,
1ed93110 897 libusb_transfer_cb_fn cb)
f2cd2deb
FS
898{
899 struct dev_context *devc;
900 struct sr_usb_dev_inst *usb;
901 int ret;
c3d40037
HK
902 uint8_t wrbuf[2 * sizeof(uint32_t)];
903 uint8_t *wrptr;
f2cd2deb
FS
904 uint32_t to_read;
905 uint8_t *buffer;
906
907 devc = sdi->priv;
908 usb = sdi->conn;
909
910 if ((ret = get_capture_info(sdi)) != SR_OK)
911 return ret;
912
c3d40037
HK
913 devc->n_transfer_packets_to_read = devc->info.n_rep_packets / NUM_PACKETS_IN_CHUNK;
914 devc->n_bytes_to_read = devc->n_transfer_packets_to_read * TRANSFER_PACKET_LENGTH;
f2cd2deb
FS
915 devc->read_pos = devc->info.write_pos - devc->n_bytes_to_read;
916 devc->n_reps_until_trigger = devc->info.n_rep_packets_before_trigger;
917
91f73872 918 sr_dbg("Want to read %u xfer-packets starting from pos %" PRIu32 ".",
1ed93110 919 devc->n_transfer_packets_to_read, devc->read_pos);
f2cd2deb 920
00849545 921 if ((ret = ctrl_out(sdi, CMD_BULK_RESET, 0x00, 0, NULL, 0)) != SR_OK) {
91f73872 922 sr_err("Cannot reset USB bulk state.");
f2cd2deb
FS
923 return ret;
924 }
91f73872
GS
925 sr_dbg("Will read from 0x%08lx, 0x%08x bytes.",
926 (unsigned long)devc->read_pos, devc->n_bytes_to_read);
c3d40037
HK
927 wrptr = wrbuf;
928 write_u32le_inc(&wrptr, devc->read_pos);
929 write_u32le_inc(&wrptr, devc->n_bytes_to_read);
42f6dd55 930 if ((ret = ctrl_out(sdi, CMD_FPGA_SPI, REG_BULK, 0, wrbuf, wrptr - wrbuf)) != SR_OK) {
91f73872 931 sr_err("Cannot send USB bulk config.");
f2cd2deb
FS
932 return ret;
933 }
00849545 934 if ((ret = ctrl_out(sdi, CMD_BULK_START, 0x00, 0, NULL, 0)) != SR_OK) {
91f73872 935 sr_err("Cannot unblock USB bulk transfers.");
f2cd2deb
FS
936 return ret;
937 }
938
96dc954e
GS
939 /*
940 * Pick a buffer size for all USB transfers. The buffer size
941 * must be a multiple of the endpoint packet size. And cannot
942 * exceed a maximum value.
943 */
f2cd2deb 944 to_read = devc->n_bytes_to_read;
96dc954e
GS
945 if (to_read >= LA2016_USB_BUFSZ) /* Multiple transfers. */
946 to_read = LA2016_USB_BUFSZ;
947 else /* One transfer. */
e847645b 948 to_read = (to_read + (LA2016_EP6_PKTSZ-1)) & ~(LA2016_EP6_PKTSZ-1);
f2cd2deb
FS
949 buffer = g_try_malloc(to_read);
950 if (!buffer) {
91f73872
GS
951 sr_dbg("USB bulk transfer size %d bytes.", (int)to_read);
952 sr_err("Cannot allocate buffer for USB bulk transfer.");
f2cd2deb
FS
953 return SR_ERR_MALLOC;
954 }
955
956 devc->transfer = libusb_alloc_transfer(0);
852c7d14
GS
957 libusb_fill_bulk_transfer(devc->transfer,
958 usb->devhdl, USB_EP_CAPTURE_DATA | LIBUSB_ENDPOINT_IN,
959 buffer, to_read,
f2cd2deb
FS
960 cb, (void *)sdi, DEFAULT_TIMEOUT_MS);
961
962 if ((ret = libusb_submit_transfer(devc->transfer)) != 0) {
91f73872 963 sr_err("Cannot submit USB transfer: %s.", libusb_error_name(ret));
f2cd2deb
FS
964 libusb_free_transfer(devc->transfer);
965 devc->transfer = NULL;
966 g_free(buffer);
967 return SR_ERR;
968 }
969
970 return SR_OK;
971}
972
dfac9592
GS
973static void send_chunk(struct sr_dev_inst *sdi,
974 const uint8_t *packets, unsigned int num_tfers)
975{
976 struct dev_context *devc;
977 struct sr_datafeed_logic logic;
978 struct sr_datafeed_packet sr_packet;
979 unsigned int max_samples, n_samples, total_samples, free_n_samples;
980 unsigned int i, j, k;
cf057ac4 981 gboolean do_signal_trigger;
fe953391 982 uint8_t *wp;
dfac9592
GS
983 const uint8_t *rp;
984 uint16_t state;
985 uint8_t repetitions;
fe953391 986 uint8_t sample_buff[sizeof(state)];
dfac9592
GS
987
988 devc = sdi->priv;
989
fe953391 990 logic.unitsize = sizeof(sample_buff);
dfac9592
GS
991 logic.data = devc->convbuffer;
992
993 sr_packet.type = SR_DF_LOGIC;
994 sr_packet.payload = &logic;
995
fe953391 996 max_samples = devc->convbuffer_size / sizeof(sample_buff);
dfac9592 997 n_samples = 0;
fe953391 998 wp = devc->convbuffer;
dfac9592 999 total_samples = 0;
cf057ac4 1000 do_signal_trigger = FALSE;
dfac9592 1001
cf057ac4 1002 if (devc->trigger_involved && !devc->trigger_marked && devc->info.n_rep_packets_before_trigger == 0) {
dfac9592 1003 std_session_send_df_trigger(sdi);
cf057ac4 1004 devc->trigger_marked = TRUE;
dfac9592
GS
1005 }
1006
1007 rp = packets;
1008 for (i = 0; i < num_tfers; i++) {
1009 for (k = 0; k < NUM_PACKETS_IN_CHUNK; k++) {
1010 free_n_samples = max_samples - n_samples;
1011 if (free_n_samples < 256 || do_signal_trigger) {
1012 logic.length = n_samples * 2;
1013 sr_session_send(sdi, &sr_packet);
1014 n_samples = 0;
fe953391 1015 wp = devc->convbuffer;
dfac9592
GS
1016 if (do_signal_trigger) {
1017 std_session_send_df_trigger(sdi);
cf057ac4 1018 do_signal_trigger = FALSE;
dfac9592
GS
1019 }
1020 }
1021
1022 state = read_u16le_inc(&rp);
1023 repetitions = read_u8_inc(&rp);
fe953391
GS
1024 write_u16le((void *)&sample_buff, state);
1025 for (j = 0; j < repetitions; j++) {
1026 memcpy(wp, sample_buff, logic.unitsize);
1027 wp += logic.unitsize;
1028 }
dfac9592
GS
1029
1030 n_samples += repetitions;
1031 total_samples += repetitions;
1032 devc->total_samples += repetitions;
cf057ac4
GS
1033 if (devc->trigger_involved && !devc->trigger_marked) {
1034 if (!--devc->n_reps_until_trigger) {
1035 devc->trigger_marked = TRUE;
1036 do_signal_trigger = TRUE;
91f73872 1037 sr_dbg("Trigger position after %" PRIu64 " samples, %.6fms.",
1ed93110
GS
1038 devc->total_samples,
1039 (double)devc->total_samples / devc->cur_samplerate * 1e3);
dfac9592
GS
1040 }
1041 }
1042 }
1043 (void)read_u8_inc(&rp); /* Skip sequence number. */
1044 }
1045 if (n_samples) {
fe953391 1046 logic.length = n_samples * logic.unitsize;
dfac9592
GS
1047 sr_session_send(sdi, &sr_packet);
1048 if (do_signal_trigger) {
1049 std_session_send_df_trigger(sdi);
1050 }
1051 }
91f73872 1052 sr_dbg("Send_chunk done after %u samples.", total_samples);
dfac9592
GS
1053}
1054
1055static void LIBUSB_CALL receive_transfer(struct libusb_transfer *transfer)
1056{
1057 struct sr_dev_inst *sdi;
1058 struct dev_context *devc;
1059 struct sr_usb_dev_inst *usb;
1060 int ret;
1061
1062 sdi = transfer->user_data;
1063 devc = sdi->priv;
1064 usb = sdi->conn;
1065
1066 sr_dbg("receive_transfer(): status %s received %d bytes.",
1ed93110 1067 libusb_error_name(transfer->status), transfer->actual_length);
dfac9592
GS
1068
1069 if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT) {
91f73872 1070 sr_err("USB bulk transfer timeout.");
cf057ac4 1071 devc->download_finished = TRUE;
dfac9592
GS
1072 }
1073 send_chunk(sdi, transfer->buffer, transfer->actual_length / TRANSFER_PACKET_LENGTH);
1074
1075 devc->n_bytes_to_read -= transfer->actual_length;
1076 if (devc->n_bytes_to_read) {
1077 uint32_t to_read = devc->n_bytes_to_read;
96dc954e
GS
1078 /*
1079 * Determine read size for the next USB transfer. Make
1080 * the buffer size a multiple of the endpoint packet
1081 * size. Don't exceed a maximum value.
1082 */
dfac9592
GS
1083 if (to_read >= LA2016_USB_BUFSZ)
1084 to_read = LA2016_USB_BUFSZ;
96dc954e 1085 else
dfac9592 1086 to_read = (to_read + (LA2016_EP6_PKTSZ-1)) & ~(LA2016_EP6_PKTSZ-1);
852c7d14
GS
1087 libusb_fill_bulk_transfer(transfer,
1088 usb->devhdl, USB_EP_CAPTURE_DATA | LIBUSB_ENDPOINT_IN,
1089 transfer->buffer, to_read,
dfac9592
GS
1090 receive_transfer, (void *)sdi, DEFAULT_TIMEOUT_MS);
1091
1092 if ((ret = libusb_submit_transfer(transfer)) == 0)
1093 return;
91f73872
GS
1094 sr_err("Cannot submit another USB transfer: %s.",
1095 libusb_error_name(ret));
dfac9592
GS
1096 }
1097
1098 g_free(transfer->buffer);
1099 libusb_free_transfer(transfer);
cf057ac4 1100 devc->download_finished = TRUE;
dfac9592
GS
1101}
1102
1103SR_PRIV int la2016_receive_data(int fd, int revents, void *cb_data)
1104{
1105 const struct sr_dev_inst *sdi;
1106 struct dev_context *devc;
1107 struct drv_context *drvc;
1108 struct timeval tv;
1109
1110 (void)fd;
1111 (void)revents;
1112
1113 sdi = cb_data;
1114 devc = sdi->priv;
1115 drvc = sdi->driver->context;
1116
cf057ac4
GS
1117 if (!devc->completion_seen) {
1118 if (!la2016_is_idle(sdi)) {
96dc954e 1119 /* Not yet ready for sample data download. */
dfac9592
GS
1120 return TRUE;
1121 }
cf057ac4
GS
1122 devc->completion_seen = TRUE;
1123 devc->download_finished = FALSE;
1124 devc->trigger_marked = FALSE;
dfac9592 1125 devc->total_samples = 0;
96dc954e 1126 /* We can start downloading sample data. */
cf057ac4 1127 if (la2016_start_download(sdi, receive_transfer) != SR_OK) {
91f73872 1128 sr_err("Cannot start acquisition data download.");
dfac9592
GS
1129 return FALSE;
1130 }
91f73872 1131 sr_dbg("Acquisition data download started.");
dfac9592
GS
1132 std_session_send_df_frame_begin(sdi);
1133
1134 return TRUE;
1135 }
1136
1137 tv.tv_sec = tv.tv_usec = 0;
1138 libusb_handle_events_timeout(drvc->sr_ctx->libusb_ctx, &tv);
1139
cf057ac4 1140 if (devc->download_finished) {
91f73872 1141 sr_dbg("Download finished, post processing.");
dfac9592
GS
1142 std_session_send_df_frame_end(sdi);
1143
1144 usb_source_remove(sdi->session, drvc->sr_ctx);
1145 std_session_send_df_end(sdi);
1146
1147 la2016_stop_acquisition(sdi);
1148
1149 g_free(devc->convbuffer);
1150 devc->convbuffer = NULL;
1151
1152 devc->transfer = NULL;
1153
91f73872 1154 sr_dbg("Download finished, done post processing.");
dfac9592
GS
1155 }
1156
1157 return TRUE;
1158}
1159
f2cd2deb
FS
1160SR_PRIV int la2016_init_device(const struct sr_dev_inst *sdi)
1161{
8b172e78 1162 struct dev_context *devc;
f2cd2deb 1163 uint16_t state;
9de389b1 1164 uint8_t buf[8];
43d2e52f
GS
1165 const uint8_t *rdptr;
1166 uint8_t date_yy, date_mm;
1167 uint8_t dinv_yy, dinv_mm;
9de389b1 1168 uint8_t magic;
d6f89d4b 1169 const char *bitstream_fn;
9de389b1 1170 int ret;
f2cd2deb 1171
8b172e78
KG
1172 devc = sdi->priv;
1173
96dc954e 1174 /*
43d2e52f
GS
1175 * Four EEPROM bytes at offset 0x20 are the manufacturing date,
1176 * year and month in BCD format, followed by inverted values for
1177 * consistency checks. For example bytes 20 04 df fb translate
1178 * to 2020-04. This information can help identify the vintage of
1179 * devices when unknown magic numbers are seen.
9de389b1 1180 */
43d2e52f
GS
1181 ret = ctrl_in(sdi, CMD_EEPROM, 0x20, 0, buf, 4 * sizeof(uint8_t));
1182 if (ret != SR_OK) {
1183 sr_err("Cannot read manufacture date in EEPROM.");
1ed93110 1184 } else {
43d2e52f
GS
1185 rdptr = &buf[0];
1186 date_yy = read_u8_inc(&rdptr);
1187 date_mm = read_u8_inc(&rdptr);
1188 dinv_yy = read_u8_inc(&rdptr);
1189 dinv_mm = read_u8_inc(&rdptr);
1190 sr_info("Manufacture date: 20%02hx-%02hx.", date_yy, date_mm);
1191 if ((date_mm ^ dinv_mm) != 0xff || (date_yy ^ dinv_yy) != 0xff)
1192 sr_warn("Manufacture date fails checksum test.");
f2cd2deb 1193 }
f2cd2deb 1194
9de389b1 1195 /*
96dc954e
GS
1196 * Several Kingst logic analyzer devices share the same USB VID
1197 * and PID. The product ID determines which MCU firmware to load.
1198 * The MCU firmware provides access to EEPROM content which then
1199 * allows to identify the device model. Which in turn determines
1200 * which FPGA bitstream to load. Eight bytes at offset 0x08 are
1201 * to get inspected.
9de389b1 1202 *
96dc954e
GS
1203 * EEPROM content for model identification is kept redundantly
1204 * in memory. The values are stored in verbatim and in inverted
1205 * form, multiple copies are kept at different offsets. Example
1206 * data:
9de389b1 1207 *
96dc954e
GS
1208 * magic 0x08
1209 * | ~magic 0xf7
1210 * | |
1211 * 08f7000008f710ef
1212 * | |
1213 * | ~magic backup
1214 * magic backup
9de389b1 1215 *
96dc954e
GS
1216 * Exclusively inspecting the magic byte appears to be sufficient,
1217 * other fields seem to be 'don't care'.
9de389b1 1218 *
96dc954e
GS
1219 * magic 2 == LA2016 using "kingst-la2016-fpga.bitstream"
1220 * magic 3 == LA1016 using "kingst-la1016-fpga.bitstream"
1221 * magic 8 == LA2016a using "kingst-la2016a1-fpga.bitstream"
1222 * (latest v1.3.0 PCB, perhaps others)
1223 * magic 9 == LA1016a using "kingst-la1016a1-fpga.bitstream"
1224 * (latest v1.3.0 PCB, perhaps others)
9de389b1 1225 *
96dc954e
GS
1226 * When EEPROM content does not match the hardware configuration
1227 * (the board layout), the software may load but yield incorrect
1228 * results (like swapped channels). The FPGA bitstream itself
1229 * will authenticate with IC U10 and fail when its capabilities
1230 * do not match the hardware model. An LA1016 won't become a
1231 * LA2016 by faking its EEPROM content.
9de389b1 1232 */
9de389b1 1233 if ((ret = ctrl_in(sdi, CMD_EEPROM, 0x08, 0, &buf, sizeof(buf))) != SR_OK) {
91f73872 1234 sr_err("Cannot read EEPROM device identifier bytes.");
f2cd2deb
FS
1235 return ret;
1236 }
43d2e52f 1237 if ((buf[0] ^ buf[1]) == 0xff) {
96dc954e 1238 /* Primary copy of magic passes complement check. */
43d2e52f 1239 sr_dbg("Using primary copy of device type magic number.");
9de389b1 1240 magic = buf[0];
43d2e52f 1241 } else if ((buf[4] ^ buf[5]) == 0xff) {
96dc954e 1242 /* Backup copy of magic passes complement check. */
91f73872 1243 sr_dbg("Using backup copy of device type magic number.");
9de389b1 1244 magic = buf[4];
43d2e52f
GS
1245 } else {
1246 sr_err("Cannot find consistent device type identification.");
1247 magic = 0;
f2cd2deb 1248 }
91f73872 1249 sr_dbg("Device type: magic number is %hhu.", magic);
9de389b1 1250
96dc954e 1251 /* Select the FPGA bitstream depending on the model. */
9de389b1
KG
1252 switch (magic) {
1253 case 2:
d6f89d4b 1254 bitstream_fn = FPGA_FW_LA2016;
8b172e78
KG
1255 devc->max_samplerate = MAX_SAMPLE_RATE_LA2016;
1256 break;
1257 case 3:
d6f89d4b 1258 bitstream_fn = FPGA_FW_LA1016;
8b172e78 1259 devc->max_samplerate = MAX_SAMPLE_RATE_LA1016;
9de389b1
KG
1260 break;
1261 case 8:
d6f89d4b 1262 bitstream_fn = FPGA_FW_LA2016A;
8b172e78
KG
1263 devc->max_samplerate = MAX_SAMPLE_RATE_LA2016;
1264 break;
1265 case 9:
d6f89d4b 1266 bitstream_fn = FPGA_FW_LA1016A;
8b172e78 1267 devc->max_samplerate = MAX_SAMPLE_RATE_LA1016;
9de389b1
KG
1268 break;
1269 default:
d6f89d4b
GS
1270 bitstream_fn = NULL;
1271 break;
1272 }
1273 if (!bitstream_fn || !*bitstream_fn) {
91f73872 1274 sr_err("Cannot identify as one of the supported models.");
3f48ab02
FS
1275 return SR_ERR;
1276 }
f2cd2deb 1277
d6f89d4b
GS
1278 if (check_fpga_bitstream(sdi) != SR_OK) {
1279 ret = upload_fpga_bitstream(sdi, bitstream_fn);
1280 if (ret != SR_OK) {
1281 sr_err("Cannot upload FPGA bitstream.");
1282 return ret;
1283 }
1284 }
1285 ret = enable_fpga_bitstream(sdi);
9de389b1 1286 if (ret != SR_OK) {
d6f89d4b 1287 sr_err("Cannot enable FPGA bitstream after upload.");
9de389b1
KG
1288 return ret;
1289 }
1290
f2cd2deb 1291 state = run_state(sdi);
9de389b1 1292 if (state != 0x85e9) {
91f73872 1293 sr_warn("Unexpected run state, want 0x85e9, got 0x%04x.", state);
9de389b1 1294 }
f2cd2deb 1295
00849545 1296 if ((ret = ctrl_out(sdi, CMD_BULK_RESET, 0x00, 0, NULL, 0)) != SR_OK) {
91f73872 1297 sr_err("Cannot reset USB bulk transfer.");
f2cd2deb
FS
1298 return ret;
1299 }
9de389b1 1300
91f73872 1301 sr_dbg("Device should be initialized.");
f2cd2deb 1302
c34f4a89
GS
1303 ret = set_defaults(sdi);
1304 if (ret != SR_OK)
1305 return ret;
1306
1307 return SR_OK;
f2cd2deb
FS
1308}
1309
1310SR_PRIV int la2016_deinit_device(const struct sr_dev_inst *sdi)
1311{
1312 int ret;
1313
00849545 1314 if ((ret = ctrl_out(sdi, CMD_FPGA_ENABLE, 0x00, 0, NULL, 0)) != SR_OK) {
91f73872 1315 sr_err("Cannot deinitialize device's FPGA.");
f2cd2deb
FS
1316 return ret;
1317 }
1318
1319 return SR_OK;
1320}