/*
- 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
/*
data decode
*/
-static void read_high(FILE *fp)
+static void read_high(FILE *fp, int chn)
{
recdata_head d;
int ch, j;
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");
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);
fprintf(stderr, "Output file open ERROR. %s\n", fname_out);
goto errout1;
}
- read_high(fpin);
+ read_high(fpin, chn);
fclose(fpout);
fclose(fpin);