+/**
+ * Debug helper.
+ *
+ * @param packet The packet to show debugging information for.
+ */
+static void datafeed_dump(const struct sr_datafeed_packet *packet)
+{
+ const struct sr_datafeed_logic *logic;
+ const struct sr_datafeed_analog *analog;
+
+ switch (packet->type) {
+ case SR_DF_HEADER:
+ sr_dbg("bus: Received SR_DF_HEADER packet.");
+ break;
+ case SR_DF_TRIGGER:
+ sr_dbg("bus: Received SR_DF_TRIGGER packet.");
+ break;
+ case SR_DF_META:
+ sr_dbg("bus: Received SR_DF_META packet.");
+ break;
+ case SR_DF_LOGIC:
+ logic = packet->payload;
+ sr_dbg("bus: Received SR_DF_LOGIC packet (%" PRIu64 " bytes, "
+ "unitsize = %d).", logic->length, logic->unitsize);
+ break;
+ case SR_DF_ANALOG:
+ analog = packet->payload;
+ sr_dbg("bus: Received SR_DF_ANALOG packet (%d samples).",
+ analog->num_samples);
+ break;
+ case SR_DF_END:
+ sr_dbg("bus: Received SR_DF_END packet.");
+ break;
+ case SR_DF_FRAME_BEGIN:
+ sr_dbg("bus: Received SR_DF_FRAME_BEGIN packet.");
+ break;
+ case SR_DF_FRAME_END:
+ sr_dbg("bus: Received SR_DF_FRAME_END packet.");
+ break;
+ default:
+ sr_dbg("bus: Received unknown packet type: %d.", packet->type);
+ break;
+ }
+}
+
+/**
+ * Send a packet to whatever is listening on the datafeed bus.
+ *
+ * Hardware drivers use this to send a data packet to the frontend.
+ *
+ * @param sdi TODO.
+ * @param packet The datafeed packet to send to the session bus.
+ *
+ * @retval SR_OK Success.
+ * @retval SR_ERR_ARG Invalid argument.
+ *
+ * @private
+ */
+SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
+ const struct sr_datafeed_packet *packet)