]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
serialsend app (test blocking writes)
authoridgay <idgay>
Mon, 16 Jul 2007 15:58:40 +0000 (15:58 +0000)
committeridgay <idgay>
Mon, 16 Jul 2007 15:58:40 +0000 (15:58 +0000)
support/sdk/c/.cvsignore
support/sdk/c/Makefile.am
support/sdk/c/serialsend.c [new file with mode: 0644]

index 85a27283cb594a833619861c5f6d0585cf772d5e..7d554ba8eb5afc8e547ca5ba45d27b89314b6212 100644 (file)
@@ -2,6 +2,7 @@ sf
 sflisten
 sfsend
 seriallisten
+serialsend
 libmote.a
 config-aux
 autom4te.cache
index 71beaf03ab5c7388fd0690d553e987e03427051b..b26b8059285429e77197773bcfe4ed91a328de77 100644 (file)
@@ -6,7 +6,7 @@ SERIAL_H = $(TOS)/lib/serial/Serial.h
 BUILT_SOURCES = serialpacket.h serialprotocol.h
 
 bin_PROGRAMS=sf 
-noinst_PROGRAMS=prettylisten sflisten sfsend seriallisten
+noinst_PROGRAMS=prettylisten sflisten sfsend seriallisten serialsend
 noinst_LIBRARIES=libmote.a
 
 sf_SOURCES = sf.c
@@ -24,6 +24,9 @@ sfsend_LDADD = libmote.a
 seriallisten_SOURCES = seriallisten.c
 seriallisten_LDADD = libmote.a
 
+serialsend_SOURCES = serialsend.c
+serialsend_LDADD = libmote.a
+
 libmote_a_SOURCES = \
        message.c \
        serialpacket.c \
diff --git a/support/sdk/c/serialsend.c b/support/sdk/c/serialsend.c
new file mode 100644 (file)
index 0000000..7735f36
--- /dev/null
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "serialsource.h"
+
+static char *msgs[] = {
+  "unknown_packet_type",
+  "ack_timeout"        ,
+  "sync"       ,
+  "too_long"   ,
+  "too_short"  ,
+  "bad_sync"   ,
+  "bad_crc"    ,
+  "closed"     ,
+  "no_memory"  ,
+  "unix_error"
+};
+
+void stderr_msg(serial_source_msg problem)
+{
+  fprintf(stderr, "Note: %s\n", msgs[problem]);
+}
+
+void send_packet(serial_source src, char **bytes, int count)
+{
+  int i;
+  unsigned char *packet;
+
+  packet = malloc(count);
+  if (!packet)
+    exit(2);
+
+  for (i = 0; i < count; i++)
+    packet[i] = strtol(bytes[i], NULL, 0);
+      
+  fprintf(stderr,"Sending ");
+  for (i = 0; i < count; i++)
+    fprintf(stderr, " %02x", packet[i]);
+  fprintf(stderr, "\n");
+
+  if (write_serial_packet(src, packet, count) == 0)
+    printf("ack\n");
+  else
+    printf("noack\n");
+}
+
+int main(int argc, char **argv)
+{
+  serial_source src;
+
+  if (argc < 3)
+    {
+      fprintf(stderr, "Usage: %s <device> <rate> <bytes> - send a raw packet to a serial port\n", argv[0]);
+      exit(2);
+    }
+  src = open_serial_source(argv[1], platform_baud_rate(argv[2]), 0, stderr_msg);
+  if (!src)
+    {
+      fprintf(stderr, "Couldn't open serial port at %s:%s\n",
+             argv[1], argv[2]);
+      exit(1);
+    }
+
+  send_packet(src, argv + 3, argc - 3);
+}