avoid copy by using iovecs
[protos/xbee-avr.git] / xbee_user.h
index ced5363..daedeee 100644 (file)
@@ -29,6 +29,7 @@
 #define _XBEE_USER_H_
 
 #include <callout.h>
+#include <xbee_rxtx.h>
 
 /* used for timeouts and xbee rx callback */
 struct xbee_ctx {
@@ -46,14 +47,28 @@ extern int xbee_raw;
 extern int xbee_hexdump;
 extern int xbee_debug;
 
+/* we use a specific structure to send packets. It allows to prepend some
+ * data in the frame without doing a copy. */
+struct xbeeapp_pkt {
+       char *buf;
+       unsigned len;
+       unsigned headroom;
+       unsigned tailroom;
+};
+
+/* callback registered to xbee module, called when a xbee frame is received */
 int8_t xbeeapp_rx(struct xbee_dev *dev, int channel, int type,
-                 void *frame, unsigned len, void *opaque);
-int xbeeapp_send_atcmd(const char *atcmd_str,
-                      void *param, unsigned param_len, int foreground,
-                      int (*func)(void *frame, unsigned len, void *arg),
-                      void *arg);
-int xbeeapp_send_msg(uint64_t addr, void *data,
-                    unsigned data_len, int foreground);
+       void *frame, unsigned len, void *opaque);
+
+/* Send an AT command to the xbee device. The callback function for the answer
+ * is given as a parameter */
+int xbeeapp_send_atcmd(char *atcmd_str, void *param,
+       unsigned param_len, int foreground,
+       int (*func)(void *frame, unsigned len, void *arg),
+       void *arg);
+
+/* send a message to a peer */
+int xbeeapp_send_msg(uint64_t addr, struct xbee_msg *msg, int foreground);
 
 void xbee_stdin_enable(void);
 void xbee_stdin_disable(void);