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);
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);
}
/*
+ 高速サンプル記録データ
記録用データ作る
*/
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;
*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;
#define __AD_FILE_H__
#include "ad_ring.h"
+#include "conf.h"
// データ記録用dir 末尾に/付けない
#ifdef DUMMY
#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);
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]; // 平均後データ
#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;
}
//
{
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);
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);
#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
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)
/**** 設定デフォルト値
*/
-#define SID_DEF "DEF"
+#define CONF_FREQ_DEF 50
//
//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);
\r
#include "spi.h"\r
#include "ad_ring.h"\r
+#include "conf.h"\r
\r
/*\r
Little Endian\r
*/\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
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
{
AdData *d;
FILE *fp = NULL;
- char buf[HIGH_WRITE_LEN+128];
+ char buf[HIGH_WRITE_LEN_MAX+128];
//
/**** 1secデータ記録