scilogプログラムが記録した高速サンプルデータファイル(バイナリ)をcsvテキストに変換するプログラム。
| Revision | 2fe0a401d6046562a58333e211de25b6840e527d (tree) |
|---|---|
| Time | 2017-01-19 12:43:33 |
| Author | Naoya Takamura <ntaka206@user...> |
| Commiter | Naoya Takamura |
Ver1.1 scilog Ver1.0.4に対応 記録CH数指定
記録するCH数を変更できるようになったので対応
ヘッダにはCH数を保存していないので、CH数をコマンドラインで指定する必要がある
指定しなかった場合はDefault 6CH
Usage: decode_sci -c CH_NUM inputfile
| @@ -1,10 +1,19 @@ | ||
| 1 | 1 | /* |
| 2 | - decode_sci.c | |
| 2 | + decode_sci.cgit s | |
| 3 | 3 | sciLogger high sample data decoder |
| 4 | 4 | |
| 5 | 5 | 入力ファイル Little Endian |
| 6 | 6 | このプログラムが動作するマシンもLittle Endianである必要あり。 |
| 7 | 7 | |
| 8 | +*** Ver1.1 | |
| 9 | +* scilog Ver1.0.4に対応 | |
| 10 | +* 記録するCH数を変更できるようになったので対応 | |
| 11 | +* ヘッダにはCH数を保存していないので、CH数をコマンドラインで指定する必要がある | |
| 12 | +* 指定しなかった場合はDefault 6CH | |
| 13 | +* | |
| 14 | +* Usage: decode_sci -c CH_NUM inputfile | |
| 15 | +* CH_NUM ファイルに記録されているCH数を指定する 無指定時のDefaultは6 | |
| 16 | +* | |
| 8 | 17 | Copyright Naoya Takamura@NT systemd design, 2011 |
| 9 | 18 | |
| 10 | 19 | This program is free software; you can redistribute it and/or modify |
| @@ -25,11 +34,13 @@ | ||
| 25 | 34 | #include <stdlib.h> |
| 26 | 35 | #include <string.h> |
| 27 | 36 | #include <stdint.h> |
| 37 | +#include <getopt.h> | |
| 28 | 38 | |
| 29 | -#define VER "1.0" | |
| 39 | +#define VER "1.1" | |
| 30 | 40 | #define AD_CH 6 |
| 31 | 41 | #define AD_SAMPLE 50 |
| 32 | 42 | #define AD_BYTES 3 |
| 43 | +#define EXE_NAME "decode_sci" | |
| 33 | 44 | |
| 34 | 45 | struct _recdata_head_t { |
| 35 | 46 | uint16_t year; // UTC |
| @@ -70,7 +81,7 @@ static int32_t b3_to_long32(unsigned char *ptr) | ||
| 70 | 81 | /* |
| 71 | 82 | data decode |
| 72 | 83 | */ |
| 73 | -static void read_high(FILE *fp) | |
| 84 | +static void read_high(FILE *fp, int chn) | |
| 74 | 85 | { |
| 75 | 86 | recdata_head d; |
| 76 | 87 | int ch, j; |
| @@ -84,12 +95,12 @@ static void read_high(FILE *fp) | ||
| 84 | 95 | fprintf(stderr, "read_high() Error freq=%d\n", d.freq); |
| 85 | 96 | break; |
| 86 | 97 | } |
| 87 | - int data_size = AD_CH * d.freq * AD_BYTES; | |
| 98 | + int data_size = chn * d.freq * AD_BYTES; | |
| 88 | 99 | // AD data |
| 89 | 100 | if (fread(data, 1, data_size, fp) < 1) break; |
| 90 | 101 | for(j = 0; j < d.freq; j++) { |
| 91 | 102 | fprintf(stdout, "%02d:%02d:%02d.%03d", d.hour, d.min, d.sec, (1000*j/d.freq)); |
| 92 | - for(ch = 0; ch < AD_CH; ch++) { | |
| 103 | + for(ch = 0; ch < chn; ch++) { | |
| 93 | 104 | fprintf(stdout, ",%+07d", b3_to_long32((char*)(data + ch*d.freq*AD_BYTES + j*AD_BYTES))); |
| 94 | 105 | } |
| 95 | 106 | fprintf(stdout, "\n"); |
| @@ -104,24 +115,36 @@ int main(int argc, char *argv[]) | ||
| 104 | 115 | char fname_out[128]; |
| 105 | 116 | char sz[32]; |
| 106 | 117 | unsigned char buf[256]; |
| 107 | - | |
| 108 | -//printf("len=%d\n", REC_DATALEN_HEAD); | |
| 109 | -// exit(0); | |
| 110 | - | |
| 118 | + int result; | |
| 119 | + int chn = AD_CH; | |
| 120 | + | |
| 111 | 121 | if (argc == 1) { |
| 112 | 122 | printf("sciLogger high sample data converter Ver"VER"\n"); |
| 113 | 123 | printf("Please set filename.\n"); |
| 124 | + printf("Usage: \n"); | |
| 125 | + printf(EXE_NAME " -c CH_NUM inputfile\n"); | |
| 114 | 126 | exit(0); |
| 115 | 127 | } |
| 116 | - | |
| 117 | - fpin = fopen(argv[1], "rb"); | |
| 128 | + while((result = getopt(argc, argv, "c:")) != -1) { | |
| 129 | + switch(result) { | |
| 130 | + case 'c': | |
| 131 | + chn = atoi(optarg); | |
| 132 | + if (chn <= 0 || chn > AD_CH) { | |
| 133 | + fprintf(stderr, "Invalid CH num %d.\n", chn); | |
| 134 | + goto errout2; | |
| 135 | + } | |
| 136 | + break; | |
| 137 | + } | |
| 138 | + } | |
| 139 | + // | |
| 140 | + fpin = fopen(argv[optind], "rb"); | |
| 118 | 141 | |
| 119 | 142 | if (fpin == NULL) { |
| 120 | 143 | fprintf(stderr, "Input file open error.\n"); |
| 121 | 144 | goto errout2; |
| 122 | 145 | } |
| 123 | 146 | // 出力ファイル名 |
| 124 | - strcpy(fname_out, argv[1]); | |
| 147 | + strcpy(fname_out, argv[optind]); | |
| 125 | 148 | strcat(fname_out, ".txt"); |
| 126 | 149 | |
| 127 | 150 | fpout = freopen(fname_out, "w", stdout); |
| @@ -129,7 +152,7 @@ int main(int argc, char *argv[]) | ||
| 129 | 152 | fprintf(stderr, "Output file open ERROR. %s\n", fname_out); |
| 130 | 153 | goto errout1; |
| 131 | 154 | } |
| 132 | - read_high(fpin); | |
| 155 | + read_high(fpin, chn); | |
| 133 | 156 | |
| 134 | 157 | fclose(fpout); |
| 135 | 158 | fclose(fpin); |