OSDN Git Service

GPS valid=07にならなくても記録を開始してしまうバグ修正
[scilog/scilog.git] / spi.c
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <sys/ioctl.h>
4 //#include <termios.h>
5 #include <fcntl.h>
6 #include <string.h>
7
8 #include "spi.h"
9 #include "ad_ring.h"
10
11 static int      fd_spi = -1;
12
13 int spi_get_fd(void)
14 {
15         return fd_spi;
16 }
17 int spi_open(char *dev)
18 {
19         fd_spi = open(dev, O_RDWR);
20         return fd_spi;
21 }
22 /*
23         デバイスへのioctl
24 */
25 int spi_ioctl(int cmd, void *p)
26 {
27         return ioctl(fd_spi, cmd, p);
28 }
29
30 int spi_close(void)
31 {
32         return close(fd_spi);
33 }
34
35 // 送信データ長セット
36 void spi_tx_len_set(int len)
37 {
38         spi_ioctl(CMD_TX_LEN, &len);
39 }
40 // 同期シリアル受信データ取得
41 void spi_rx_get(char *p)
42 {
43         spi_ioctl(CMD_RX_GET, p);
44 }
45
46 // 同期シリアル送信データセット
47 void spi_tx_set(char *p)
48 {
49         spi_ioctl(CMD_TX_SET, p);
50 }
51 // リングバッファクリア
52 void spi_buf_clear(void)
53 {
54         spi_ioctl(CMD_BUF_CLEAR, NULL);
55 }
56
57 // リングバッファのデータ数get
58 int spi_dnum_get(void)
59 {
60         int     i = 0;
61         spi_ioctl(CMD_DNUM_GET, &i);
62         return i;
63 }
64 // SPIで実際に受信したデータ長を取得
65 int spi_rcvd_len_get(void)
66 {
67         int     i = 0;
68         spi_ioctl(CMD_RECEIVED_LEN_GET, &i);
69         return i;
70 }
71 // コマンド送信
72 void spi_cmd_send(char cmd_code, char *cmd_data, int data_len)
73 {
74         char    cmd[SPI_CMD_LEN];
75         
76         memset(cmd, 0, SPI_CMD_LEN);
77
78         cmd[SPI_CMD_OFS_HEAD] = SPI_HEAD_CHAR;
79         cmd[SPI_CMD_OFS_CMDCODE] = cmd_code;
80
81         // data
82         if (data_len > (SPI_CMD_LEN - SPI_CMD_OFS_CMDDATA)) {
83                 data_len = SPI_CMD_LEN - SPI_CMD_OFS_CMDDATA;
84         }
85         memcpy(&cmd[SPI_CMD_OFS_CMDDATA], cmd_data, data_len);
86
87         spi_tx_set(cmd);
88 }
89 // Gainコマンド送信
90 void spi_cmd_send_gain(int gain)
91 {
92         char    cmd[SPI_CMD_LEN];
93         int     i;
94         
95         memset(cmd, 0, SPI_CMD_LEN);
96
97         for(i = 0; i < AD_CHNUM; i++)
98                 cmd[i] = gain;
99         spi_cmd_send(SPI_CMDCODE_GAIN, cmd, AD_CHNUM);
100 }
101