OSDN Git Service

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