• R/O
  • HTTP
  • SSH
  • HTTPS

scilog: Commit

Overoで動作するデータ収録プログラム
サブCPUからGPS時刻付きADデータを取得してSDに記録する。


Commit MetaInfo

Revisãoe076a8cd6d376e3c93da458502890ebcc02afd65 (tree)
Hora2011-12-12 21:00:34
AutorNaoya Takamura <ntaka206@user...>
CommiterNaoya Takamura

Mensagem de Log

conf.c

sid_get() del
conf_freq_set() add

ad_ring.h
 リングバッファ構造体
  要素変更 nano->tacc
  要素追加 freq
ad_file.c
 平均化コード実装

Mudança Sumário

Diff

--- a/ad_file.c
+++ b/ad_file.c
@@ -86,7 +86,7 @@ int sec_file_open(FILE **fp, AdData *D)
8686 char path[128];
8787
8888 // サブディレクトリ作成
89- sprintf(szDir, "%s/%s/%04d/%02d", DIR_DATA, sid_getp(), D->t.tm_year+1900, D->t.tm_mon+1);
89+ sprintf(szDir, "%s/%04d/%02d", DIR_DATA, D->t.tm_year+1900, D->t.tm_mon+1);
9090 // ディレクトリ存在しなければ作成する
9191 if (stat(szDir, &st) == -1) mkdir_p(szDir, MKDIR_MODE);
9292
@@ -173,7 +173,7 @@ int high_file_open(FILE **fp, AdData *D)
173173 char path[128];
174174
175175 // サブディレクトリ作成
176- sprintf(szDir, "%s/%s/%04d/%02d", DIR_DATA, sid_getp(), D->t.tm_year+1900, D->t.tm_mon+1);
176+ sprintf(szDir, "%s/%04d/%02d", DIR_DATA, D->t.tm_year+1900, D->t.tm_mon+1);
177177 // ディレクトリ存在しなければ作成する
178178 if (stat(szDir, &st) == -1) mkdir_p(szDir, MKDIR_MODE);
179179
@@ -226,12 +226,13 @@ int high_file_close(FILE *fp)
226226 }
227227
228228 /*
229+ 高速サンプル記録データ
229230 記録用データ作る
230231 */
231232 int high_make_rec_data(AdData *ad, char *ptr)
232233 {
233- unsigned char *src;
234- int ch, i, j;
234+// char *src;
235+ int ch, i;
235236
236237 *ptr++ = ad->gps.year & 0xFF;
237238 *ptr++ = (ad->gps.year >> 8) & 0xFF;
@@ -240,16 +241,22 @@ int high_make_rec_data(AdData *ad, char *ptr)
240241 *ptr++ = ad->gps.hour;
241242 *ptr++ = ad->gps.min;
242243 *ptr++ = ad->gps.sec;
243- *ptr++ = ad->gps.nano;
244+ memcpy(ptr, (char*)(&(ad->gps.tacc)), 4);
245+ ptr += 4;
244246 *ptr++ = ad->gps.valid;
247+ *ptr++ = ad->freq & 0xFF;
248+ *ptr++ = (ad->freq >> 8) & 0xFF;
249+
245250 //
246- src = ad->data;
251+// src = (char*)ad->avg;
247252 for(ch = 0; ch < AD_CHNUM; ch++) {
248- for(i = 0; i < AD_SAMPLE; i++) {
249- for(j = 0; j < AD_BYTES; j++) {
250- *ptr++ = *src++;
251- }
252- src++;
253+ for(i = 0; i < ad->freq; i++) {
254+ memcpy(ptr, &(ad->avg[ch][i]), AD_BYTES);
255+ ptr += AD_BYTES;
256+// for(j = 0; j < AD_BYTES; j++) {
257+// *ptr++ = *src++;
258+// }
259+// src++;
253260 }
254261 }
255262 return 0;
--- a/ad_file.h
+++ b/ad_file.h
@@ -2,6 +2,7 @@
22 #define __AD_FILE_H__
33
44 #include "ad_ring.h"
5+#include "conf.h"
56
67 // データ記録用dir 末尾に/付けない
78 #ifdef DUMMY
@@ -36,9 +37,9 @@ typedef struct {
3637
3738 #define HIGH_WRITE_LEN szieof(HighSampleRecType)
3839 #endif
39-
40-#define HIGH_WRITE_LEN (9 + AD_CHNUM*AD_SAMPLE*AD_BYTES) // 仮で50Hz 記録周波数で変わるので要変更!!!!!!!!!!!!!!
41-
40+#define HIGH_HEADER_LEN 14
41+#define HIGH_WRITE_LEN_MAX (HIGH_HEADER_LEN + AD_CHNUM*AD_SAMPLE*AD_BYTES)
42+#define HIGH_WRITE_LEN (HIGH_HEADER_LEN + AD_CHNUM*conf_freq_get()*AD_BYTES) // 記録周波数で変わる
4243
4344 int sec_file_open(FILE **fp, AdData *D);
4445 int sec_file_out(FILE *fp, char *out, int len);
--- a/ad_ring.h
+++ b/ad_ring.h
@@ -31,6 +31,7 @@ typedef struct {
3131 typedef struct {
3232 UbloxNavTimeUtc gps; // GPSタイムスタンプ SPIで受信
3333 struct tm t; // タイムスタンプ struct tmの月は(0〜11)なので注意 年は1900からのオフセット
34+ int freq; // 平均周波数 Hz
3435 long data1sec[AD_CHNUM]; // 1sec平均値 SPIで受信
3536 long data[AD_CHNUM][AD_SAMPLE]; // AD_SAMPLE[Hz]の生データ SPIで受信
3637 long avg[AD_CHNUM][AD_SAMPLE]; // 平均後データ
--- a/conf.c
+++ b/conf.c
@@ -7,32 +7,28 @@
77 #include "conf.h"
88 #include "debug_print.h"
99
10+// ミューテックス
11+static pthread_mutex_t mutex_conf = PTHREAD_MUTEX_INITIALIZER;
12+
1013 //
11-/**** Station ID ***************************************************
14+/**** 記録周波数 ***************************************************
1215 */
13-#define SID_MAX 16
14-static char gsid[SID_MAX + 1];
1516
16-// ミューテックス
17-static pthread_mutex_t mutex_sid = PTHREAD_MUTEX_INITIALIZER;
17+static int freq;
1818
19-void sid_set(char *s)
19+void conf_freq_set(int f)
2020 {
21-pthread_mutex_lock(&mutex_sid);
22- strncpy(gsid, s, SID_MAX);
23- gsid[SID_MAX] = 0;
24-pthread_mutex_unlock(&mutex_sid);
21+pthread_mutex_lock(&mutex_conf);
22+ freq = f;
23+pthread_mutex_unlock(&mutex_conf);
2524 }
26-void sid_get(char *s)
25+int conf_freq_get(void)
2726 {
28-pthread_mutex_lock(&mutex_sid);
29- strncpy(s, gsid, SID_MAX);
30- s[SID_MAX] = 0;
31-pthread_mutex_unlock(&mutex_sid);
32-}
33-char *sid_getp(void)
34-{
35- return gsid;
27+ int f;
28+pthread_mutex_lock(&mutex_conf);
29+ f = freq;
30+pthread_mutex_unlock(&mutex_conf);
31+ return f;
3632 }
3733
3834 //
@@ -126,8 +122,9 @@ int conf_read(void)
126122 {
127123 FILE *fp;
128124 char buf[256];
129- char buf2[256];
130-
125+// char buf2[256];
126+ int f;
127+
131128 fp = fopen(CONF_FILE, "rt");
132129 if (fp == NULL) {
133130 syslog(LOG_ERR, "conf_read(): conf file not found. %s", CONF_FILE);
@@ -141,10 +138,10 @@ int conf_read(void)
141138 trim_space(buf);
142139 PDEBUG(buf);
143140 PDEBUG("\n");
144- // Station ID
145- if (sscanf(buf, "sid = %s", buf2) == 1) {
146- sid_set(buf2);
147- syslog(LOG_INFO, "sid=%s", sid_getp());
141+ // 記録周波数
142+ if (sscanf(buf, "freq = %d", &f) == 1) {
143+ conf_freq_set(f);
144+ syslog(LOG_INFO, "freq=%d", conf_freq_get());
148145 }
149146 }
150147 fclose(fp);
--- a/conf.h
+++ b/conf.h
@@ -2,12 +2,10 @@
22 #define __CONF_H__
33
44 // 設定ファイル
5-#define CONF_FILE "/etc/meas.conf"
5+#define CONF_FILE "/etc/scilog.conf"
66
7-void sid_set(char *s);
8-void sid_get(char *s);
9-char *sid_getp(void);
7+void conf_freq_set(int f);
8+int conf_freq_get(void);
109 int conf_read(void);
1110
12-
1311 #endif
--- a/makefile.host
+++ b/makefile.host
@@ -8,11 +8,11 @@ LDFLAGS =
88 LIBS = -lm -lpthread
99 TEST_LIBS = $(LIBS) -lcunit
1010
11-SRCS0 = thread_rcv.c spi.c ring.c ad_ring.c rec.c sts.c ad_file.c
11+SRCS0 = thread_rcv.c spi.c ring.c ad_ring.c thread_rec.c sts.c ad_file.c conf.c
1212 SRCS = scilog.c $(SRCS0)
1313 TEST_SRCS = test.c $(SRCS0)
1414
15-HDRS = mes_print.h debug_print.h my_thread.h spi.h ring.h ad_ring.h rec.h sts.h ad_file.h
15+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
1616
1717 OBJS = $(SRCS:.c=.o)
1818 TEST_OBJS = $(TEST_SRCS:.c=.o)
Binary files a/scilog and b/scilog differ
--- a/scilog.c
+++ b/scilog.c
@@ -44,7 +44,7 @@
4444
4545 /**** 設定デフォルト値
4646 */
47-#define SID_DEF "DEF"
47+#define CONF_FREQ_DEF 50
4848
4949
5050 //
@@ -96,10 +96,10 @@ int main (int argc, char *argv[])
9696 //goto END;
9797
9898 // デフォルト設定
99- sid_set(SID_DEF);
99+ conf_freq_set(CONF_FREQ_DEF);
100100 // 設定ファイル読み込み
101101 conf_read();
102- PDEBUG("sid=%s\n", sid_getp());
102+ PDEBUG("freq=%d\n", conf_freq_get());
103103 // lcd_print("*");
104104
105105 PDEBUG("sciLogger %s START\n", VERSION);
--- a/thread_rcv.c
+++ b/thread_rcv.c
@@ -9,6 +9,7 @@
99
1010 #include "spi.h"
1111 #include "ad_ring.h"
12+#include "conf.h"
1213
1314 /*
1415 Little Endian
@@ -80,8 +81,22 @@ static int decode(char *buf, AdData *ad)
8081 */
8182 static void do_avg(int freq, AdData *ad)
8283 {
83-// 仮コード
84- memcpy(ad->avg, ad->data, AD_CHNUM*AD_SAMPLE*AD_BYTES);
84+ int ch, i, j;
85+ long add;
86+ int avg_freq;
87+ int avg_num;
88+
89+ avg_freq = conf_freq_get();
90+ avg_num = AD_SAMPLE/avg_freq;
91+ for(ch = 0; ch < AD_CHNUM; ch++) {
92+ for(i = 0; i < avg_freq; i++) {
93+ add = 0;
94+ for(j = 0; j < avg_num; j++) {
95+ add += ad->data[ch][i*avg_num + j];
96+ }
97+ ad->avg[ch][i] = add / avg_num;
98+ }
99+ }
85100 }
86101 void* thread_rcv(void* pParam)
87102 {
@@ -106,13 +121,12 @@ void* thread_rcv(void* pParam)
106121 i = spi_dnum_get();
107122 //printf("thread_rcv(): wakeup dnum=%d rcv_len=%d\n", i, spi_rcvd_len_get());
108123 while(i-- > 0) {
109- // バッファ書き込み位置get
110-// d = ring_get(ring_write_get());
111-// ring_zero();
124+ memset(&ad, 0, sizeof(ad));
112125 // データ取得
113126 spi_rx_get(buf);
114127 // デコード
115128 decode(buf, &ad);
129+ ad.freq = conf_freq_get();
116130 // 平均 仮コード 要変更
117131 do_avg(AD_SAMPLE, &ad);
118132 #if 0
--- a/thread_rec.c
+++ b/thread_rec.c
@@ -85,7 +85,7 @@ int ProcRec(void)
8585 {
8686 AdData *d;
8787 FILE *fp = NULL;
88- char buf[HIGH_WRITE_LEN+128];
88+ char buf[HIGH_WRITE_LEN_MAX+128];
8989
9090 //
9191 /**** 1secデータ記録
Show on old repository browser