]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - support/sdk/c/sf/serialsource.h
moving from sdk/c
[tinyos-2.x.git] / support / sdk / c / sf / serialsource.h
diff --git a/support/sdk/c/sf/serialsource.h b/support/sdk/c/sf/serialsource.h
new file mode 100644 (file)
index 0000000..28ba5bd
--- /dev/null
@@ -0,0 +1,81 @@
+#ifndef SERIALSOURCE_H
+#define SERIALSOURCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct serial_source *serial_source;
+
+typedef enum {
+  msg_unknown_packet_type,     /* packet of unknown type received */
+  msg_ack_timeout,             /* ack not received within timeout */
+  msg_sync,                    /* sync achieved */
+  msg_too_long,                        /* greater than MTU (256 bytes) */
+  msg_too_short,               /* less than 4 bytes */
+  msg_bad_sync,                        /* unexpected sync byte received */
+  msg_bad_crc,                 /* received packet has bad crc */
+  msg_closed,                  /* serial port closed itself */
+  msg_no_memory,               /* malloc failed */
+  msg_unix_error               /* check errno for details */
+} serial_source_msg;
+
+serial_source open_serial_source(const char *device, int baud_rate,
+                                int non_blocking,
+                                void (*message)(serial_source_msg problem));
+/* Effects: opens serial port device at specified baud_rate. If non_blocking
+     is true, read_serial_packet calls will be non-blocking (writes are
+     always blocking, for now at least)
+     If non-null, message will be called to signal various problems during
+     execution.
+   Returns: descriptor for serial forwarder at host:port, or
+     NULL for failure
+ */
+
+int serial_source_fd(serial_source src);
+/* Returns: the file descriptor used by serial source src (useful when
+     non-blocking reads were requested)
+*/
+
+int serial_source_empty(serial_source src);
+/* Returns: true if serial source does not contain any pending data, i.e.,
+     if the result is true and there is no data available on the source's
+     file descriptor, then read_serial_packet will:
+       - return NULL if the source is non-blocking
+       - block if it is blocking
+
+    (Note: the presence of this calls allows the serial_source to do some
+    internal buffering)
+*/
+
+int close_serial_source(serial_source src);
+/* Effects: closes serial source src
+   Returns: 0 if successful, -1 if some problem occured (but source is
+     considered closed anyway)
+ */
+
+void *read_serial_packet(serial_source src, int *len);
+/* Effects: Read the serial source src. If a packet is available, return it.
+     If in blocking mode and no packet is available, wait for one.
+   Returns: the packet read (in newly allocated memory), with *len is
+     set to the packet length, or NULL if no packet is yet available and
+     the serial source is in non-blocking mode
+*/
+
+int write_serial_packet(serial_source src, const void *packet, int len);
+/* Effects: writes len byte packet to serial source src
+   Returns: 0 if packet successfully written, 1 if successfully written
+     but not acknowledged, -1 otherwise
+*/
+
+int platform_baud_rate(char *platform_name);
+/* Returns: The baud rate of the specified platform, or -1 for unknown
+     platforms. If platform_name starts with a digit, just return 
+     atoi(platform_name).
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif