OSDN Git Service

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