OSDN Git Service

conf.c
authorNaoya Takamura <ntaka206@users.sourceforge.jp>
Mon, 12 Dec 2011 12:00:34 +0000 (21:00 +0900)
committerNaoya Takamura <ntaka206@users.sourceforge.jp>
Mon, 12 Dec 2011 12:00:34 +0000 (21:00 +0900)
 sid_get() del
 conf_freq_set() add
ad_ring.h
 リングバッファ構造体
  要素変更 nano->tacc
  要素追加 freq
ad_file.c
 平均化コード実装

ad_file.c
ad_file.h
ad_ring.h
conf.c
conf.h
makefile.host
scilog
scilog.c
thread_rcv.c
thread_rec.c

index fd3ca15..cf76e52 100644 (file)
--- a/ad_file.c
+++ b/ad_file.c
@@ -86,7 +86,7 @@ int sec_file_open(FILE **fp, AdData *D)
        char    path[128];
        
        // サブディレクトリ作成
-       sprintf(szDir, "%s/%s/%04d/%02d", DIR_DATA, sid_getp(), D->t.tm_year+1900, D->t.tm_mon+1);
+       sprintf(szDir, "%s/%04d/%02d", DIR_DATA, D->t.tm_year+1900, D->t.tm_mon+1);
        // ディレクトリ存在しなければ作成する
        if (stat(szDir, &st) == -1) mkdir_p(szDir, MKDIR_MODE);
 
@@ -173,7 +173,7 @@ int high_file_open(FILE **fp, AdData *D)
        char    path[128];
        
        // サブディレクトリ作成
-       sprintf(szDir, "%s/%s/%04d/%02d", DIR_DATA, sid_getp(), D->t.tm_year+1900, D->t.tm_mon+1);
+       sprintf(szDir, "%s/%04d/%02d", DIR_DATA, D->t.tm_year+1900, D->t.tm_mon+1);
        // ディレクトリ存在しなければ作成する
        if (stat(szDir, &st) == -1) mkdir_p(szDir, MKDIR_MODE);
 
