aboutsummaryrefslogtreecommitdiff
path: root/src/modules/systemlib/hx_stream.h
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-06-25 23:08:34 -0700
committerpx4dev <px4@purgatory.org>2013-06-25 23:08:34 -0700
commit90c458cb618754905ab6d373f22d76e3309adf4c (patch)
tree7d89fa4817e61968c8fbf8bcbf133d8f821197f1 /src/modules/systemlib/hx_stream.h
parent758ebf6c04206d78f817d91ef714ddf78cd8dc43 (diff)
downloadpx4-firmware-90c458cb618754905ab6d373f22d76e3309adf4c.tar.gz
px4-firmware-90c458cb618754905ab6d373f22d76e3309adf4c.tar.bz2
px4-firmware-90c458cb618754905ab6d373f22d76e3309adf4c.zip
Checkpoint: interface abstraction for px4io driver
Diffstat (limited to 'src/modules/systemlib/hx_stream.h')
-rw-r--r--src/modules/systemlib/hx_stream.h60
1 files changed, 42 insertions, 18 deletions
diff --git a/src/modules/systemlib/hx_stream.h b/src/modules/systemlib/hx_stream.h
index be4850f74..1f3927222 100644
--- a/src/modules/systemlib/hx_stream.h
+++ b/src/modules/systemlib/hx_stream.h
@@ -58,7 +58,8 @@ __BEGIN_DECLS
* Allocate a new hx_stream object.
*
* @param fd The file handle over which the protocol will
- * communicate.
+ * communicate, or -1 if the protocol will use
+ * hx_stream_start/hx_stream_send_next.
* @param callback Called when a frame is received.
* @param callback_arg Passed to the callback.
* @return A handle to the stream, or NULL if memory could
@@ -80,6 +81,7 @@ __EXPORT extern void hx_stream_free(hx_stream_t stream);
*
* Any counter may be set to NULL to disable counting that datum.
*
+ * @param stream A handle returned from hx_stream_init.
* @param tx_frames Counter for transmitted frames.
* @param rx_frames Counter for received frames.
* @param rx_errors Counter for short and corrupt received frames.
@@ -90,6 +92,44 @@ __EXPORT extern void hx_stream_set_counters(hx_stream_t stream,
perf_counter_t rx_errors);
/**
+ * Reset a stream.
+ *
+ * Forces the local stream state to idle.
+ *
+ * @param stream A handle returned from hx_stream_init.
+ */
+__EXPORT extern void hx_stream_reset(hx_stream_t stream);
+
+/**
+ * Prepare to send a frame.
+ *
+ * Use this in conjunction with hx_stream_send_next to
+ * set the frame to be transmitted.
+ *
+ * Use hx_stream_send() to write to the stream fd directly.
+ *
+ * @param stream A handle returned from hx_stream_init.
+ * @param data Pointer to the data to send.
+ * @param count The number of bytes to send.
+ * @return Zero on success, -errno on error.
+ */
+__EXPORT extern int hx_stream_start(hx_stream_t stream,
+ const void *data,
+ size_t count);
+
+/**
+ * Get the next byte to send for a stream.
+ *
+ * This requires that the stream be prepared for sending by
+ * calling hx_stream_start first.
+ *
+ * @param stream A handle returned from hx_stream_init.
+ * @return The byte to send, or -1 if there is
+ * nothing left to send.
+ */
+__EXPORT extern int hx_stream_send_next(hx_stream_t stream);
+
+/**
* Send a frame.
*
* This function will block until all frame bytes are sent if
@@ -114,25 +154,9 @@ __EXPORT extern int hx_stream_send(hx_stream_t stream,
* @param stream A handle returned from hx_stream_init.
* @param c The character to process.
*/
-__EXPORT extern void hx_stream_rx_char(hx_stream_t stream,
+__EXPORT extern void hx_stream_rx(hx_stream_t stream,
uint8_t c);
-/**
- * Handle received bytes from the stream.
- *
- * Note that this interface should only be used with blocking streams
- * when it is OK for the call to block until a frame is received.
- *
- * When used with a non-blocking stream, it will typically return
- * immediately, or after handling a received frame.
- *
- * @param stream A handle returned from hx_stream_init.
- * @return -errno on error, nonzero if a frame
- * has been received, or if not enough
- * bytes are available to complete a frame.
- */
-__EXPORT extern int hx_stream_rx(hx_stream_t stream);
-
__END_DECLS
#endif