OSDN Git Service

8375928d2337b24452bdc362f27f518fbc070a3d
[scilog/scilog.git] / scilog.c
1 /*
2  * scilog.c
3  * sciLogger Logger Program
4  * NT System Design
5  * 
6  * Ver1.0.1
7  * conf_linux_time_set_XXX() add?
8  * thread_disp.cでGPS時刻をlinuxにset
9  * 
10  * Ver1.0.2
11  * 2015/09/22
12  * lcd.c i2clcd_init() i2cLCD基板のConfig変更 LCD自動初期化ON
13  *
14  * Ver1.0.3
15  * Kernel 3.18.18 対応
16  * i2cデバイス名変更
17  * spiデバイス名変更 ->/dev/spikead spikeadデバイス側で変更したため
18  * ad_ring.h AdDataのADデータ型をlong->int32_tに変更
19  *      data1sec[]
20  *      data[][]
21  *      avg[][]
22  * thread_rcv.c b3_to_long32() 返り値long->int32_tにした
23  * 
24  * ●コンパイル方法
25  * . environment-setup-cortexa8hf-vfp-neon-poky-linux-gnueabi
26  * make
27  * 
28  */
29 #include <stdio.h>
30 #include <string.h>
31 #include <time.h>
32 #include <math.h>
33 #include <sys/types.h>
34 #include <unistd.h>
35 #include <errno.h>
36 #include <stdarg.h>
37 //#include <getopt.h>
38 #include <stdlib.h>
39 #include <assert.h>
40 #include <signal.h>
41 #include <pthread.h>
42 #include <syslog.h>
43
44 #include <stdint.h>
45 #include <sys/ioctl.h>
46 #include <fcntl.h>
47 #include <linux/i2c-dev.h> /* for I2C_SLAVE */
48
49 #include <sys/stat.h>
50
51 #include "my_thread.h"
52 #include "spi.h"
53 #include "ad_ring.h"
54 #include "sts.h"
55 #include "thread_rec.h"
56 #include "conf.h"
57 #include "ad_file.h"
58 #include "lcd.h"
59
60 // debug_print.h内で#define   DEBUG_PRINTしているので
61 // リリース時は、debug_print.hでコメントする
62 #include "debug_print.h"
63
64 #define MES_PRINT
65 #include        "mes_print.h"
66
67 // ダミーデータを自分で発生するときに定義
68 //#define       DUMMY
69
70 #define VERSION "1.0.3"
71
72 #define DEV_SPI "/dev/spikead"
73
74 /**** 設定デフォルト値
75 */
76 #define CONF_FREQ_DEF   50
77 #define CONF_GAIN_DEF   SPI_CMD_GAIN_1P4
78 #define CONF_LINUX_TIME_SET_DEF 1       // ON
79
80 //
81 /**** signal ***********************************************************
82 */
83 void cleanup(void)
84 {
85         spi_close();
86 }
87 void sig_handler(int sig)
88 {
89         char    szBuf[128];
90         static int      busy = 0;
91
92         if (busy) return;
93         busy = 1;
94
95         sprintf(szBuf, "signal trap. signal=%d\n", sig);
96         PDEBUG("%s", szBuf);
97         fflush(stdout);
98         fflush(stderr);
99
100         cleanup();
101         exit(0);
102 }
103 //
104 /**** main
105 */
106 int main (int argc, char *argv[])
107 {
108         pthread_t       tid_rcv, tid_disp;
109 //      char    buf[512];
110         
111         signal(SIGINT, sig_handler);
112         signal(SIGQUIT, sig_handler);
113         signal(SIGKILL, sig_handler);
114         signal(SIGTERM, sig_handler);
115
116         lcd_init();
117         lcd_pos(0, 1);
118         lcd_print("sciLogger ");
119         lcd_print(VERSION);
120         lcd_pos(0, 3);
121
122         ad_ring_init();
123         sts_init();
124
125 //printf("%d\n", sizeof(UbloxNavTimeUtcRecType));
126 //printf("%d\n", sizeof(HighSampleRecType));
127 //goto END;
128
129         // デフォルト設定
130         conf_freq_set(CONF_FREQ_DEF);
131         conf_gain_set(CONF_GAIN_DEF);
132         conf_linux_time_set_set(CONF_LINUX_TIME_SET_DEF);
133         // 設定ファイル読み込み
134         conf_read();
135         PDEBUG("freq=%d\n", conf_freq_get());
136         PDEBUG("gain=%d\n", conf_gain_get());
137         PDEBUG("linux_time_set=%d\n", conf_linux_time_set_get());
138         lcd_print("*");
139
140         PDEBUG("sciLogger %s START\n", VERSION);
141         sleep(1);
142 //
143 /**** デバイスOPEN
144 */
145         if (spi_open(DEV_SPI) < 0) {
146                 perror("spi_open() ERROR!");
147                 goto END;
148         }
149         lcd_print("*");
150
151 //
152 /**** PGA設定
153 */
154         spi_cmd_send_gain(conf_gain_get());
155         lcd_print("*");
156 //
157 /**** スレッド生成
158 */
159         // SPI RCVと平均
160         if (pthread_create(&tid_rcv, NULL, thread_rcv, NULL) != 0) {
161                 perror("pthread_create(SPI RCV)");
162                 goto END;
163         } else {
164                 PDEBUG("SPI RCV thread create\n");
165         }
166         lcd_print("*");
167         // 表示
168         if (pthread_create(&tid_disp, NULL, thread_disp, NULL) != 0) {
169                 perror("pthread_create(DISP)");
170                 goto END;
171         } else {
172                 PDEBUG("DISP thread create\n");
173         }
174         lcd_print("*");
175
176 //
177 /**** メインループ 記録 ************************
178 */
179         // 記録スレッド
180         thread_rec(NULL);
181 END:
182         sig_handler(0);
183
184         return 0;
185 }