Browse Source

clean up code & comments a bit

hw/sq50
sys64738 3 months ago
parent
commit
b244ed5246
  1. 94
      src/hardware/ikalogic-scanaquad/api.c
  2. 23
      src/hardware/ikalogic-scanaquad/protocol.c

94
src/hardware/ikalogic-scanaquad/api.c

@ -44,39 +44,33 @@ static const uint32_t devopts[] = {
SR_CONF_LOGIC_THRESHOLD | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
SR_CONF_LOGIC_THRESHOLD_CUSTOM | SR_CONF_GET | SR_CONF_SET,
/* "frame is a single capture" -> don't use here, not applicable */
/*SR_CONF_LIMIT_FRAMES | SR_CONF_GET | SR_CONF_SET,*/
/*
* TODO:
* * CAPTURE_RATIO: units?: int 0..100
* * LIMIT_MSEC: units?: milliseconds
* * LIMIT_SAMPLES: units?: samples
* * SAMPLERATE: "overdrive" to 200 MHz on SQ50 possible??? yes!
*
* * VOLTAGE_THRESHOLD vs LOGIC_THRESHOLD? LOGIC_THRESHOLD_CUSTOM: ???
* * VOLTAGE_THRESHOLD: 2 double values, custom selection?
* * LOGIC_THRESHOLD: selection of (max value) voltages
* * LOGIC_THRESHOLD_CUSTOM: custom ^
/*SR_CONF_TRIGGER_MATCH | SR_CONF_LIST,*/
/* list of TODO stuff:
* * VOLTAGE_THRESHOLD vs LOGIC_THRESHOLD? LOGIC_THRESHOLD_CUSTOM?
* * VOLTAGE_THRESHOLD: 2 double values (min, max) with a slider selection GUI
* * LOGIC_THRESHOLD: selection of (max, not thresh value) voltages
* * LOGIC_THRESHOLD_CUSTOM: custom ^, so kinda boils down to VOLTAGE_THRESHOLD?
* * see kingst-la2016/api.c
* * VOLTAGE, VOLTAGE_TARGET: ???
* * not applicable here
* * except maybe VOLTAGE_TARGET is, for PATTERN_MODE?
* * BUFFERSIZE: ???
* * DATALOG: ???
* * PATTERN_MODE: ???
* * string of a pattern name?? so uuuh, fuck (-> filename of blob to upload?)
* * OUTPUT_FREQUENCY: ??? (used in PATTERN_MODE instead of SAMPLERATE?)
* * not applicable here, for analog stuff only
* * CONN: ???
* * if you need to specify eg. a serial port. not really applicable here
* (need to scan by vid:pid)
* * currently implemnted as all of them, pulseview gives a simple slider
* without value indication, which is not that practical to use...
* LOGIC_THRESHOLD(_CUSTOM) seems to give no UI?
*
* * trigger stuff aaa (TRIGGER_SOURCE, TRIGGER_MATCH, TRIGGER_LEVEL, TRIGGER_PATTERN)
* * TRIGGER_SOURCE: probably not useful
* * TRIGGER_MATCH: on what can we match? (hi, lo, rise, fall) -> LIST only
* * TRIGGER_LEVEL: seems to be an analog thing, not applicable here
* * BUFFERSIZE, DATALOG, PATTERN_MODE: should this be used?
*
* * trigger stuff:
* * TRIGGER_MATCH: uncomment when TRIGGER_PATTERN is implemented
* * TRIGGER_PATTERN: freeform string
* * see asix-sigma/protocol.c:1603 , it has some proposed formats,
* however, these aren't sufficient here as the SQ series also allows
* varying pulse widths for each trigger step...
* * TRIGGER_LEVEL, TRIGGER_SOURCE: not applicable here
*
* * the SQ50 accepts 200 MHz samplerate and a buffer size longer than it
* has available physical backing for, so it's not unlikely that modding
* it to have more memory is possible. so maybe memory and frequency
* option shouldn't be strictly checked?
* see also: https://git.lain.faith/BLAHAJ/sq50-re/wiki/Hardware-info
*/
};
@ -89,18 +83,25 @@ static const uint64_t samplerates[] = {
* blob makes it look like it can */
/* also, looks like the SQ50 can totally do 100 and 200 MHz... */
SR_MHZ(200), SR_MHZ(100),
SR_MHZ(50), SR_MHZ(25), SR_MHZ(10), SR_MHZ(5), SR_MHZ(1),
SR_MHZ( 50), SR_MHZ( 25), SR_MHZ( 10), SR_MHZ( 5), SR_MHZ( 1),
SR_KHZ(500), SR_KHZ(250), SR_KHZ(100), SR_KHZ(50), SR_KHZ(10)
};
static const char *thresholds[] = {
"1.8V", // 0x46 0x1e | 1.8 0.8 ~44%
"2.8V", // 0x6e 0x2c | 2.8 1.1 ~40%
"3.3V", // 0x81 0x46 | 3.3 1.8 ~55%
"3.6V", // 0x8d 0x4f | 3.6 2.0 ~55%
"5V" , // 0xc4 0x72 | 5.0 2.9 ~58%
"5VTTL",// 0xc3 0x3b | 5.0 1.5
"User" // VOLTAGE_THRESHOLD == LOGIC_THRESHOLD_CUSTOM (?)
"1.8V", /* 0x46 0x1e | 1.8 0.8 ~44% */
"2.8V", /* 0x6e 0x2c | 2.8 1.1 ~40% */
"3.3V", /* 0x81 0x46 | 3.3 1.8 ~55% */
"3.6V", /* 0x8d 0x4f | 3.6 2.0 ~55% */
"5V" , /* 0xc4 0x72 | 5.0 2.9 ~58% */
"5VTTL",/* 0xc3 0x3b | 5.0 1.5 */
"User" /* VOLTAGE_THRESHOLD == LOGIC_THRESHOLD_CUSTOM (?) */
};
static const int matches[] = {
SR_TRIGGER_ZERO,
SR_TRIGGER_ONE,
SR_TRIGGER_RISING,
SR_TRIGGER_FALLING,
};
static uint64_t dc_samples_to_msec(struct dev_context *dc, uint64_t samples)
@ -370,15 +371,18 @@ static int config_set(uint32_t key, GVariant *data,
dc->samplerate = g_variant_get_uint64(data);
break;
case SR_CONF_LIMIT_MSEC:
/*printf("msec = %lu\n", g_variant_get_uint64(data));*/
dc->limit_samples = dc_msec_to_samples(dc, g_variant_get_uint64(data));
/* TODO: make this check optional */
if (dc->limit_samples > dc->memsize_max * 4)
dc->limit_samples = dc->memsize_max * 4;
break;
case SR_CONF_LIMIT_SAMPLES:
/*printf("samples = %lu\n", g_variant_get_uint64(data));*/
dc->limit_samples = g_variant_get_uint64(data);
/* TODO: make this check optional */
if (dc->limit_samples > dc->memsize_max * 4)
dc->limit_samples = dc->memsize_max * 4;
break;
case SR_CONF_CAPTURE_RATIO:
/*printf("ratio = %lu\n", g_variant_get_uint64(data));*/
dc->capture_ratio = g_variant_get_uint64(data);
break;
case SR_CONF_VOLTAGE_THRESHOLD:
@ -389,12 +393,11 @@ static int config_set(uint32_t key, GVariant *data,
/* in the LOGIC_THRESHOLD_CUSTOM case: see 'if' stmt before switch */
dc->voltage_idx = 6; /* user */
dc->voltage.thresh = (int)(volt * 39.2);
/* emulate vendor software values in a shitty way. not 100% exact but
/* emulate vendor software values in a naive way. not 100% exact but
* oh well. */
dc->voltage.level = (dc->voltage.thresh < 0x30)
? (int)(volt * 39.2 / 0.40)
: (int)(volt * 39.2 / 0.55);
/*printf("voltage: %02x %02x\n", dc->voltage.level, dc->voltage.thresh);*/
break;
default:
sr_err("%s no conf key %u", __func__, key);
@ -421,7 +424,10 @@ static int config_list(uint32_t key, GVariant **data,
*data = std_gvar_min_max_step_thresholds(0.8, 2.9, 0.1);
break;
case SR_CONF_LOGIC_THRESHOLD:
*data = g_variant_new_strv(thresholds, ARRAY_SIZE(thresholds));
*data = g_variant_new_strv(ARRAY_AND_SIZE(thresholds));
break;
case SR_CONF_TRIGGER_MATCH:
*data = std_gvar_array_i32(ARRAY_AND_SIZE(matches));
break;
default:
sr_err("%s no conf key %u", __func__, key);

23
src/hardware/ikalogic-scanaquad/protocol.c

@ -30,11 +30,11 @@ SR_PRIV struct dev_context *sq_new(struct ftdi_context *ft)
dc = (struct dev_context *)g_malloc0(sizeof(struct dev_context));
dc->ft = ft;
/* some sensible defaults */
/* some sensible defaults (mostly the vendor software defaults) */
dc->samplerate = SR_MHZ(25);
dc->capture_ratio = 10;
dc->capture_ratio = 10; /* 10% in */
dc->voltage.level = 0x81; /* 3.3v */
dc->voltage.thresh = 0x46; /* 1.8v (3.3v cmos thresh- */
dc->voltage.thresh = 0x46; /* 1.8v (3.3v cmos thresh) */
dc->voltage_idx = 2; /* "3.3V" */
return dc;
@ -589,9 +589,9 @@ SR_PRIV int scanaquad_apply_current_settings(struct dev_context *dc, gboolean pa
/* TODO: more than just capture mode */
samplim = dc->limit_samples / 4;
/* TODO: switch to override this check */
ms1 = (samplim > dc->memsize_max) ? dc->memsize_max : samplim;
ms2 = (samplim > dc->memsize_max) ? dc->memsize_max : samplim;
/* sample limit vs LA physical memory size check is done in api.c */
ms1 = samplim;
ms2 = samplim;
ms3 = (uint32_t)(dc->memsize_max * (1 - dc->capture_ratio * 0.01));
sett.memsetting1[0] = (ms1>> 0) & 0xff;
@ -623,6 +623,7 @@ SR_PRIV int scanaquad_apply_current_triggers(struct dev_context *dc)
}
/* finally, we can implement the higher-level functions. */
SR_PRIV int scanaquad_acquisition_start(struct dev_context *dc)
@ -680,11 +681,6 @@ static void scanaquad_unpack_samples(uint8_t *rdata, size_t totalunpackbytes)
rdata[i*2-1] = (rdata[i-1] & 0xf0) >> 4;
rdata[i*2-2] = (rdata[i-1] & 0x0f) >> 0;
}
/*for (i = 0; i < totalunpackbytes; ++i) {
printf("%01x ", rdata[i]);
if ((i & 15) == 15) printf("\n");
}*/
}
SR_PRIV int scanaquad_acquisition_finish(struct sr_dev_inst *sdi, struct dev_context *dc)
@ -736,6 +732,7 @@ SR_PRIV int scanaquad_acquisition_finish(struct sr_dev_inst *sdi, struct dev_con
scanaquad_unpack_samples(rdata, nbytes * 2);
/* 3 packets, for trigger indicator */
logic1.length = trig_instant;
logic1.unitsize = 1;
logic1.data = rdata;
@ -757,7 +754,7 @@ SR_PRIV int scanaquad_acquisition_finish(struct sr_dev_inst *sdi, struct dev_con
sr_session_send(sdi, &packet2);
sr_session_send(sdi, &packet3);
/* I hope this is fine to do?? */
/* i hope this is fine to do? seems like it does work just fine with pulseview */
g_free(rdata);
return SR_OK;
@ -797,8 +794,6 @@ SR_PRIV int scanaquad_receive_data(int fd, int revents, void *cb_data)
(void)fd;
(void)revents;
/*sr_spew("receive data");*/
if (!(sdi = cb_data)) return TRUE;
if (!(dc = sdi->priv)) return TRUE;
if (!dc->ft) return TRUE;

Loading…
Cancel
Save