OSDN Git Service

Ver1.1 scilog Ver1.0.4に対応 記録CH数指定 master
authorNaoya Takamura <ntaka206@users.sourceforge.jp>
Thu, 19 Jan 2017 03:43:33 +0000 (12:43 +0900)
committerNaoya Takamura <ntaka206@users.sourceforge.jp>
Thu, 19 Jan 2017 03:43:33 +0000 (12:43 +0900)
記録するCH数を変更できるようになったので対応
ヘッダにはCH数を保存していないので、CH数をコマンドラインで指定する必要がある
指定しなかった場合はDefault 6CH

Usage: decode_sci -c CH_NUM inputfile
 CH_NUM ファイルに記録されているCH数を指定する 無指定時のDefaultは6

decode_sci.c

index a5c802d..d260b7c 100644 (file)
@@ -1,10 +1,19 @@
 /*
-       decode_sci.c
+       decode_sci.cgit s
        sciLogger high sample data decoder
 
        入力ファイル Little Endian
        このプログラムが動作するマシンもLittle Endianである必要あり。
 
+*** Ver1.1
+* scilog Ver1.0.4に対応
+* 記録するCH数を変更できるようになったので対応
+* ヘッダにはCH数を保存していないので、CH数をコマンドラインで指定する必要がある
+* 指定しなかった場合はDefault 6CH
+*
+* Usage: decode_sci -c CH_NUM inputfile
+*  CH_NUM ファイルに記録されているCH数を指定する 無指定時のDefaultは6
+* 
   Copyright Naoya Takamura@NT systemd design, 2011
  
   This program is free software; you can redistribute it and/or modify
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
+#include <getopt.h>
 
-#define        VER     "1.0"
+#define        VER     "1.1"
 #define        AD_CH   6
 #define        AD_SAMPLE       50
 #define        AD_BYTES        3
+#define EXE_NAME "decode_sci"
 
 struct _recdata_head_t {
     uint16_t   year;   // UTC
@@ -70,7 +81,7 @@ static int32_t b3_to_long32(unsigned char *ptr)
 /*
        data decode
 */
-static void read_high(FILE *fp)
+static void read_high(FILE *fp, int chn)
 {
        recdata_head    d;
        int     ch, j;
@@ -84,12 +95,12 @@ static void read_high(FILE *fp)
                        fprintf(stderr, "read_high() Error freq=%d\n", d.freq);
                        break;
                }
-               int data_size = AD_CH * d.freq * AD_BYTES;
+               int data_size = chn * d.freq * AD_BYTES;
                // AD data
                if (fread(data, 1, data_size, fp) < 1) break;
                for(j = 0; j < d.freq; j++) {
                        fprintf(stdout, "%02d:%02d:%02d.%03d", d.hour, d.min, d.sec, (1000*j/d.freq));
-                       for(ch = 0; ch < AD_CH; ch++) {
+                       for(ch = 0; ch < chn; ch++) {
                                fprintf(stdout, ",%+07d", b3_to_long32((char*)(data + ch*d.freq*AD_BYTES + j*AD_BYTES)));
                        }
                        fprintf(stdout, "\n");
@@ -104,24 +115,36 @@ int main(int argc, char *argv[])
        char    fname_out[128];
        char    sz[32];
        unsigned char   buf[256];
-
-//printf("len=%d\n", REC_DATALEN_HEAD);
-// exit(0);
-
+       int result;
+       int chn = AD_CH;
+       
        if (argc == 1) {
                printf("sciLogger high sample data converter Ver"VER"\n");
                printf("Please set filename.\n");
+               printf("Usage: \n");
+               printf(EXE_NAME " -c CH_NUM inputfile\n");
                exit(0);
        }
-       
-       fpin = fopen(argv[1], "rb");
+       while((result = getopt(argc, argv, "c:")) != -1) {
+               switch(result) {
+                       case 'c':
+                               chn = atoi(optarg);
+                               if (chn <= 0 || chn > AD_CH) {
+                                       fprintf(stderr, "Invalid CH num %d.\n", chn);
+                                       goto errout2;
+                               }
+                               break;
+               }
+       }
+       //
+       fpin = fopen(argv[optind], "rb");
 
        if (fpin == NULL) {
                fprintf(stderr, "Input file open error.\n");
                goto errout2;
        }
        // 出力ファイル名
-       strcpy(fname_out, argv[1]);
+       strcpy(fname_out, argv[optind]);
        strcat(fname_out, ".txt");
 
        fpout = freopen(fname_out, "w", stdout);
@@ -129,7 +152,7 @@ int main(int argc, char *argv[])
                fprintf(stderr, "Output file open ERROR. %s\n", fname_out);
                goto errout1;
        }
-       read_high(fpin);
+       read_high(fpin, chn);
 
        fclose(fpout);
        fclose(fpin);