@@ -226,12 +226,13 @@ int high_file_close(FILE *fp)
 }
 
 /*
+       高速サンプル記録データ
        記録用データ作る
 */
 int high_make_rec_data(AdData *ad, char *ptr)
 {
-       unsigned char   *src;
-       int     ch, i, j;
+//     char    *src;
+       int     ch, i;
        
        *ptr++ = ad->gps.year & 0xFF;
        *ptr++ = (ad->gps.year >> 8) & 0xFF;
@@ -240,16 +241,22 @@ int high_make_rec_data(AdData *ad, char *ptr)
        *ptr++ = ad->gps.hour;
        *ptr++ = ad->gps.min;
        *ptr++ = ad->gps.sec;
-       *ptr++ = ad->gps.nano;
+       memcpy(ptr, (char*)(&(ad->gps.tacc)), 4);
+       ptr += 4;
        *ptr++ = ad->gps.valid;
+       *ptr++ = ad->freq & 0xFF;
+       *ptr++ = (ad->freq >> 8) & 0xFF;
+       
        // 
-       src = ad->data;
+//     src = (char*)ad->avg;
        for(ch = 0; ch < AD_CHNUM; ch++) {
-               for(i = 0; i < AD_SAMPLE; i++) {
-                       for(j = 0; j < AD_BYTES; j++) {
-                               *ptr++ = *src++;
-                       }
-                       src++;
+               for(i = 0; i < ad->freq; i++) {
+                       memcpy(ptr, &(ad->avg[ch][i]), AD_BYTES);
+                       ptr += AD_BYTES;
+//                     for(j = 0; j < AD_BYTES; j++) {
+//                             *ptr++ = *src++;
+//                     }
+//                     src++;
                }
        }
        return 0;
index f479e2d..5092e8d 100644 (file)
--- a/ad_file.h
+++ b/ad_file.h
@@ -2,6 +2,7 @@
 #define        __AD_FILE_H__
 
 #include "ad_ring.h"
+#include "conf.h"
 
 // データ記録用dir 末尾に/付けない
 #ifdef DUMMY
@@ -36,9 +37,9 @@ typedef struct {
 
 #define        HIGH_WRITE_LEN  szieof(HighSampleRecType)
 #endif
-
-#define        HIGH_WRITE_LEN  (9 + AD_CHNUM*AD_SAMPLE*AD_BYTES)       // 仮で50Hz 記録周波数で変わるので要変更!!!!!!!!!!!!!!
-
+#define        HIGH_HEADER_LEN 14
+#define        HIGH_WRITE_LEN_MAX      (HIGH_HEADER_LEN + AD_CHNUM*AD_SAMPLE*AD_BYTES)
+#define        HIGH_WRITE_LEN  (HIGH_HEADER_LEN + AD_CHNUM*conf_freq_get()*AD_BYTES)   // 記録周波数で変わる
 
 int sec_file_open(FILE **fp, AdData *D);
 int sec_file_out(FILE *fp, char *out, int len);
index f63ddd0..588ccad 100644 (file)
--- a/ad_ring.h
+++ b/ad_ring.h
@@ -31,6 +31,7 @@ typedef struct {
 typedef struct {
        UbloxNavTimeUtc gps;                    // GPSタイムスタンプ SPIで受信
        struct tm t;                                    // タイムスタンプ struct tmの月は(0〜11)なので注意 年は1900からのオフセット
+       int     freq;                                           // 平均周波数 Hz
        long data1sec[AD_CHNUM];                // 1sec平均値 SPIで受信
        long data[AD_CHNUM][AD_SAMPLE]; // AD_SAMPLE[Hz]の生データ SPIで受信
        long avg[AD_CHNUM][AD_SAMPLE];  // 平均後データ
diff --git a/conf.c b/conf.c
index da6e9af..31fc2e7 100644 (file)
--- a/conf.c
+++ b/conf.c
@@ -7,32 +7,28 @@
 #include "conf.h"
 #include "debug_print.h"
 
+// ミューテックス
+static pthread_mutex_t mutex_conf = PTHREAD_MUTEX_INITIALIZER;
+
 //
-/**** Station ID ***************************************************
+/**** 記録周波数 ***************************************************
 */
-#define        SID_MAX 16
-static char    gsid[SID_MAX + 1];
 
-// ミューテックス
-static pthread_mutex_t mutex_sid = PTHREAD_MUTEX_INITIALIZER;
+static int     freq;
 
-void sid_set(char *s)
+void conf_freq_set(int f)
 {
-pthread_mutex_lock(&mutex_sid);
-       strncpy(gsid, s, SID_MAX);
-       gsid[SID_MAX] = 0;
-pthread_mutex_unlock(&mutex_sid);
+pthread_mutex_lock(&mutex_conf);
+       freq = f;
+pthread_mutex_unlock(&mutex_conf);
 }
-void sid_get(char *s)
+int conf_freq_get(void)
 {
-pthread_mutex_lock(&mutex_sid);
-       strncpy(s, gsid, SID_MAX);
-       s[SID_MAX] = 0;
-pthread_mutex_unlock(&mutex_sid);
-}
-char *sid_getp(void)
-{
-       return gsid;
+       int     f;
+pthread_mutex_lock(&mutex_conf);
+       f = freq;
+pthread_mutex_unlock(&mutex_conf);
+       return f;
 }
 
 //
@@ -126,8 +122,9 @@ int conf_read(void)
 {
        FILE    *fp;
        char    buf[256];
-       char    buf2[256];
-
+//     char    buf2[256];
+       int     f;
+       
        fp = fopen(CONF_FILE, "rt");
        if (fp == NULL) {
                syslog(LOG_ERR, "conf_read(): conf file not found. %s", CONF_FILE);
@@ -141,10 +138,10 @@ int conf_read(void)
                trim_space(buf);
                PDEBUG(buf);
                PDEBUG("\n");
-               // Station ID
-               if (sscanf(buf, "sid = %s", buf2) == 1) {
-                       sid_set(buf2);
-                       syslog(LOG_INFO, "sid=%s", sid_getp());
+               // 記録周波数
+               if (sscanf(buf, "freq = %d", &f) == 1) {
+                       conf_freq_set(f);
+                       syslog(LOG_INFO, "freq=%d", conf_freq_get());
                } 
        }
        fclose(fp);
diff --git a/conf.h b/conf.h
index ed313ef..41949a5 100644 (file)
--- a/conf.h
+++ b/conf.h
@@ -2,12 +2,10 @@
 #define        __CONF_H__\r
 \r
 // 設定ファイル\r
-#define        CONF_FILE       "/etc/meas.conf"\r
+#define        CONF_FILE       "/etc/scilog.conf"\r
 \r
-void sid_set(char *s);\r
-void sid_get(char *s);\r
-char *sid_getp(void);\r
+void conf_freq_set(int f);\r
+int conf_freq_get(void);\r
 int conf_read(void);\r
 \r
-\r
 #endif\r
index 0f9a208..a5a311c 100755 (executable)
@@ -8,11 +8,11 @@ LDFLAGS               =
 LIBS           = -lm -lpthread
 TEST_LIBS      = $(LIBS) -lcunit
 
-SRCS0          = thread_rcv.c spi.c ring.c ad_ring.c rec.c sts.c ad_file.c
+SRCS0          = thread_rcv.c spi.c ring.c ad_ring.c thread_rec.c sts.c ad_file.c conf.c
 SRCS           = scilog.c $(SRCS0)
 TEST_SRCS      = test.c $(SRCS0)
 
-HDRS           = mes_print.h debug_print.h my_thread.h spi.h ring.h ad_ring.h rec.h sts.h ad_file.h
+HDRS           = mes_print.h debug_print.h my_thread.h spi.h ring.h ad_ring.h thread_rec.h sts.h ad_file.h conf.h
 
 OBJS           = $(SRCS:.c=.o) 
 TEST_OBJS              = $(TEST_SRCS:.c=.o) 
diff --git a/scilog b/scilog
index f26b489..4dea994 100755 (executable)
Binary files a/scilog and b/scilog differ
index 74e5bb6..97bc257 100644 (file)
--- a/scilog.c
+++ b/scilog.c
@@ -44,7 +44,7 @@
 
 /**** 設定デフォルト値
 */
-#define        SID_DEF "DEF"
+#define        CONF_FREQ_DEF   50
 
 
 //
@@ -96,10 +96,10 @@ int main (int argc, char *argv[])
 //goto END;
 
        // デフォルト設定
-       sid_set(SID_DEF);
+       conf_freq_set(CONF_FREQ_DEF);
        // 設定ファイル読み込み
        conf_read();
-       PDEBUG("sid=%s\n", sid_getp());
+       PDEBUG("freq=%d\n", conf_freq_get());
 //     lcd_print("*");
 
        PDEBUG("sciLogger %s START\n", VERSION);
index 75e2403..1c54492 100644 (file)
@@ -9,6 +9,7 @@
 \r
 #include "spi.h"\r
 #include "ad_ring.h"\r
+#include "conf.h"\r
 \r
 /*\r
        Little Endian\r
@@ -80,8 +81,22 @@ static int decode(char *buf, AdData *ad)
 */\r
 static void do_avg(int freq, AdData *ad)\r
 {\r
-// 仮コード\r
-       memcpy(ad->avg, ad->data, AD_CHNUM*AD_SAMPLE*AD_BYTES);\r
+       int     ch, i, j;\r
+       long    add;\r
+       int     avg_freq;\r
+       int     avg_num;\r
+       \r
+       avg_freq = conf_freq_get();\r
+       avg_num = AD_SAMPLE/avg_freq;\r
+       for(ch = 0; ch < AD_CHNUM; ch++) {\r
+               for(i = 0; i < avg_freq; i++) {\r
+                       add = 0;\r
+                       for(j = 0; j < avg_num; j++) {\r
+                               add += ad->data[ch][i*avg_num + j];\r
+                       }\r
+                       ad->avg[ch][i] = add / avg_num;\r
+               }\r
+       }\r
 }\r
 void* thread_rcv(void* pParam)\r
 {\r
@@ -106,13 +121,12 @@ void* thread_rcv(void* pParam)
                        i = spi_dnum_get();\r
 //printf("thread_rcv(): wakeup dnum=%d rcv_len=%d\n", i, spi_rcvd_len_get());\r
                        while(i-- > 0) {\r
-                               // バッファ書き込み位置get\r
-//                             d = ring_get(ring_write_get());\r
-//                             ring_zero();\r
+                               memset(&ad, 0, sizeof(ad));\r
                                // データ取得\r
                                spi_rx_get(buf);\r
                                // デコード\r
                                decode(buf, &ad);\r
+                               ad.freq = conf_freq_get();\r
                                // 平均 仮コード 要変更\r
                                do_avg(AD_SAMPLE, &ad);\r
 #if 0\r
index fd431b3..72ebcbf 100644 (file)
@@ -85,7 +85,7 @@ int ProcRec(void)
 {
        AdData  *d;
        FILE    *fp = NULL;
-       char    buf[HIGH_WRITE_LEN+128];
+       char    buf[HIGH_WRITE_LEN_MAX+128];
        
 //
 /**** 1secデータ記録