From 633c00004ca81483bfd16b5a9fcf72f9bb96e48e Mon Sep 17 00:00:00 2001 From: idgay Date: Mon, 16 Jul 2007 15:58:40 +0000 Subject: [PATCH] serialsend app (test blocking writes) --- support/sdk/c/.cvsignore | 1 + support/sdk/c/Makefile.am | 5 ++- support/sdk/c/serialsend.c | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 support/sdk/c/serialsend.c diff --git a/support/sdk/c/.cvsignore b/support/sdk/c/.cvsignore index 85a27283..7d554ba8 100644 --- a/support/sdk/c/.cvsignore +++ b/support/sdk/c/.cvsignore @@ -2,6 +2,7 @@ sf sflisten sfsend seriallisten +serialsend libmote.a config-aux autom4te.cache diff --git a/support/sdk/c/Makefile.am b/support/sdk/c/Makefile.am index 71beaf03..b26b8059 100644 --- a/support/sdk/c/Makefile.am +++ b/support/sdk/c/Makefile.am @@ -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 index 00000000..7735f362 --- /dev/null +++ b/support/sdk/c/serialsend.c @@ -0,0 +1,65 @@ +#include +#include + +#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 - 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); +} -- 2.39.2