]> Pileus Git - grits/commitdiff
Finally getting stuff to work again, NEXRAD Level II data needs to be
authorAndy Spencer <andy753421@gmail.com>
Sun, 3 May 2009 11:04:16 +0000 (11:04 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 3 May 2009 11:04:16 +0000 (11:04 +0000)
decompressed first using the opt/dec program.

Makefile.am
opt/dec.c [new file with mode: 0644]
opt/mkfile [new file with mode: 0644]
src/.vimrc [new file with mode: 0644]
src/Makefile.am
src/aweather.c
src/opengl.c
src/radar.c

index 4e92a6d7a120af39c4baaee887e0b1a0ca23c20d..bc1d29c44a1c29d5c6cd70c4087dcd3cafc48a86 100644 (file)
@@ -1,6 +1,7 @@
 SUBDIRS = src
 
 test: all
+       LD_LIBRARY_PATH=/usr/local/trmm/GVBOX/lib/ \
        ./src/aweather
 
 maintainer-clean-local:
diff --git a/opt/dec.c b/opt/dec.c
new file mode 100644 (file)
index 0000000..6126249
--- /dev/null
+++ b/opt/dec.c
@@ -0,0 +1,95 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <err.h>
+#include <arpa/inet.h>
+#include <bzlib.h>
+
+#define debug(...) fprintf(stderr, __VA_ARGS__);
+
+char *bunzip2(char *input, int input_len, int *output_len)
+{
+       bz_stream *stream = calloc(1, sizeof(bz_stream));
+
+       switch (BZ2_bzDecompressInit(stream, 0, 0)) {
+       case BZ_CONFIG_ERROR: err(1, "the library has been mis-compiled");
+       case BZ_PARAM_ERROR:  err(1, "Parameter error");
+       case BZ_MEM_ERROR:    err(1, "insufficient memory is available");
+       //case BZ_OK:           debug("success\n"); break;
+       //default:              debug("unknown\n"); break;
+       }
+
+       int   status;
+       int   output_size = 512;
+       char *output      = NULL;
+
+       do {
+               stream->next_in   = input       + stream->total_in_lo32;
+               stream->avail_in  = input_len   - stream->total_in_lo32;
+               output_size *= 2;
+               output       = realloc(output, output_size);
+               //debug("alloc %d\n", output_size);
+               stream->next_out  = output      + stream->total_out_lo32;
+               stream->avail_out = output_size - stream->total_out_lo32;
+               //debug("decompressing..\n"
+               //      "  next_in   = %p\n"
+               //      "  avail_in  = %u\n"
+               //      "  next_out  = %p\n"
+               //      "  avail_out = %u\n",
+               //      stream->next_in,
+               //      stream->avail_in,
+               //      stream->next_out,
+               //      stream->avail_out);
+       } while ((status = BZ2_bzDecompress(stream)) == BZ_OK && output_size < 1024*1024);
+
+       // debug("done with status %d = %d\n", status, BZ_STREAM_END);
+
+       *output_len = stream->total_out_lo32;
+       BZ2_bzDecompressEnd(stream);
+       return output;
+}
+
+int main(int argc, char **argv)
+{
+       if (argc != 3) {
+               printf("usage: ./dec <input> <output>\n");
+               return 0;
+       }
+
+       FILE *input  = fopen(argv[1], "r");
+       FILE *output = fopen(argv[2], "w+");
+       if (!input)  err(1, "error opening input");
+       if (!output) err(1, "error opening output");
+
+       int st;
+       int size = 0;
+       char *buf = malloc(24);
+
+       /* Clear header */
+       //debug("reading header\n");
+       fread (buf, 1, 24, input);
+       fwrite(buf, 1, 24, output);
+
+       //debug("reading body\n");
+       while ((st = fread(&size, 1, 4, input))) {
+               //debug("read %u bytes\n", st);
+               //fwrite(&size, 1, 4, output); // DEBUG
+               size = abs(ntohl(size));
+               if (size < 0)
+                       return 0;
+               //debug("size = %x\n", size);
+               if (size > 10*1024*1024)
+                       err(1, "sanity check failed, buf is to big: %d", size);
+               buf = realloc(buf, size);
+               fread (buf, 1, size, input);
+               //fwrite(buf, 1, size, output); // DEBUG
+
+               int dec_len;
+               char *dec = bunzip2(buf, size, &dec_len);
+               // debug("decompressed %u bytes\n", dec_len);
+               fwrite(dec, 1, dec_len, output);
+               free(dec);
+       }
+
+       return 0;
+}
diff --git a/opt/mkfile b/opt/mkfile
new file mode 100644 (file)
index 0000000..d3410f8
--- /dev/null
@@ -0,0 +1,8 @@
+PROGS=level2 dec
+level2_cflags=`{pkg-config --cflags glib-2.0}
+level2_libs=`{pkg-config --libs glib-2.0} -lbz2
+dec_libs=`{pkg-config --libs glib-2.0} -lbz2
+default: dec
+       ./dec ../data/KNQA_20090501_1925 KNQA_20090501_1925.raw
+       cmp ../data/KNQA_20090501_1925 KNQA_20090501_1925.raw
+<$HOME/lib/mkcommon
diff --git a/src/.vimrc b/src/.vimrc
new file mode 100644 (file)
index 0000000..1e1d189
--- /dev/null
@@ -0,0 +1 @@
+set makeprg=make\ test
index c6b60557c5fcadae6a2f8e139d0dfd4c05c8e858..4bbe43a7c5da267488caf33d32aa781700481fdb 100644 (file)
@@ -1,7 +1,11 @@
-AM_CPPFLAGS  = $(GTK_CFLAGS)
+AM_CPPFLAGS  = $(GTK_CFLAGS) -I/usr/local/trmm/GVBOX/include/
 AM_CFLAGS    = -Wall -Werror --std=gnu99
 
 bin_PROGRAMS = aweather
 
 aweather_SOURCES  = aweather.c opengl.c cube.c radar.c 
-aweather_LDADD    = $(GTK_LIBS) -lrsl
+aweather_LDADD    = $(GTK_LIBS) -L/usr/local/trmm/GVBOX/lib/ -lrsl
+
+test: all
+       LD_LIBRARY_PATH=/usr/local/trmm/GVBOX/lib/ \
+       ./aweather
index e2000fb426c08a199e9d0621397589f0ed84e88a..35eede0f9805ff1b1260c51b186ebc78d8961e68 100644 (file)
@@ -72,7 +72,7 @@ int main(int argc, char *argv[])
 
        /* Load plugins */
        opengl_init(GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area));
-       //radar_init (GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area));
+       radar_init (GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area));
        cube_init  (GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area));
 
        gtk_widget_show_all(window);
index 8ab075a00645cefb07d935ee0fa3fb48e14380c7..f348d71a0d05e5d9f3f6077421c49c561ad36f85 100644 (file)
@@ -14,7 +14,7 @@ static gboolean expose_start(GtkWidget *da, GdkEventExpose *event, gpointer user
 
        /* draw in here */
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-       return TRUE;
+       return FALSE;
 }
 /* Plugins run stuff here */
 static gboolean expose_end(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
index 78b9b4e763976b31d15e687494aa45c29a6dc8f0..2fdf7d385c6df2825db3422e8266681fd381bd70 100644 (file)
@@ -44,17 +44,17 @@ static void bscan_sweep(Sweep *sweep, guint8 **data, int *width, int *height)
        *data   = buf;
 
        /* debug */
-       static int fi = 0;
-       char fname[128];
-       sprintf(fname, "image-%d.ppm", fi);
-       FILE *fp = fopen(fname, "w+");
-       fprintf(fp, "P6\n");
-       fprintf(fp, "# Foo\n");
-       fprintf(fp, "%d %d\n", *width, *height);
-       fprintf(fp, "255\n");
-       fwrite(buf, 3, *width * *height, fp);
-       fclose(fp);
-       fi++;
+       //static int fi = 0;
+       //char fname[128];
+       //sprintf(fname, "image-%d.ppm", fi);
+       //FILE *fp = fopen(fname, "w+");
+       //fprintf(fp, "P6\n");
+       //fprintf(fp, "# Foo\n");
+       //fprintf(fp, "%d %d\n", *width, *height);
+       //fprintf(fp, "255\n");
+       //fwrite(buf, 3, *width * *height, fp);
+       //fclose(fp);
+       //fi++;
 }
 
 /* Load a sweep as the active texture */
@@ -126,7 +126,7 @@ static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
                glTexCoord2d(0.0, ((double)ri)/sweep->h.nrays); glVertex3f(lx*near_dist, ly*near_dist, 0.); // near left
                glTexCoord2d(0.7, ((double)ri)/sweep->h.nrays); glVertex3f(lx*far_dist,  ly*far_dist,  0.); // far  left
        }
-       g_print("ri=%d, nr=%d, bw=%f\n", _ri, sweep->h.nrays, sweep->h.beam_width);
+       //g_print("ri=%d, nr=%d, bw=%f\n", _ri, sweep->h.nrays, sweep->h.beam_width);
        glEnd();
        /* Texture debug */
        //glBegin(GL_QUADS);
@@ -164,7 +164,7 @@ gboolean radar_init(GtkDrawingArea *_drawing, GtkNotebook *config)
        /* Parse hard coded file.. */
        RSL_read_these_sweeps("all", NULL);
        //RSL_read_these_sweeps("all", NULL);
-       Radar *radar = RSL_wsr88d_to_radar("/scratch/aweather/data/KNQA_20090501_1925", "KNQA");
+       Radar *radar = RSL_wsr88d_to_radar("/scratch/aweather/data/KNQA_20090501_1925.raw", "KNQA");
        RSL_load_refl_color_table();
        RSL_get_color_table(RSL_RED_TABLE,   red,   &nred);
        RSL_get_color_table(RSL_GREEN_TABLE, green, &ngreen);