hantek-dso: relays now set properly
They appear to be arranged to switch on/off a hierarchical series of devices that attenuate the channel by an order of magnitude.
This commit is contained in:
parent
384c28d9e7
commit
a217bcdf10
|
@ -468,29 +468,27 @@ SR_PRIV int dso_set_voltage(struct context *ctx)
|
||||||
|
|
||||||
SR_PRIV int dso_set_relays(struct context *ctx)
|
SR_PRIV int dso_set_relays(struct context *ctx)
|
||||||
{
|
{
|
||||||
int ret, cv1, cv2;
|
GString *gs;
|
||||||
uint8_t relays[] = { 0x00, 0x04, 0x08, 0x02, 0x20, 0x40, 0x10, 0x01,
|
int ret, i;
|
||||||
|
uint8_t relays[17] = { 0x00, 0x04, 0x08, 0x02, 0x20, 0x40, 0x10, 0x01,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
sr_dbg("hantek-dso: preparing CTRL_SETRELAYS");
|
sr_dbg("hantek-dso: preparing CTRL_SETRELAYS");
|
||||||
|
|
||||||
cv1 = ctx->voltage_ch1 / 3;
|
if (ctx->voltage_ch1 < VDIV_1V)
|
||||||
cv2 = ctx->voltage_ch2 / 3;
|
|
||||||
|
|
||||||
if (cv1 > 0)
|
|
||||||
relays[1] = ~relays[1];
|
relays[1] = ~relays[1];
|
||||||
|
|
||||||
if (cv1 > 1)
|
if (ctx->voltage_ch1 < VDIV_100MV)
|
||||||
relays[2] = ~relays[2];
|
relays[2] = ~relays[2];
|
||||||
|
|
||||||
sr_dbg("hantek-dso: CH1 coupling %d", ctx->coupling_ch1);
|
sr_dbg("hantek-dso: CH1 coupling %d", ctx->coupling_ch1);
|
||||||
if (ctx->coupling_ch1 != COUPLING_AC)
|
if (ctx->coupling_ch1 != COUPLING_AC)
|
||||||
relays[3] = ~relays[3];
|
relays[3] = ~relays[3];
|
||||||
|
|
||||||
if (cv2 > 0)
|
if (ctx->voltage_ch2 < VDIV_1V)
|
||||||
relays[4] = ~relays[4];
|
relays[4] = ~relays[4];
|
||||||
|
|
||||||
if (cv2 > 1)
|
if (ctx->voltage_ch2 < VDIV_100MV)
|
||||||
relays[5] = ~relays[5];
|
relays[5] = ~relays[5];
|
||||||
|
|
||||||
sr_dbg("hantek-dso: CH2 coupling %d", ctx->coupling_ch1);
|
sr_dbg("hantek-dso: CH2 coupling %d", ctx->coupling_ch1);
|
||||||
|
@ -500,9 +498,18 @@ SR_PRIV int dso_set_relays(struct context *ctx)
|
||||||
if (!strcmp(ctx->triggersource, "EXT"))
|
if (!strcmp(ctx->triggersource, "EXT"))
|
||||||
relays[7] = ~relays[7];
|
relays[7] = ~relays[7];
|
||||||
|
|
||||||
|
if (sr_log_loglevel_get() >= SR_LOG_DBG) {
|
||||||
|
gs = g_string_sized_new(128);
|
||||||
|
g_string_printf(gs, "hantek-dso: relays:");
|
||||||
|
for (i = 0; i < 17; i++)
|
||||||
|
g_string_append_printf(gs, " %.2x", relays[i]);
|
||||||
|
sr_dbg(gs->str);
|
||||||
|
g_string_free(gs, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = libusb_control_transfer(ctx->usb->devhdl,
|
if ((ret = libusb_control_transfer(ctx->usb->devhdl,
|
||||||
LIBUSB_REQUEST_TYPE_VENDOR, CTRL_SETRELAYS,
|
LIBUSB_REQUEST_TYPE_VENDOR, CTRL_SETRELAYS,
|
||||||
0, 0, relays, sizeof(relays), 100)) != sizeof(relays)) {
|
0, 0, relays, 17, 100)) != sizeof(relays)) {
|
||||||
sr_err("failed to set relays: %d", ret);
|
sr_err("failed to set relays: %d", ret);
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue