+SR_PRIV void mso_send_data_proc(struct sr_dev_inst *sdi,
+ uint8_t *data, size_t length, size_t sample_width)
+{
+ size_t i;
+ struct dev_context *devc;
+ struct sr_datafeed_analog analog;
+ struct sr_analog_encoding encoding;
+ struct sr_analog_meaning meaning;
+ struct sr_analog_spec spec;
+
+ (void)sample_width;
+
+ devc = sdi->priv;
+
+ length /= 2;
+
+ /* Send the logic */
+ for (i = 0; i < length; i++) {
+ devc->logic_buffer[i] = data[i * 2];
+ /* Rescale to -10V - +10V from 0-255. */
+ devc->analog_buffer[i] = (data[i * 2 + 1] - 128.0f) / 12.8f;
+ };
+
+ const struct sr_datafeed_logic logic = {
+ .length = length,
+ .unitsize = 1,
+ .data = devc->logic_buffer
+ };
+
+ const struct sr_datafeed_packet logic_packet = {
+ .type = SR_DF_LOGIC,
+ .payload = &logic
+ };
+
+ sr_session_send(sdi, &logic_packet);
+
+ sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
+ analog.meaning->channels = devc->enabled_analog_channels;
+ analog.meaning->mq = SR_MQ_VOLTAGE;
+ analog.meaning->unit = SR_UNIT_VOLT;
+ analog.meaning->mqflags = 0 /* SR_MQFLAG_DC */;
+ analog.num_samples = length;
+ analog.data = devc->analog_buffer;
+
+ const struct sr_datafeed_packet analog_packet = {
+ .type = SR_DF_ANALOG,
+ .payload = &analog
+ };
+
+ sr_session_send(sdi, &analog_packet);
+}
+
+SR_PRIV void la_send_data_proc(struct sr_dev_inst *sdi,
+ uint8_t *data, size_t length, size_t sample_width)
+{
+ const struct sr_datafeed_logic logic = {
+ .length = length,
+ .unitsize = sample_width,
+ .data = data
+ };
+
+ const struct sr_datafeed_packet packet = {
+ .type = SR_DF_LOGIC,
+ .payload = &logic
+ };
+
+ sr_session_send(sdi, &packet);
+}
+