X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fhung-chang-dso-2100%2Fprotocol.c;h=92d52c35e9a26d11401f330847f6310eb7bacd95;hb=02a4f485de76b401eca7d3b82aac1808a12df4fe;hp=022fac7ec456983e2c15edffd6d2783879af6d0f;hpb=6433156c3275df933e4bf6dcfb020c91fca0ae86;p=libsigrok.git
diff --git a/src/hardware/hung-chang-dso-2100/protocol.c b/src/hardware/hung-chang-dso-2100/protocol.c
index 022fac7e..92d52c35 100644
--- a/src/hardware/hung-chang-dso-2100/protocol.c
+++ b/src/hardware/hung-chang-dso-2100/protocol.c
@@ -17,6 +17,8 @@
* along with this program. If not, see .
*/
+#include
+#include
#include
#include "protocol.h"
@@ -77,11 +79,11 @@
* trigger on (rising or falling)
* The next state is 0x0C
* 0x0C Same as state 0x0F but expects the calibration
- * value for the first channel's position
+ * value for the first channel's position
* (POS1 in the schematics)
* The next state is 0x0D
* 0x0D Same as state 0x0F but expects the calibration
- * value for the second channel's position
+ * value for the second channel's position
* (POS2 in the schematics)
* The next state is 0x0E
* 0x0E Same as state 0x0F but expects the trigger level
@@ -330,14 +332,10 @@ static void push_samples(const struct sr_dev_inst *sdi, uint8_t *buf, size_t num
{
struct dev_context *devc = sdi->priv;
float *data = devc->samples;
- struct sr_datafeed_analog analog = {
- .channels = devc->enabled_channel,
- .num_samples = num,
- .mq = SR_MQ_VOLTAGE,
- .unit = SR_UNIT_VOLT,
- .mqflags = 0,
- .data = data,
- };
+ struct sr_datafeed_analog analog;
+ struct sr_analog_encoding encoding;
+ struct sr_analog_meaning meaning;
+ struct sr_analog_spec spec;
struct sr_datafeed_packet packet = {
.type = SR_DF_ANALOG,
.payload = &analog,
@@ -347,7 +345,18 @@ static void push_samples(const struct sr_dev_inst *sdi, uint8_t *buf, size_t num
while (num--)
data[num] = (buf[num] - 0x80) * factor;
- sr_session_send(devc->cb_data, &packet);
+ float vdivlog = log10f(factor);
+ int digits = -(int)vdivlog + (vdivlog < 0.0);
+
+ sr_analog_init(&analog, &encoding, &meaning, &spec, digits);
+ analog.meaning->channels = devc->enabled_channel;
+ analog.meaning->mq = SR_MQ_VOLTAGE;
+ analog.meaning->unit = SR_UNIT_VOLT;
+ analog.meaning->mqflags = 0;
+ analog.num_samples = num;
+ analog.data = data;
+
+ sr_session_send(sdi, &packet);
}
static int read_subframe(const struct sr_dev_inst *sdi, uint8_t *buf)
@@ -387,12 +396,8 @@ static int read_subframe(const struct sr_dev_inst *sdi, uint8_t *buf)
if (interleave)
num *= 2;
if (!devc->step) {
- struct sr_datafeed_packet packet = {
- .type = SR_DF_TRIGGER
- };
-
push_samples(sdi, buf, 6);
- sr_session_send(devc->cb_data, &packet);
+ std_session_send_df_trigger(sdi);
buf += 6;
num -= 6;
}
@@ -410,8 +415,7 @@ static int read_subframe(const struct sr_dev_inst *sdi, uint8_t *buf)
SR_PRIV int hung_chang_dso_2100_poll(int fd, int revents, void *cb_data)
{
- struct sr_datafeed_packet packet = { .type = SR_DF_FRAME_BEGIN };
- const struct sr_dev_inst *sdi;
+ struct sr_dev_inst *sdi;
struct dev_context *devc;
uint8_t state, buf[1000];
@@ -438,7 +442,7 @@ SR_PRIV int hung_chang_dso_2100_poll(int fd, int revents, void *cb_data)
return FALSE;
}
- sr_session_send(devc->cb_data, &packet);
+ std_session_send_df_frame_begin(sdi);
if (devc->channel) {
while (read_subframe(sdi, buf)) {
@@ -451,11 +455,10 @@ SR_PRIV int hung_chang_dso_2100_poll(int fd, int revents, void *cb_data)
}
}
- packet.type = SR_DF_FRAME_END;
- sr_session_send(devc->cb_data, &packet);
+ std_session_send_df_frame_end(sdi);
if (++devc->frame >= devc->frame_limit)
- hung_chang_dso_2100_dev_acquisition_stop(sdi, devc->cb_data);
+ sr_dev_acquisition_stop(sdi);
else
hung_chang_dso_2100_move_to(sdi, 0x21);