9 #include "debug_print.h"
13 //#define SEC_FLUSH_NUM 1
14 #define SEC_FLUSH_NUM 60
16 // 高速サンプルファイル書き込み間隔 sec
17 //#define HIGH_FLUSH_NUM 1
18 #define HIGH_FLUSH_NUM 10
21 static struct tm high_tm;
22 static struct tm sec_tm;
34 static int latest = -1;
38 if (latest == ad_ring_latest_get()) return STS_TIME_FIX;
39 latest = ad_ring_latest_get();
42 d = ad_ring_get(latest);
44 if (d->gps.valid & 0x07) {
45 PDEBUG("ProcTimeFix: rec init.\n");
62 if (ad_ring_latest_get() >= 0) {
68 d = ad_ring_get(ad_ring_latest_get());
73 PDEBUG("ProcRecInit: rec start.\n");
89 char buf[HIGH_WRITE_LEN_MAX+128];
97 if (ad_ring_num_get_sec() >= SEC_FLUSH_NUM) {
99 d = ad_ring_get(ad_ring_read_get_sec());
101 sec_file_open(&fp, d);
104 while(ad_ring_num_get_sec() > 0) {
106 d = ad_ring_get(ad_ring_read_get_sec());
108 PDEBUG("%04d/%02d/%02d %02d:%02d:%02d.%09ld,%6lums,%6luns,%02X",
109 d->gps.year, d->gps.month, d->gps.day, d->gps.hour, d->gps.min, d->gps.sec, d->gps.nano,
110 d->gps.tow, d->gps.tacc, d->gps.valid);
112 for(ch = 0; ch < AD_CHNUM; ch++) {
113 PDEBUG(",%+7ld", d->data1sec[ch]);
119 #ifdef DEBUG_FILE_MIN
120 // デバッグ用 ?分ごとファイル切り替え
121 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_sec == 0) && (d->t.tm_min != sec_tm.tm_min)) {
123 if (d->t.tm_year != sec_tm.tm_year || d->t.tm_mon != sec_tm.tm_mon || d->t.tm_mday != sec_tm.tm_mday) {
127 if (fp != NULL) sec_file_close(fp);
129 if (sec_file_open(&fp, d)) {
130 PDEBUG("REC: FG file change ERROR\n");
131 syslog(LOG_INFO, "REC: FG file change ERROR\n");
133 PDEBUG("REC: FG file change OK\n");
134 syslog(LOG_INFO, "REC: FG file change OK\n");
138 sec_make_rec_data(d, buf);
139 // ファイルに1データ書き込み Open/Closeなし
140 if (sec_file_out(fp, buf, strlen(buf))) {
147 PDEBUG("ProcRec: 1sec file write err\n");
148 syslog(LOG_INFO, "REC: 1sec file write error\n");
152 ad_ring_read_plus_sec();
159 PDEBUG("ProcRec: 1sec file write.\n");
167 if (ad_ring_num_get_high() >= HIGH_FLUSH_NUM) {
169 d = ad_ring_get(ad_ring_read_get_high());
171 high_file_open(&fp, d);
174 while(ad_ring_num_get_high() > 0) {
176 d = ad_ring_get(ad_ring_read_get_high());
178 #ifdef DEBUG_FILE_MIN
179 // デバッグ用 ?分ごとファイル切り替え
180 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_high == 0) && (d->t.tm_min != hightm.tm_min)) {
182 if (d->t.tm_year != high_tm.tm_year || d->t.tm_mon != high_tm.tm_mon || d->t.tm_mday != high_tm.tm_mday
183 || d->t.tm_hour != high_tm.tm_hour) {
187 if (fp != NULL) high_file_close(fp);
189 if (high_file_open(&fp, d)) {
190 PDEBUG("REC: FG file change ERROR\n");
191 syslog(LOG_INFO, "REC: HIGH file change ERROR\n");
193 PDEBUG("REC: FG file change OK\n");
194 syslog(LOG_INFO, "REC: HIGH file change OK\n");
198 high_make_rec_data(d, buf);
199 // ファイルに1データ書き込み Open/Closeなし
200 if (high_file_out(fp, buf, HIGH_WRITE_LEN)) {
203 ad_ring_clear_high();
207 PDEBUG("ProcRec: HIGH file write err\n");
208 syslog(LOG_INFO, "REC: HIGH file write error\n");
212 ad_ring_read_plus_high();
219 PDEBUG("ProcRec: HIGH file write.\n");
225 void* thread_rec(void* pParam)
232 sts_set(ProcTimeFix());
236 sts_set(ProcRecInit());
244 // sts_set(ProcRecOff());
248 // sts_set(ProcErr());