AX25:add new print function compatible with TNC-2 format.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 16 Apr 2010 22:48:41 +0000 (22:48 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 16 Apr 2010 22:48:41 +0000 (22:48 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3444 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/net/afsk_test.c
bertos/net/ax25.c
bertos/net/ax25.h
bertos/net/ax25_test.c
test/run_tests.sh

index 9aa5083056187f2a336f1c8d857f7aa4f7b6d4a1..cd434084f83da2caf36817761260dece8e0b5a9e 100644 (file)
@@ -51,6 +51,7 @@
 
 #include <cfg/test.h>
 #include <cfg/debug.h>
+#include <cfg/kfile_debug.h>
 
 #include <cpu/byteorder.h>
 
@@ -63,11 +64,13 @@ uint32_t data_size;
 uint32_t data_written;
 Afsk afsk_fd;
 AX25Ctx ax25;
+KFileDebug dbg;
 
 int msg_cnt;
-static void message_hook(UNUSED_ARG(struct AX25Msg *, msg))
+static void message_hook(struct AX25Msg *msg)
 {
        msg_cnt++;
+       ax25_print(&dbg.fd, msg);
 }
 
 static FILE *afsk_fileOpen(const char *name)
@@ -126,6 +129,7 @@ static FILE *afsk_fileOpen(const char *name)
 int afsk_testSetup(void)
 {
        kdbg_init();
+       kfiledebug_init(&dbg);
        fp_adc = afsk_fileOpen("test/afsk_test.au");
        #if CPU_AVR
                #warning TODO: open the file?
index 68a6ae56d777066356d1ce66bff0473d1a99f862..a4059505b9878c195a3367329dff87ebf3d5900b 100644 (file)
@@ -54,7 +54,8 @@
 #define DECODE_CALL(buf, addr) \
        for (unsigned i = 0; i < sizeof((addr)); i++) \
        { \
-               (addr)[i] = *(buf)++ >> 1; \
+               char c = (*(buf)++ >> 1); \
+               (addr)[i] = (c == ' ') ? '\x0' : c; \
        }
 
 static void ax25_decode(AX25Ctx *ctx)
@@ -258,6 +259,36 @@ void ax25_sendVia(AX25Ctx *ctx, const AX25Call *path, size_t path_len, const voi
        kfile_putc(HDLC_FLAG, ctx->ch);
 }
 
+static void print_call(KFile *ch, const AX25Call *call)
+{
+       kfile_printf(ch, "%.6s", call->call);
+       if (call->ssid)
+               kfile_printf(ch, "-%d", call->ssid);
+}
+       
+/**
+ * Print a AX25 message in TNC-2 packet monitor format.
+ * \param ch a kfile channel where the message will be printed.
+ * \param msg the message to be printed.
+ */
+void ax25_print(KFile *ch, const AX25Msg *msg)
+{
+       print_call(ch, &msg->src);
+       kfile_putc('>', ch);
+       print_call(ch, &msg->dst);      
+       
+       #if CONFIG_AX25_RPT_LST
+       for (int i = 0; i < msg->rpt_cnt; i++)
+       {
+               kfile_putc(',', ch);
+               print_call(ch, &msg->rpt_lst[i]);
+               // TODO: add * to the trasmitting digi
+       }
+       #endif
+
+       kfile_printf(ch, ":%.*s\n", msg->len, msg->info);
+}
+
 
 /**
  * Init the AX25 protocol decoder.
index ad11e4665671fb10edc6edb2eb8128080aa2303f..0e609136f18e5d56f20b066f39b6ea23eacaa731 100644 (file)
@@ -179,6 +179,8 @@ void ax25_sendVia(AX25Ctx *ctx, const AX25Call *path, size_t path_len, const voi
 #define ax25_send(ctx, dst, src, buf, len) ax25_sendVia(ctx, ({static AX25Call __path[]={dst, src}; __path;}), 2, buf, len)
 void ax25_init(AX25Ctx *ctx, KFile *channel, ax25_callback_t hook);
 
+void ax25_print(KFile *ch, const AX25Msg *msg);
+
 int ax25_testSetup(void);
 int ax25_testTearDown(void);
 int ax25_testRun(void);
index 2016eadbfa18dea4eb85fc7858de20c45574a44a..fc3736ccfbce757bb00b676406ef35a08c030e22 100644 (file)
 #include <struct/kfile_mem.h>
 
 #include <cfg/debug.h>
+#include <cfg/kfile_debug.h>
 #include <cfg/test.h>
 
 #include <string.h> //strncmp
 
 static AX25Ctx ax25;
 static KFileMem mem;
+static KFileDebug dbg;
 
 #define APRS_MSG \
        0x3D, 0x34, 0x36, 0x30, 0x33, 0x2E, 0x36, 0x33, \
@@ -73,8 +75,9 @@ uint8_t aprs_packet_check[256];
 
 static void msg_callback(AX25Msg *msg)
 {
-       ASSERT(strncmp(msg->dst.call, "APRS  ", 6) == 0);
-       ASSERT(strncmp(msg->src.call, "S57LN ", 6) == 0);
+       ax25_print(&dbg.fd, msg);
+       ASSERT(strncmp(msg->dst.call, "APRS\x0\x0", 6) == 0);
+       ASSERT(strncmp(msg->src.call, "S57LN\x0", 6) == 0);
        ASSERT(msg->src.ssid == 0);
        ASSERT(msg->dst.ssid == 0);
        ASSERT(msg->ctrl == AX25_CTRL_UI);
@@ -86,6 +89,7 @@ static void msg_callback(AX25Msg *msg)
 int ax25_testSetup(void)
 {
        kdbg_init();
+       kfiledebug_init(&dbg);
        kfilemem_init(&mem, aprs_packet, sizeof(aprs_packet));
        kfilemem_init(&mem1, aprs_packet_check, sizeof(aprs_packet_check));
        ax25_init(&ax25, &mem.fd, msg_callback);
index 7150a5cb19fac7bbacaba4275c0193ed79858b22..71a25d31bd34123e740dbc27accfa47248cc0023 100755 (executable)
@@ -61,6 +61,7 @@ SRC_LIST="
        bertos/net/afsk.c
        bertos/net/nmeap/src/nmeap01.c
        bertos/net/nmea.c
+       bertos/cfg/kfile_debug.c
 "
 
 buildout='/dev/null'