hantek-dso: move buffer sizes to device context
There are only two sizes for every device: 10k and the complete per-channel buffer size. This can be doubled if one channel is disabled.
This commit is contained in:
parent
fe9ac25250
commit
034accb512
|
@ -56,29 +56,38 @@ static const char *probe_names[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint64_t buffersizes_32k[] = {
|
||||||
|
10240, 32768,
|
||||||
|
};
|
||||||
|
static const uint64_t buffersizes_512k[] = {
|
||||||
|
10240, 524288,
|
||||||
|
};
|
||||||
|
static const uint64_t buffersizes_14k[] = {
|
||||||
|
10240, 14336,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct dso_profile dev_profiles[] = {
|
static const struct dso_profile dev_profiles[] = {
|
||||||
{ 0x04b4, 0x2090, 0x04b5, 0x2090,
|
{ 0x04b4, 0x2090, 0x04b5, 0x2090,
|
||||||
"Hantek", "DSO-2090",
|
"Hantek", "DSO-2090",
|
||||||
|
buffersizes_32k,
|
||||||
FIRMWARE_DIR "/hantek-dso-2090.fw" },
|
FIRMWARE_DIR "/hantek-dso-2090.fw" },
|
||||||
{ 0x04b4, 0x2150, 0x04b5, 0x2150,
|
{ 0x04b4, 0x2150, 0x04b5, 0x2150,
|
||||||
"Hantek", "DSO-2150",
|
"Hantek", "DSO-2150",
|
||||||
|
buffersizes_32k,
|
||||||
FIRMWARE_DIR "/hantek-dso-2150.fw" },
|
FIRMWARE_DIR "/hantek-dso-2150.fw" },
|
||||||
{ 0x04b4, 0x2250, 0x04b5, 0x2250,
|
{ 0x04b4, 0x2250, 0x04b5, 0x2250,
|
||||||
"Hantek", "DSO-2250",
|
"Hantek", "DSO-2250",
|
||||||
|
buffersizes_512k,
|
||||||
FIRMWARE_DIR "/hantek-dso-2250.fw" },
|
FIRMWARE_DIR "/hantek-dso-2250.fw" },
|
||||||
{ 0x04b4, 0x5200, 0x04b5, 0x5200,
|
{ 0x04b4, 0x5200, 0x04b5, 0x5200,
|
||||||
"Hantek", "DSO-5200",
|
"Hantek", "DSO-5200",
|
||||||
|
buffersizes_14k,
|
||||||
FIRMWARE_DIR "/hantek-dso-5200.fw" },
|
FIRMWARE_DIR "/hantek-dso-5200.fw" },
|
||||||
{ 0x04b4, 0x520a, 0x04b5, 0x520a,
|
{ 0x04b4, 0x520a, 0x04b5, 0x520a,
|
||||||
"Hantek", "DSO-5200A",
|
"Hantek", "DSO-5200A",
|
||||||
|
buffersizes_512k,
|
||||||
FIRMWARE_DIR "/hantek-dso-5200A.fw" },
|
FIRMWARE_DIR "/hantek-dso-5200A.fw" },
|
||||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
{ 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||||
};
|
|
||||||
|
|
||||||
static const uint64_t buffersizes[] = {
|
|
||||||
10240,
|
|
||||||
32768,
|
|
||||||
/* TODO: 65535 */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint64_t timebases[][2] = {
|
static const uint64_t timebases[][2] = {
|
||||||
|
@ -437,13 +446,13 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
|
||||||
break;
|
break;
|
||||||
case SR_CONF_BUFFERSIZE:
|
case SR_CONF_BUFFERSIZE:
|
||||||
tmp_u64 = g_variant_get_uint64(data);
|
tmp_u64 = g_variant_get_uint64(data);
|
||||||
for (i = 0; buffersizes[i]; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
if (buffersizes[i] == tmp_u64) {
|
if (devc->profile->buffersizes[i] == tmp_u64) {
|
||||||
devc->framesize = tmp_u64;
|
devc->framesize = tmp_u64;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (buffersizes[i] == 0)
|
if (i == 2)
|
||||||
ret = SR_ERR_ARG;
|
ret = SR_ERR_ARG;
|
||||||
break;
|
break;
|
||||||
case SR_CONF_TIMEBASE:
|
case SR_CONF_TIMEBASE:
|
||||||
|
@ -531,9 +540,14 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
|
||||||
|
|
||||||
static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
|
static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
|
||||||
{
|
{
|
||||||
|
struct dev_context *devc;
|
||||||
|
|
||||||
(void)sdi;
|
(void)sdi;
|
||||||
|
|
||||||
|
if (!sdi)
|
||||||
|
return SR_ERR_ARG;
|
||||||
|
|
||||||
|
devc = sdi->priv;
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case SR_CONF_DEVICE_OPTIONS:
|
case SR_CONF_DEVICE_OPTIONS:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
|
||||||
|
@ -541,7 +555,7 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
|
||||||
break;
|
break;
|
||||||
case SR_CONF_BUFFERSIZE:
|
case SR_CONF_BUFFERSIZE:
|
||||||
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT64,
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT64,
|
||||||
buffersizes, ARRAY_SIZE(buffersizes), sizeof(uint64_t));
|
devc->profile->buffersizes, 2, sizeof(uint64_t));
|
||||||
break;
|
break;
|
||||||
case SR_CONF_COUPLING:
|
case SR_CONF_COUPLING:
|
||||||
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
|
*data = g_variant_new_strv(coupling, ARRAY_SIZE(coupling));
|
||||||
|
|
|
@ -280,8 +280,7 @@ SR_PRIV int dso_set_trigger_samplerate(struct dev_context *devc)
|
||||||
|
|
||||||
/* Timebase fast */
|
/* Timebase fast */
|
||||||
sr_dbg("Time base index: %d.", devc->timebase);
|
sr_dbg("Time base index: %d.", devc->timebase);
|
||||||
switch (devc->framesize) {
|
if (devc->framesize == FRAMESIZE_SMALL) {
|
||||||
case FRAMESIZE_SMALL:
|
|
||||||
if (devc->timebase < TIME_20us)
|
if (devc->timebase < TIME_20us)
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
else if (devc->timebase == TIME_20us)
|
else if (devc->timebase == TIME_20us)
|
||||||
|
@ -292,8 +291,7 @@ SR_PRIV int dso_set_trigger_samplerate(struct dev_context *devc)
|
||||||
tmp = 3;
|
tmp = 3;
|
||||||
else if (devc->timebase >= TIME_200us)
|
else if (devc->timebase >= TIME_200us)
|
||||||
tmp = 4;
|
tmp = 4;
|
||||||
break;
|
} else {
|
||||||
case FRAMESIZE_LARGE:
|
|
||||||
if (devc->timebase < TIME_40us) {
|
if (devc->timebase < TIME_40us) {
|
||||||
sr_err("Timebase < 40us only supported with 10K buffer.");
|
sr_err("Timebase < 40us only supported with 10K buffer.");
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
|
@ -306,7 +304,6 @@ SR_PRIV int dso_set_trigger_samplerate(struct dev_context *devc)
|
||||||
tmp = 3;
|
tmp = 3;
|
||||||
else if (devc->timebase >= TIME_400us)
|
else if (devc->timebase >= TIME_400us)
|
||||||
tmp = 4;
|
tmp = 4;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
cmdstring[2] |= (tmp & 0x07) << 5;
|
cmdstring[2] |= (tmp & 0x07) << 5;
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,8 @@
|
||||||
/* Hantek DSO-specific protocol values */
|
/* Hantek DSO-specific protocol values */
|
||||||
#define EEPROM_CHANNEL_OFFSETS 0x08
|
#define EEPROM_CHANNEL_OFFSETS 0x08
|
||||||
|
|
||||||
|
/* All models have this for their "fast" mode. */
|
||||||
#define FRAMESIZE_SMALL 10240
|
#define FRAMESIZE_SMALL 10240
|
||||||
#define FRAMESIZE_LARGE 32768
|
|
||||||
|
|
||||||
enum control_requests {
|
enum control_requests {
|
||||||
CTRL_READ_EEPROM = 0xa2,
|
CTRL_READ_EEPROM = 0xa2,
|
||||||
|
@ -163,6 +163,7 @@ struct dso_profile {
|
||||||
uint16_t fw_pid;
|
uint16_t fw_pid;
|
||||||
char *vendor;
|
char *vendor;
|
||||||
char *model;
|
char *model;
|
||||||
|
const uint64_t *buffersizes;
|
||||||
char *firmware;
|
char *firmware;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue