[CONTACT]

[ABOUT]

[POLICY]

Log gph Files gph Refs gph

Found at: gopher.r-36.net:70/scm/acarsdec/commit/ceb8470d0ef87be8950b8be6dd222a485e6ce7cf.gph

Making acarsdec work again. - acarsdec - an ACARS decoder

Log

Files

Refs

README

---

commit ceb8470d0ef87be8950b8be6dd222a485e6ce7cf

parent 79279b1c9882cd7a42f4dff6e518b085c3607d7b

Author: Christoph Lohmann <20h@r-36.net>

Date:   Sat, 27 Oct 2012 00:46:01 +0200
Making acarsdec work again.
Diffstat:
  acarsdec.h                          |       4 ++--
  getmesg.c                           |      29 +++++++++++++++--------------
  input.c                             |      40 ++++++++++++++++---------------
  main.c                              |      37 +++++++++++++++----------------
4 files changed, 56 insertions(+), 54 deletions(-)
---

diff --git a/acarsdec.h b/acarsdec.h

@@ -18,7 +18,7 @@ extern void resetbits(int ch);
 extern int getbit(short in, unsigned char *outbits, int ch);
 extern void init_mesg(void);
-extern int getmesg(unsigned char r, msg_t * msg, int ch);
+extern int getmesg(unsigned char r, msg_t *msg, int ch);
 extern int init_serv(short port);
 extern int send_mesg(msg_t *msg);
@@ -29,7 +29,7 @@ enum {
         IN_FILE = 0,
         IN_ALSA = 1,
         IN_STDIN = 2,
-
+
         OUT_NET = 0x01,
         OUT_PRINT = 0x02,
         OUT_PROTO = 0x04,

diff --git a/getmesg.c b/getmesg.c

@@ -58,7 +58,7 @@ static void update_crc(unsigned short *crc, unsigned char ch)
         }
 }
-static int build_mesg(char *txt, int len, msg_t * msg)
+static int build_mesg(char *txt, int len, msg_t *msg)
 {
         int i, k;
         char r;
@@ -66,18 +66,8 @@ static int build_mesg(char *txt, int len, msg_t * msg)
         /* remove special chars */
         for (i = 0; i < len; i++) {
                 r = txt[i];
-                switch(r) {
-                case 0x0d:
-                        r = 176;
-                        break;
-                case 0x0a:
-                        r = 178;
-                        break;
-                default:
-                        if (r < ' ')
-                                r = 0xa4;
-                        break;
-                };
+                if (r < ' ' && r != 0x0d && r != 0x0a)
+                        r = ' ';
                 txt[i] = r;
         }
         txt[i] = '\0';
@@ -127,12 +117,23 @@ void init_mesg(void)
         mstat[0].state = mstat[1].state = HEADL;
 }
