X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Ftesto%2Fprotocol.c;h=396612fdc3a479377ae05e3ac7a529046486abdf;hb=d1144645512490c64813f4ef5a5b0c305de50260;hp=bdfaf1fd3103cf9340c686adaa05c39b538166bb;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git
diff --git a/src/hardware/testo/protocol.c b/src/hardware/testo/protocol.c
index bdfaf1fd..396612fd 100644
--- a/src/hardware/testo/protocol.c
+++ b/src/hardware/testo/protocol.c
@@ -17,6 +17,7 @@
* along with this program. If not, see .
*/
+#include
#include
#include "protocol.h"
@@ -24,34 +25,33 @@ SR_PRIV int testo_set_serial_params(struct sr_usb_dev_inst *usb)
{
int ret;
- if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_BAUDRATE,
+ if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_BAUDRATE,
FTDI_BAUDRATE_115200, FTDI_INDEX, NULL, 0, 10)) < 0) {
- sr_err("Failed to set baudrate: %s", libusb_error_name(ret));
- return SR_ERR;
+ sr_err("Failed to set baudrate: %s", libusb_error_name(ret));
+ return SR_ERR;
}
- if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_PARAMS,
+ if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_PARAMS,
FTDI_PARAMS_8N1, FTDI_INDEX, NULL, 0, 10)) < 0) {
- sr_err("Failed to set comm parameters: %s", libusb_error_name(ret));
- return SR_ERR;
+ sr_err("Failed to set comm parameters: %s", libusb_error_name(ret));
+ return SR_ERR;
}
- if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_FLOWCTRL,
+ if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_FLOWCTRL,
FTDI_FLOW_NONE, FTDI_INDEX, NULL, 0, 10)) < 0) {
- sr_err("Failed to set flow control: %s", libusb_error_name(ret));
- return SR_ERR;
+ sr_err("Failed to set flow control: %s", libusb_error_name(ret));
+ return SR_ERR;
}
- if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_MODEMCTRL,
+ if ((ret = libusb_control_transfer(usb->devhdl, 0x40, FTDI_SET_MODEMCTRL,
FTDI_MODEM_ALLHIGH, FTDI_INDEX, NULL, 0, 10)) < 0) {
- sr_err("Failed to set modem control: %s", libusb_error_name(ret));
- return SR_ERR;
+ sr_err("Failed to set modem control: %s", libusb_error_name(ret));
+ return SR_ERR;
}
return SR_OK;
}
-
/* Due to the modular nature of the Testo hardware, you can't assume
* which measurements the device will supply. Fetch a single result
* set synchronously to see which measurements it has. */
@@ -59,10 +59,9 @@ SR_PRIV int testo_probe_channels(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
struct sr_usb_dev_inst *usb;
- struct sr_channel *ch;
int unit, packet_len, len, i;
unsigned char packet[MAX_REPLY_SIZE], buf[MAX_REPLY_SIZE];
- char *probe_name;
+ const char *probe_name;
devc = sdi->priv;
usb = sdi->conn;
@@ -78,12 +77,12 @@ SR_PRIV int testo_probe_channels(struct sr_dev_inst *sdi)
libusb_bulk_transfer(usb->devhdl, EP_IN, buf, MAX_REPLY_SIZE, &len, 10);
} while (len > 2);
- if (libusb_bulk_transfer(usb->devhdl, EP_OUT, devc->model->request,
+ if (libusb_bulk_transfer(usb->devhdl, EP_OUT, (unsigned char *)devc->model->request,
devc->model->request_size, &devc->reply_size, 10) < 0)
return SR_ERR;
packet_len = 0;
- while(TRUE) {
+ while (TRUE) {
if (libusb_bulk_transfer(usb->devhdl, EP_IN, buf, MAX_REPLY_SIZE,
&len, 250) < 0)
return SR_ERR;
@@ -136,8 +135,7 @@ SR_PRIV int testo_probe_channels(struct sr_dev_inst *sdi)
sr_dbg("Unsupported measurement unit %d", unit);
return SR_ERR;
}
- ch = sr_channel_new(i, SR_CHANNEL_ANALOG, TRUE, probe_name);
- sdi->channels = g_slist_append(sdi->channels, ch);
+ sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, probe_name);
}
devc->num_channels = packet[6];
sr_dbg("Found %d channel%s.", devc->num_channels,
@@ -156,12 +154,11 @@ SR_PRIV int testo_request_packet(const struct sr_dev_inst *sdi)
usb = sdi->conn;
libusb_fill_bulk_transfer(devc->out_transfer, usb->devhdl, EP_OUT,
- devc->model->request, devc->model->request_size,
+ (unsigned char *)devc->model->request, devc->model->request_size,
receive_transfer, (void *)sdi, 100);
if ((ret = libusb_submit_transfer(devc->out_transfer) != 0)) {
sr_err("Failed to request packet: %s.", libusb_error_name(ret));
- sdi->driver->dev_acquisition_stop((struct sr_dev_inst *)sdi,
- devc->cb_data);
+ sdi->driver->dev_acquisition_stop((struct sr_dev_inst *)sdi);
return SR_ERR;
}
sr_dbg("Requested new packet.");
@@ -226,6 +223,9 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi)
struct dev_context *devc;
struct sr_datafeed_packet packet;
struct sr_datafeed_analog analog;
+ struct sr_analog_encoding encoding;
+ struct sr_analog_meaning meaning;
+ struct sr_analog_spec spec;
struct sr_channel *ch;
GString *dbg;
float value;
@@ -246,8 +246,10 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi)
packet.type = SR_DF_ANALOG;
packet.payload = &analog;
+ /* TODO: Use proper 'digits' value for this device (and its modes). */
+ sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.num_samples = 1;
- analog.mqflags = 0;
+ analog.meaning->mqflags = 0;
analog.data = &value;
/* Decode 7-byte values */
for (i = 0; i < devc->reply[6]; i++) {
@@ -255,20 +257,20 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi)
value = binary32_le_to_float(buf);
switch (buf[4]) {
case 1:
- analog.mq = SR_MQ_TEMPERATURE;
- analog.unit = SR_UNIT_CELSIUS;
+ analog.meaning->mq = SR_MQ_TEMPERATURE;
+ analog.meaning->unit = SR_UNIT_CELSIUS;
break;
case 3:
- analog.mq = SR_MQ_RELATIVE_HUMIDITY;
- analog.unit = SR_UNIT_HUMIDITY_293K;
+ analog.meaning->mq = SR_MQ_RELATIVE_HUMIDITY;
+ analog.meaning->unit = SR_UNIT_HUMIDITY_293K;
break;
case 5:
- analog.mq = SR_MQ_WIND_SPEED;
- analog.unit = SR_UNIT_METER_SECOND;
+ analog.meaning->mq = SR_MQ_WIND_SPEED;
+ analog.meaning->unit = SR_UNIT_METER_SECOND;
break;
case 24:
- analog.mq = SR_MQ_PRESSURE;
- analog.unit = SR_UNIT_HECTOPASCAL;
+ analog.meaning->mq = SR_MQ_PRESSURE;
+ analog.meaning->unit = SR_UNIT_HECTOPASCAL;
break;
default:
sr_dbg("Unsupported measurement unit %d.", buf[4]);
@@ -286,9 +288,8 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi)
return;
}
ch = g_slist_nth_data(sdi->channels, i);
- analog.channels = g_slist_append(NULL, ch);
+ analog.meaning->channels = g_slist_append(NULL, ch);
sr_session_send(sdi, &packet);
- g_slist_free(analog.channels);
+ g_slist_free(analog.meaning->channels);
}
}
-