• R/O
  • HTTP
  • SSH
  • HTTPS

scilog: Commit

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


Commit MetaInfo

Revisão70f1bfb7a0ad81c7b151d0f5171b4515c01acde2 (tree)
Hora2013-05-16 13:03:08
AutorNaoya Takamura <ntaka206@user...>
CommiterNaoya Takamura

Mensagem de Log

GPS時刻によるLinuxシステム時刻セット機能を追加
●時刻セットの条件
GPSのステータスが07で、時刻精度が1000nsec以下の場合に毎分10秒に時刻セットを行います。
1PPSのエッジに合わせて時刻セットをしているわけではないのでせいぜい±1秒程度の精度だと思って下さい。
●設定ファイル
この機能は設定ファイルでON/OFF出来ます。
設定ファイルに何も記述がない場合はデフォルトで時刻セットONになっています。
設定を追加する場合は、設定ファイル /etc/scilog.conf に以下の1行を追加して下さい。
linux_time_set = 1

Mudança Sumário

Diff

--- a/conf.c
+++ b/conf.c
@@ -54,6 +54,19 @@ pthread_mutex_unlock(&mutex_conf);
5454 return f;
5555 }
5656
57+/**** Linux時刻セット ***************************************************
58+*/
59+// 1=ON
60+static int linux_time_set;
61+void conf_linux_time_set_set(int val)
62+{
63+ linux_time_set = val;
64+}
65+int conf_linux_time_set_get(void)
66+{
67+ return linux_time_set;
68+}
69+
5770 //
5871 /**** 設定ファイル *******************************************
5972 */
@@ -147,6 +160,7 @@ int conf_read(void)
147160 char buf[256];
148161 // char buf2[256];
149162 int f;
163+ int val;
150164
151165 fp = fopen(CONF_FILE, "rt");
152166 if (fp == NULL) {
@@ -171,6 +185,11 @@ int conf_read(void)
171185 conf_gain_set(f);
172186 syslog(LOG_INFO, "gain=%d", conf_gain_get());
173187 }
188+ // Linux時刻セット
189+ if (sscanf(buf, "linux_time_set = %d", &val) == 1) {
190+ conf_linux_time_set_set(val);
191+ syslog(LOG_INFO, "linux_time_set=%d", conf_linux_time_set_get());
192+ }
174193 }
175194 fclose(fp);
176195 return 0;
--- a/conf.h
+++ b/conf.h
@@ -10,6 +10,9 @@ int conf_freq_get(void);
1010 void conf_gain_set(int f);
1111 int conf_gain_get(void);
1212
13+void conf_linux_time_set_set(int val);
14+int conf_linux_time_set_get(void);
15+
1316 int conf_read(void);
1417
1518 #endif
Binary files a/scilog and b/scilog differ
--- a/scilog.c
+++ b/scilog.c
@@ -47,6 +47,7 @@
4747 */
4848 #define CONF_FREQ_DEF 50
4949 #define CONF_GAIN_DEF SPI_CMD_GAIN_1P4
50+#define CONF_LINUX_TIME_SET_DEF 1 // OFF
5051
5152 //
5253 /**** signal ***********************************************************
@@ -99,6 +100,7 @@ int main (int argc, char *argv[])
99100 // デフォルト設定
100101 conf_freq_set(CONF_FREQ_DEF);
101102 conf_gain_set(CONF_GAIN_DEF);
103+ conf_linux_time_set_set(CONF_LINUX_TIME_SET_DEF);
102104 // 設定ファイル読み込み
103105 conf_read();
104106 PDEBUG("freq=%d\n", conf_freq_get());
--- a/thread_disp.c
+++ b/thread_disp.c
@@ -1,7 +1,11 @@
11 #include <stdio.h>
2+#include <unistd.h>
3+#include <syslog.h>
24
35 #include "ad_ring.h"
46 #include "lcd.h"
7+#include "debug_print.h"
8+#include "conf.h"
59
610 /*
711
@@ -46,6 +50,53 @@ static void scr_disp_ad(AdData *d)
4650 lcd_print(buf);
4751 }
4852 }
53+//
54+/**** システム時刻設定 ***************************************
55+*/
56+/*
57+ システムにGPS時刻設定する
58+ * UTのみ対応
59+
60+ tm_mon
61+ 1月からの通算月数、0 から 11 までの値。
62+ tm_year
63+ 1900 年からの通算年数。
64+
65+struct tm *gps
66+ GPSの時刻(UT or JST)
67+ tm_gmtoff(UTに対するローカルタイムオフセット 秒)を設定しておくこと
68+
69+*/
70+static void systime_set(struct tm *gps)
71+{
72+ struct tm time_tm;
73+ time_t t;
74+// long ofs;
75+
76+ time_tm = *gps;
77+ time_tm.tm_year = (gps->tm_year % 100) + 100;
78+// time_tm.tm_mon = gps->tm_mon - 1;
79+//syslog(LOG_INFO, "a tm_gmtoff=%d timezone=%d\n", time_tm.tm_gmtoff, timezone);
80+ // timegm()実行後にtm_gmtoffが変化してしまうので保存する
81+// ofs = time_tm.tm_gmtoff;
82+ t = timegm(&time_tm);
83+// t += ofs;
84+
85+ // tm_gmtoff(UTに対するローカルタイムオフセット 秒)を元にして計算する
86+// t = timelocal(&time_tm);
87+//syslog(LOG_INFO, "b tm_gmtoff=%d timezone=%d\n", time_tm.tm_gmtoff, timezone);
88+
89+ if (t == -1) {
90+ syslog(LOG_ERR, "systime_set(): mktime err\n");
91+ PDEBUGF("mktime err\n");
92+ return;
93+ }
94+
95+ if (stime(&t) != 0) {
96+ syslog(LOG_ERR, "systime_set(): stime err\n");
97+ PDEBUGF("stime err\n");
98+ }
99+}
49100
50101 void* thread_disp(void* pParam)
51102 {
@@ -65,6 +116,17 @@ void* thread_disp(void* pParam)
65116 scr_disp_time(d);
66117 // AD表示
67118 scr_disp_ad(d);
119+ // 1分に1回
120+ if (d->t.tm_sec == 10) {
121+ // システム時刻設定する
122+ if (conf_linux_time_set_get()) {
123+ // GPS Validチェック, tacc < 1000nsec
124+ if (((d->gps.valid & 0x07) == 0x07) && (d->gps.tacc < 1000)) {
125+ systime_set(&(d->t));
126+ PDEBUGF("SET linux system time\n");
127+ }
128+ }
129+ }
68130 }
69131 usleep(100*1000);
70132 }
Show on old repository browser