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);
43 // GPS Validチェック, tacc < 1000nsec
44 if (((d->gps.valid & 0x07) == 0x07) && (d->gps.tacc < 1000)) {
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];
95 if (i != ad_ring_latest_get()) {
96 i = ad_ring_latest_get();
99 if (d->t.tm_sec == 0) secw = 1;
100 if (d->t.tm_sec % HIGH_FLUSH_NUM == 0) highw = 1;
106 パケットバッファにデータたまった? or 書込タイミング?
108 if (ad_ring_num_get_sec() >= SEC_FLUSH_NUM || secw) {
110 d = ad_ring_get(ad_ring_read_get_sec());
112 sec_file_open(&fp, d);
115 while(ad_ring_num_get_sec() > 0) {
117 d = ad_ring_get(ad_ring_read_get_sec());
119 PDEBUG("%04d/%02d/%02d %02d:%02d:%02d.%09ld,%6lums,%6luns,%02X",
120 d->gps.year, d->gps.month, d->gps.day, d->gps.hour, d->gps.min, d->gps.sec, d->gps.nano,
121 d->gps.tow, d->gps.tacc, d->gps.valid);
123 for(ch = 0; ch < AD_CHNUM; ch++) {
124 PDEBUG(",%+7ld", d->data1sec[ch]);
130 #ifdef DEBUG_FILE_MIN
131 // デバッグ用 ?分ごとファイル切り替え
132 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_sec == 0) && (d->t.tm_min != sec_tm.tm_min)) {
134 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) {
138 if (fp != NULL) sec_file_close(fp);
140 if (sec_file_open(&fp, d)) {
141 PDEBUG("REC: FG file change ERROR\n");
142 syslog(LOG_INFO, "REC: FG file change ERROR\n");
144 PDEBUG("REC: FG file change OK\n");
145 syslog(LOG_INFO, "REC: FG file change OK\n");
149 sec_make_rec_data(d, buf);
150 // ファイルに1データ書き込み Open/Closeなし
151 if (sec_file_out(fp, buf, strlen(buf))) {
158 PDEBUG("ProcRec: 1sec file write err\n");
159 syslog(LOG_INFO, "REC: 1sec file write error\n");
163 ad_ring_read_plus_sec();
170 PDEBUG("ProcRec: 1sec file write.\n");
178 if (ad_ring_num_get_high() >= HIGH_FLUSH_NUM || highw) {
180 d = ad_ring_get(ad_ring_read_get_high());
182 high_file_open(&fp, d);
185 while(ad_ring_num_get_high() > 0) {
187 d = ad_ring_get(ad_ring_read_get_high());
189 #ifdef DEBUG_FILE_MIN
190 // デバッグ用 ?分ごとファイル切り替え
191 if ((d->t.tm_min % DEBUG_FILE_MIN_PERIOD) == 0 && (d->t.tm_high == 0) && (d->t.tm_min != hightm.tm_min)) {
193 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
194 || d->t.tm_hour != high_tm.tm_hour) {
198 if (fp != NULL) high_file_close(fp);
200 if (high_file_open(&fp, d)) {
201 PDEBUG("REC: FG file change ERROR\n");
202 syslog(LOG_INFO, "REC: HIGH file change ERROR\n");
204 PDEBUG("REC: FG file change OK\n");
205 syslog(LOG_INFO, "REC: HIGH file change OK\n");
209 high_make_rec_data(d, buf);
210 // ファイルに1データ書き込み Open/Closeなし
211 if (high_file_out(fp, buf, HIGH_WRITE_LEN)) {
214 ad_ring_clear_high();
218 PDEBUG("ProcRec: HIGH file write err\n");
219 syslog(LOG_INFO, "REC: HIGH file write error\n");
223 ad_ring_read_plus_high();
230 PDEBUG("ProcRec: HIGH file write.\n");
236 void* thread_rec(void* pParam)
243 sts_set(ProcTimeFix());
247 sts_set(ProcRecInit());
255 // sts_set(ProcRecOff());
259 // sts_set(ProcErr());