OSDN Git Service

記録パス設定 記録CH設定 ファイル書込タイミング
[scilog/scilog.git] / thread_disp.c
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <syslog.h>
4
5 #include "ad_ring.h"
6 #include "lcd.h"
7 #include "debug_print.h"
8 #include "conf.h"
9
10 /*
11
12 */
13 static void scr_disp_time(AdData *d)
14 {
15         int     iLeft, iY;
16         char    buf[128];
17         struct tm *t;
18         
19         t = &(d->t);
20         iLeft = 0;
21         iY = 0;
22         /*      Time */
23         lcd_pos(iLeft, iY++);
24         sprintf(buf, "%02d/%02d/%02d %02d:%02d:%02d %02X",
25                 t->tm_year % 100, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec,
26                 d->gps.valid);
27         lcd_print(buf);
28 }
29 /*
30
31 */
32 static void scr_disp_ad(AdData *d)
33 {
34         int     iLeft, iY;
35         char    buf[128];
36         int     ch = 0;
37         
38         iLeft = 0;
39         iY = 1;
40         for(ch = 0; ch < 3; ch++) {
41                 sprintf(buf, "%d% 8d", ch+1, d->data1sec[ch]);
42                 lcd_pos(iLeft, iY++);
43                 lcd_print(buf);
44         }
45         iLeft = 10;
46         iY = 1;
47         for(ch = 3; ch < 6; ch++) {
48                 sprintf(buf, "%d% 8d", ch+1, d->data1sec[ch]);
49                 lcd_pos(iLeft, iY++);
50                 lcd_print(buf);
51         }
52 }
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 }
100
101 void* thread_disp(void* pParam)
102 {
103         int     i;
104         AdData *d;
105
106         i = ad_ring_latest_get();
107 //      scr_init();
108         lcd_clear();
109         while(1) {
110                 // FG表示
111                 if (i != ad_ring_latest_get()) {
112                         i = ad_ring_latest_get();
113                         // データ取得
114                         d = ad_ring_get(i);
115                         // LCDリセット対策
116                         if (d->t.tm_sec == 5) {
117                                 lcd_init();
118                         }
119                         // 時刻表示
120                         scr_disp_time(d);
121                         // AD表示
122                         scr_disp_ad(d);
123                         // 1分に1回
124                         if (d->t.tm_sec == 10) {
125                                 // システム時刻設定する
126                                 if (conf_linux_time_set_get()) {
127                                         // GPS Validチェック, tacc < 1000nsec
128                                         if (((d->gps.valid & 0x07) == 0x07) && (d->gps.tacc < 1000)) {
129                                                 systime_set(&(d->t));
130                                                 PDEBUGF("SET linux system time\n");
131                                         }
132                                 }
133                         }
134                 }
135                 usleep(100*1000);
136         }
137 }