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
20 static struct tm high_tm;
21 static struct tm sec_tm;
33 static int latest = -1;
37 if (latest == ad_ring_latest_get()) return STS_TIME_FIX;
38 latest = ad_ring_latest_get();
41 d = ad_ring_get(latest);
43 if (d->gps.valid & 0x07) {
44 PDEBUG("ProcTimeFix: rec init.\n");
61 if (ad_ring_latest_get() >= 0) {
67 d = ad_ring_get(ad_ring_latest_get());
72 PDEBUG("ProcRecInit: rec start.\n");
88 char buf[HIGH_WRITE_LEN_MAX+128];
96 if (ad_ring_num_get_sec() >= SEC_FLUSH_NUM) {
98 d = ad_ring_get(ad_ring_read_get_sec());
100 sec_file_open(&fp, d);
103 while(ad_ring_num_get_sec() > 0) {
105 d = ad_ring_get(ad_ring_read_get_sec());
106 PDEBUG("%04d/%02d/%02d %02d:%02d:%02d.%09ld,%6lums,%6luns,%02X",
107 d->gps.year, d->gps.month, d->gps.day, d->gps.hour, d->gps.min, d->gps.sec, d->gps.nano,
108 d->gps.tow, d->gps.tacc, d->gps.valid);
110 for(ch = 0; ch < AD_CHNUM; ch++) {
111 PDEBUG(",%+7ld", d->data1sec[ch]);
116 #ifdef DEBUG_FILE_MIN
117 // デバッグ用 ?分ごとファイル切り替え
118 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_sec == 0) && (d->t.tm_min != sec_tm.tm_min)) {
120 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) {
124 if (fp != NULL) sec_file_close(fp);
126 if (sec_file_open(&fp, d)) {
127 PDEBUG("REC: FG file change ERROR\n");
128 syslog(LOG_INFO, "REC: FG file change ERROR\n");
130 PDEBUG("REC: FG file change OK\n");
131 syslog(LOG_INFO, "REC: FG file change OK\n");
135 sec_make_rec_data(d, buf);
136 // ファイルに1データ書き込み Open/Closeなし
137 if (sec_file_out(fp, buf, strlen(buf))) {
144 PDEBUG("ProcRec: 1sec file write err\n");
145 syslog(LOG_INFO, "REC: 1sec file write error\n");
149 ad_ring_read_plus_sec();
156 PDEBUG("ProcRec: 1sec file write.\n");
164 if (ad_ring_num_get_high() >= HIGH_FLUSH_NUM) {
166 d = ad_ring_get(ad_ring_read_get_high());
168 high_file_open(&fp, d);
171 while(ad_ring_num_get_high() > 0) {
173 d = ad_ring_get(ad_ring_read_get_high());
175 #ifdef DEBUG_FILE_MIN
176 // デバッグ用 ?分ごとファイル切り替え
177 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_high == 0) && (d->t.tm_min != hightm.tm_min)) {
179 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
180 || d->t.tm_hour != high_tm.tm_hour) {
184 if (fp != NULL) high_file_close(fp);
186 if (high_file_open(&fp, d)) {
187 PDEBUG("REC: FG file change ERROR\n");
188 syslog(LOG_INFO, "REC: HIGH file change ERROR\n");
190 PDEBUG("REC: FG file change OK\n");
191 syslog(LOG_INFO, "REC: HIGH file change OK\n");
195 high_make_rec_data(d, buf);
196 // ファイルに1データ書き込み Open/Closeなし
197 if (high_file_out(fp, buf, HIGH_WRITE_LEN)) {
200 ad_ring_clear_high();
204 PDEBUG("ProcRec: HIGH file write err\n");
205 syslog(LOG_INFO, "REC: HIGH file write error\n");
209 ad_ring_read_plus_high();
216 PDEBUG("ProcRec: HIGH file write.\n");
222 void* thread_rec(void* pParam)
229 sts_set(ProcTimeFix());
233 sts_set(ProcRecInit());
241 // sts_set(ProcRecOff());
245 // sts_set(ProcErr());