X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhantek-dso%2Fdso.c;h=8561ac3ded1494474bd48564cee18cc15e734874;hb=32ba0d80054df01767ec323c621ab1c6bc5f310c;hp=b83045757f756c26e29769ac6200e1b9af8dbe17;hpb=395206f460cc4002feedca2265cf374b90c9c047;p=libsigrok.git
diff --git a/src/hardware/hantek-dso/dso.c b/src/hardware/hantek-dso/dso.c
index b8304575..8561ac3d 100644
--- a/src/hardware/hantek-dso/dso.c
+++ b/src/hardware/hantek-dso/dso.c
@@ -19,12 +19,15 @@
* along with this program. If not, see .
*/
-#include "libsigrok.h"
-#include "libsigrok-internal.h"
-#include "dso.h"
+#include
#include
#include
#include
+#include
+#include "libsigrok-internal.h"
+#include "dso.h"
+
+#define NUM_CHANNELS 2
extern struct sr_dev_driver hantek_dso_driver_info;
@@ -73,8 +76,7 @@ static int dso_getmps(libusb_device *dev)
const struct libusb_interface_descriptor *intf_dsc;
int mps;
- if (libusb_get_device_descriptor(dev, &des) != 0)
- return 0;
+ libusb_get_device_descriptor(dev, &des);
if (des.bNumConfigurations != 1)
return 0;
@@ -109,7 +111,7 @@ err:
SR_PRIV int dso_open(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
- struct drv_context *drvc = hantek_dso_driver_info.priv;
+ struct drv_context *drvc = hantek_dso_driver_info.context;
struct sr_usb_dev_inst *usb;
struct libusb_device_descriptor des;
libusb_device **devlist;
@@ -125,11 +127,7 @@ SR_PRIV int dso_open(struct sr_dev_inst *sdi)
libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist);
for (i = 0; devlist[i]; i++) {
- if ((err = libusb_get_device_descriptor(devlist[i], &des))) {
- sr_err("Failed to get device descriptor: %s.",
- libusb_error_name(err));
- continue;
- }
+ libusb_get_device_descriptor(devlist[i], &des);
if (des.idVendor != devc->profile->fw_vid
|| des.idProduct != devc->profile->fw_pid)
@@ -185,7 +183,7 @@ SR_PRIV void dso_close(struct sr_dev_inst *sdi)
usb = sdi->conn;
- if (usb->devhdl == NULL)
+ if (!usb->devhdl)
return;
sr_info("Closing device on %d.%d (logical) / %s (physical) interface %d.",
@@ -225,7 +223,7 @@ static int get_channel_offsets(const struct sr_dev_inst *sdi)
* since that's how voltage offsets are submitted back to the DSO.
* Convert to host order now, so we can use them natively.
*/
- for (chan = 0; chan < 2; chan++) {
+ for (chan = 0; chan < NUM_CHANNELS; chan++) {
for (v = 0; v < 9; v++) {
devc->channel_levels[chan][v][0] =
g_ntohs(devc->channel_levels[chan][v][0]);
@@ -236,7 +234,7 @@ static int get_channel_offsets(const struct sr_dev_inst *sdi)
if (sr_log_loglevel_get() >= SR_LOG_DBG) {
gs = g_string_sized_new(128);
- for (chan = 0; chan < 2; chan++) {
+ for (chan = 0; chan < NUM_CHANNELS; chan++) {
g_string_printf(gs, "CH%d:", chan + 1);
for (v = 0; v < 9; v++) {
g_string_append_printf(gs, " %.4x-%.4x",
@@ -383,19 +381,18 @@ static int dso_set_filters(const struct sr_dev_inst *sdi)
memset(cmdstring, 0, sizeof(cmdstring));
cmdstring[0] = CMD_SET_FILTERS;
cmdstring[1] = 0x0f;
- if (devc->filter_ch1) {
+ if (devc->filter[0]) {
sr_dbg("Turning on CH1 filter.");
cmdstring[2] |= 0x80;
}
- if (devc->filter_ch2) {
+ if (devc->filter[1]) {
sr_dbg("Turning on CH2 filter.");
cmdstring[2] |= 0x40;
}
- if (devc->filter_trigger) {
- /* TODO: supported on the DSO-2090? */
- sr_dbg("Turning on trigger filter.");
- cmdstring[2] |= 0x20;
- }
+ /*
+ * Not supported: filtering on the trigger
+ * cmdstring[2] |= 0x20;
+ */
if (send_begin(sdi) != SR_OK)
return SR_ERR;
@@ -428,8 +425,8 @@ static int dso_set_voltage(const struct sr_dev_inst *sdi)
cmdstring[2] = 0x30;
/* CH1 volts/div is encoded in bits 0-1 */
- sr_dbg("CH1 vdiv index: %d.", devc->voltage_ch1);
- switch (devc->voltage_ch1) {
+ sr_dbg("CH1 vdiv index: %d.", devc->voltage[0]);
+ switch (devc->voltage[0]) {
case VDIV_1V:
case VDIV_100MV:
case VDIV_10MV:
@@ -448,8 +445,8 @@ static int dso_set_voltage(const struct sr_dev_inst *sdi)
}
/* CH2 volts/div is encoded in bits 2-3 */
- sr_dbg("CH2 vdiv index: %d.", devc->voltage_ch2);
- switch (devc->voltage_ch2) {
+ sr_dbg("CH2 vdiv index: %d.", devc->voltage[1]);
+ switch (devc->voltage[1]) {
case VDIV_1V:
case VDIV_100MV:
case VDIV_10MV:
@@ -494,24 +491,24 @@ static int dso_set_relays(const struct sr_dev_inst *sdi)
devc = sdi->priv;
usb = sdi->conn;
- if (devc->voltage_ch1 < VDIV_1V)
+ if (devc->voltage[0] < VDIV_1V)
relays[1] = ~relays[1];
- if (devc->voltage_ch1 < VDIV_100MV)
+ if (devc->voltage[0] < VDIV_100MV)
relays[2] = ~relays[2];
- sr_dbg("CH1 coupling: %d.", devc->coupling_ch1);
- if (devc->coupling_ch1 != COUPLING_AC)
+ sr_dbg("CH1 coupling: %d.", devc->coupling[0]);
+ if (devc->coupling[0] != COUPLING_AC)
relays[3] = ~relays[3];
- if (devc->voltage_ch2 < VDIV_1V)
+ if (devc->voltage[1] < VDIV_1V)
relays[4] = ~relays[4];
- if (devc->voltage_ch2 < VDIV_100MV)
+ if (devc->voltage[1] < VDIV_100MV)
relays[5] = ~relays[5];
- sr_dbg("CH2 coupling: %d.", devc->coupling_ch1);
- if (devc->coupling_ch2 != COUPLING_AC)
+ sr_dbg("CH2 coupling: %d.", devc->coupling[1]);
+ if (devc->coupling[1] != COUPLING_AC)
relays[6] = ~relays[6];
if (!strcmp(devc->triggersource, "EXT"))
@@ -552,7 +549,7 @@ static int dso_set_voffsets(const struct sr_dev_inst *sdi)
memset(offsets, 0, sizeof(offsets));
/* Channel 1 */
- ch_levels = devc->channel_levels[0][devc->voltage_ch1];
+ ch_levels = devc->channel_levels[0][devc->voltage[0]];
offset = (ch_levels[1] - ch_levels[0]) * devc->voffset_ch1 + ch_levels[0];
offsets[0] = (offset >> 8) | 0x20;
offsets[1] = offset & 0xff;
@@ -560,7 +557,7 @@ static int dso_set_voffsets(const struct sr_dev_inst *sdi)
offsets[0], offsets[1]);
/* Channel 2 */
- ch_levels = devc->channel_levels[1][devc->voltage_ch2];
+ ch_levels = devc->channel_levels[1][devc->voltage[1]];
offset = (ch_levels[1] - ch_levels[0]) * devc->voffset_ch2 + ch_levels[0];
offsets[2] = (offset >> 8) | 0x20;
offsets[3] = offset & 0xff;
@@ -704,7 +701,7 @@ SR_PRIV int dso_get_capturestate(const struct sr_dev_inst *sdi,
bitvalue = 1;
for (i = 0; i < 24; i++) {
/* Each set bit inverts all bits with a lower value. */
- if(toff & bitvalue)
+ if (toff & bitvalue)
toff ^= bitvalue - 1;
bitvalue <<= 1;
}