-int getmesg(unsigned char r, msg_t * msg, int ch)
+void
+print_mstat(struct mstat_s *mstat)
+{
+        if(mstat->state > 0) {
+                fprintf(stderr, "mstat: state = %d; ind = %d; crc = %.4x\n",
+                                mstat->state, mstat->ind, mstat->crc);
+        }
+}
+
+int getmesg(unsigned char r, msg_t *msg, int ch)
 {
         struct mstat_s *st;
         st = &(mstat[ch]);
+        //print_mstat(st);
+
         do {
                 switch (st->state) {
                 case HEADL:

diff --git a/input.c b/input.c

@@ -33,21 +33,21 @@ static int initstdin(void)
 {
         SF_INFO infwav;
-/* open wav input file */
         infwav.format = 0;
         inwav = sf_open_fd(STDIN_FILENO, SFM_READ, &infwav, SF_TRUE);
         if (inwav == NULL) {
                 fprintf(stderr, "could not open stdin\n");
-                return (0);
+                return 0;
         }
         if (infwav.samplerate != 48000) {
                 fprintf(stderr,
                         "Bad Input File sample rate: %d. Must be 48000\n",
                         infwav.samplerate);
-                return (0);
+                return 0;
         }
-        nbch=infwav.channels;
-        return (infwav.channels);
+        nbch = infwav.channels;
+
+        return infwav.channels;
 }
 static SNDFILE *inwav;
@@ -55,21 +55,22 @@ static int initsnd(char *filename)
 {
         SF_INFO infwav;
-/* open wav input file */
+        /* open wav input file */
         infwav.format = 0;
         inwav = sf_open(filename, SFM_READ, &infwav);
         if (inwav == NULL) {
                 fprintf(stderr, "could not open %s\n", filename);
-                return (0);
+                return 0;
         }
         if (infwav.samplerate != 48000) {
                 fprintf(stderr,
                         "Bad Input File sample rate: %d. Must be 48000\n",
                         infwav.samplerate);
-                return (0);
+                return 0;
         }
-        nbch=infwav.channels;
-        return (infwav.channels);
+        nbch = infwav.channels;
+
+        return infwav.channels;
 }
 static snd_pcm_t *capture_handle;
@@ -117,20 +118,21 @@ static int initalsa(char *filename)
                 return 0;
         }
-        if ((err =
-             snd_pcm_hw_params_set_rate(capture_handle, hw_params, 48000,
+        if ((err = snd_pcm_hw_params_set_rate(capture_handle, hw_params, 48000,
                                         0)) < 0) {
                 fprintf(stderr, "cannot set sample rate (%s)\n",
                         snd_strerror(err));
                 return 0;
         }
-        for(nbch=2;nbch>0;nbch--)  {
-                if (snd_pcm_hw_params_set_channels(capture_handle, hw_params, nbch)==0)
+        for(nbch = 2; nbch > 0; nbch--)  {
+                if (snd_pcm_hw_params_set_channels(capture_handle,
+                                        hw_params, nbch) == 0) {
                         break;
+                }
         }
-        if (nbch ==0) {
+        if (nbch == 0) {
                 fprintf(stderr, "cannot set number of channels\n");
                 return 0;
         }
@@ -173,20 +175,20 @@ int getsample(short *sample, int nb)
         switch(source) {
         case IN_STDIN:
-                r = sf_read_short(inwav, sample, nb);
+                r = sf_read_short(inwav, sample, nb / nbch);
                 break;
         case IN_FILE:
-                r = sf_read_short(inwav, sample, nb);
+                r = sf_read_short(inwav, sample, nb / nbch);
                 if (r == 0)
                         r = -1;        /* this is the end */
                 break;
         case IN_ALSA:
-                r = snd_pcm_readi(capture_handle, sample, nb/nbch);
+                r = snd_pcm_readi(capture_handle, sample, nb / nbch);
                 if (r <= 0)
                         fprintf(stderr,
                                 "cannot read from interface (%s)\n",
                                 snd_strerror(r));
-                r=r*nbch;
+                r = r * nbch;
                 break;
         }
         return r;

diff --git a/main.c b/main.c

@@ -56,9 +56,9 @@ static void usage(void)
                         "input alsapcmdevice (ie: hw:0,0)\n");
         fprintf(stderr, " -t :\t\t\tread from stdin.\n");
         fprintf(stderr, " [-v] :\t\t\tbe verbose.\n");
-        fprintf(stderr, " [-c] :\t\t\tcolorfull output.\n");
+        fprintf(stderr, " [-c] :\t\t\tcolorful output.\n");
         fprintf(stderr, " [-p] :\t\t\toutput should be parseable protocol.\n");
-        fprintf(stderr, " [-e] :\t\t\tdo debug?\n");
+        fprintf(stderr, " [-e] :\t\t\tturn on debugging\n");
         fprintf(stderr, " [-LR] :\t\tdisable left or right channel "
                         "decoding of stereo signal\n");
         fprintf(stderr, " [-s noport ] :\t\tact as an APRS local server, "
@@ -70,23 +70,23 @@ static void usage(void)
         exit(1);
 }
-void print_mesg(msg_t * msg, int colored, int messgnumb)
+void print_mesg(msg_t *msg, int colored, int messgnumb)
 {
         time_t t;
         struct tm *tmp;
         char pos[128];
         if (colored) {
-                printf("ACARS mode: %s%c%s", RED,msg->mode,NONE);
+                printf("ACARS mode: %s%c%s", RED, msg->mode, NONE);
                 printf(" Aircraft reg: %s%s%s\n", GREEN,msg->addr,NONE);
-                printf("Message label: %s%s%s", CYAN,msg->label,NONE);
-                printf(" Block id: %s%d%s", RED,(int) msg->bid,NONE);
-                printf(" Msg. no: %s%s%s\n", BLUE,msg->no,NONE);
-                printf("Flight id: %s%s%s\n", MAGENTA,msg->fid,NONE);
-                printf("Message content:-\n%s%s%s", YELLOW,msg->txt,NONE);
+                printf("Message label: %s%s%s", CYAN, msg->label, NONE);
+                printf(" Block id: %s%d%s", RED, (int)msg->bid, NONE);
+                printf(" Msg. no: %s%s%s\n", BLUE, msg->no, NONE);
+                printf("Flight id: %s%s%s\n", MAGENTA, msg->fid, NONE);
+                printf("Message content:-\n%s%s%s", YELLOW, msg->txt, NONE);
                 if (posconv(msg->txt, msg->label, pos)==0) {
                         printf("\n%sAPRS : Addr:%s Fid:%s Lbl:%s pos:%s%s\n",
-                                RED,msg->addr, msg->fid, msg->label, pos,NONE);
+                                RED, msg->addr, msg->fid, msg->label, pos, NONE);
                 }
         } else {
                 printf("ACARS mode: %c", msg->mode);
@@ -114,7 +114,7 @@ void print_mesg(msg_t * msg, int colored, int messgnumb)
         fflush(stdout);
 }
-void print_proto(msg_t * msg)
+void print_proto(msg_t *msg)
 {
         time_t t;
         struct tm *tmp;
@@ -129,7 +129,8 @@ void print_proto(msg_t * msg)
         printf("MSGNO: %s\n", msg->no);
         printf("FLIGHTID: %s\n", msg->fid);
         printf("CONTENT: %s\n.\n", msg->txt);
-            if (posconv(msg->txt, msg->label, pos)==0) {
+
+        if (posconv(msg->txt, msg->label, pos)==0) {
                 printf("APRS-ADDR: %s\n", msg->addr);
                 printf("APRS-FID: %s\n", msg->fid);
                 printf("APRS-LABEL: %s\n", msg->label);
@@ -162,10 +163,10 @@ int main(int argc, char **argv)
         msg_t msg[2];
         int nbit[2] = {0, 0};
         int nrbit[2] = {8, 8};
-        int nbch=0;
+        int nbch = 0;
         int esel[2] = {1, 1};
-        short port=0;
-        int debug=0;
+        short port = 0;
+        int debug = 0;
         int output = 0;
         int i;
         int colored = 0;
@@ -239,8 +240,6 @@ int main(int argc, char **argv)
                 int ind, len;
                 len = getsample(sample, 4096);
-                if (debug)
-                        fprintf(stderr, "Got sample: %d\n", len);
                 if (len <= 0)
                         break;
@@ -248,10 +247,10 @@ int main(int argc, char **argv)
                         for (i = 0; i < nbch; i++, ind++) {
                                 if (esel[i]) {
                                         nbit[i] += getbit(sample[ind], &r[i],
-                                                        0);
+                                                        (i? 1 : 0));
                                         if (nbit[i] >= nrbit[i]) {
                                                 nrbit[i] = getmesg(r[i],
-                                                               &msg[i], 0);
+                                                               &msg[i], (i? 1 : 0));
                                                 nbit[i] = 0;
                                                 if (nrbit[i] == 0) {
                                                         do_output(output,
.


AD: