Commit | Line | Data |
---|---|---|
3bacb654 IS |
1 | #include <stdlib.h> |
2 | #include <fcntl.h> | |
3 | #include <signal.h> | |
4 | #include <unistd.h> | |
5 | #include <string.h> | |
6 | #include <stdio.h> | |
7 | #include <stdlib.h> | |
8 | #include <time.h> | |
9 | ||
10 | #include <sys/types.h> | |
11 | #include <sys/gpio.h> | |
12 | #include <sys/ioctl.h> | |
13 | ||
14 | #include "pins.h" | |
15 | ||
16 | #define UP(N) set_pin(N, 1) | |
17 | #define DOWN(N) set_pin(N, 0) | |
18 | ||
19 | #define HI(N) set(N, 1) | |
20 | #define LO(N) set(N, 0) | |
21 | ||
2b25fa21 IS |
22 | void test_7seg(); |
23 | ||
a315fde8 | 24 | void kd2() { |
2b25fa21 | 25 | usleep(5000); |
a315fde8 IS |
26 | } |
27 | ||
28 | void kdh() { | |
2b25fa21 | 29 | usleep(2500); |
a315fde8 IS |
30 | } |
31 | ||
32 | void kd1() { | |
33 | usleep(1); | |
34 | } | |
35 | ||
2b25fa21 IS |
36 | uint8_t sample(char *name) { |
37 | struct gpio_pin_op op; | |
38 | struct pin2dev *p = pin(name); | |
39 | int fd = num2fd(p->dev), t; | |
40 | ||
41 | strlcpy(op.gp_name, name, GPIOPINMAXNAME); | |
42 | ||
43 | t = ioctl(fd, GPIOPINREAD, &op); | |
44 | ||
45 | // printf("read %d, err: %d\n", op.gp_value, t); | |
46 | ||
47 | return op.gp_value; | |
48 | } | |
49 | ||
a315fde8 IS |
50 | void test_pins() { |
51 | for(;;) { | |
52 | HI("clk"); | |
53 | HI("clkinh"); | |
54 | LO("shld"); | |
55 | HI("clr"); | |
56 | kd1(); | |
57 | LO("clk"); | |
58 | LO("clkinh"); | |
59 | LO("shld"); | |
60 | LO("clr"); | |
61 | kd1(); | |
62 | } | |
63 | } | |
64 | ||
65 | /* call when clk is hi */ | |
66 | void tick(int n) { | |
67 | int i = 0; | |
68 | ||
69 | for(; i < n; i++) { | |
70 | LO("clk"); | |
71 | kd2(); | |
72 | HI("clk"); | |
73 | kd2(); | |
74 | } | |
2b25fa21 | 75 | sample("srq1"); |
a315fde8 IS |
76 | } |
77 | ||
78 | void clear() { | |
79 | HI("clk"); | |
80 | LO("clkinh"); | |
81 | kdh(); | |
82 | LO("clr"); | |
83 | kdh(); | |
84 | LO("clk"); | |
85 | kdh(); | |
86 | HI("clr"); | |
87 | kdh(); | |
88 | HI("clk"); | |
89 | kd2(); | |
90 | } | |
91 | ||
2b25fa21 IS |
92 | uint8_t sample_byte(char *name) { |
93 | uint8_t ret = 0; | |
94 | int i = 8; | |
95 | ||
96 | for(; i > 0; i--) { | |
97 | ret |= (sample(name) << i); | |
98 | kd2(); | |
99 | LO("clk"); | |
100 | kd2(); | |
101 | HI("clk"); | |
102 | } | |
103 | ||
104 | return ret; | |
105 | } | |
106 | ||
107 | void sample_bytes() { | |
108 | uint8_t ret[6]; | |
109 | int i = 8, j = 0; | |
110 | char *s; | |
111 | ||
112 | s = calloc(10, 1); | |
113 | memset(&ret[0], 0, 6); | |
114 | ||
115 | for(; i > 0; i--) { | |
116 | for(j = 0; j < 6; j++) { | |
117 | sprintf(s, "srq%d", j + 1); | |
118 | ret[j] |= sample(s); | |
119 | } | |
120 | kd2(); | |
121 | LO("clk"); | |
122 | kd2(); | |
123 | HI("clk"); | |
124 | } | |
125 | ||
126 | for(i = 0; i < 6; i++) | |
127 | printf("SRQ%d: %02x\n", i + 1, ret[i]); | |
128 | ||
129 | printf("\n\n\n"); | |
130 | } | |
131 | ||
3bacb654 | 132 | int main(int argc, char *argv[]) { |
a315fde8 | 133 | |
2b25fa21 IS |
134 | uint8_t b; |
135 | ||
a315fde8 IS |
136 | signal(SIGINT, inth); |
137 | ||
3bacb654 | 138 | pins_init(); |
2b25fa21 | 139 | config_pins(); |
3bacb654 IS |
140 | pincnt(); |
141 | ||
2b25fa21 IS |
142 | pcfg(1, 7, -1, INPUT | PULLDOWN, "srq1"); |
143 | pcfg(1, 3, -1, INPUT | PULLDOWN, "srq2"); | |
144 | pcfg(1, 12, -1, INPUT | PULLDOWN, "srq3"); | |
145 | pcfg(0, 26, -1, INPUT | PULLDOWN, "srq4"); | |
146 | pcfg(1, 14, -1, INPUT | PULLDOWN, "srq5"); | |
147 | pcfg(2, 1, -1, INPUT | PULLDOWN, "srq6"); | |
3bacb654 IS |
148 | pcfg(1, 13, 0, OUTPUT, "clk"); |
149 | pcfg(1, 15, 0, OUTPUT, "shld"); | |
150 | pcfg(0, 27, 0, OUTPUT, "clr"); | |
2b25fa21 IS |
151 | pcfg(2, 2, 0, OUTPUT, "clkinh"); |
152 | ||
153 | /* 7 seg */ | |
154 | pcfg(2, 10, 0, OUTPUT, "ss-rst"); | |
155 | pcfg(2, 12, 0, OUTPUT, "ss-clk"); | |
156 | // test_7seg(); | |
157 | ||
158 | start(); | |
159 | byte(0x8f); | |
160 | stop(); | |
3bacb654 | 161 | |
a315fde8 IS |
162 | LO("clk"); |
163 | HI("clkinh"); | |
164 | HI("clr"); | |
6e5408c0 | 165 | HI("shld"); |
a315fde8 IS |
166 | |
167 | sleep(1); | |
168 | for(;;){ | |
169 | LO("clk"); | |
170 | HI("clkinh"); | |
171 | HI("clr"); | |
6e5408c0 | 172 | HI("shld"); |
a315fde8 IS |
173 | kd2(); |
174 | kd2(); | |
175 | clear(); | |
176 | ||
a315fde8 IS |
177 | LO("clk"); |
178 | LO("shld"); | |
179 | kd2(); | |
180 | HI("clk"); | |
181 | kdh(); | |
182 | HI("clkinh"); | |
183 | kdh(); | |
184 | LO("clk"); | |
185 | ||
6e5408c0 | 186 | HI("shld"); |
a315fde8 IS |
187 | kdh(); |
188 | kdh(); | |
189 | HI("clk"); | |
190 | kd2(); | |
a315fde8 IS |
191 | LO("clk"); |
192 | LO("clkinh"); | |
193 | kd2(); | |
194 | HI("clk"); | |
2b25fa21 IS |
195 | |
196 | b = sample_byte("srq1"); | |
197 | printf("TEST: 0x%02x\n", b); | |
198 | // sample_bytes(); | |
199 | ||
a315fde8 | 200 | kd2(); |
2b25fa21 IS |
201 | // tick(16); |
202 | // tick(7); | |
203 | } | |
a315fde8 | 204 | } |
2b25fa21 IS |
205 | |
206 | void test_7seg() { | |
207 | ||
208 | HI("ss-rst"); | |
209 | sleep(1); | |
210 | LO("ss-rst"); | |
211 | ||
212 | for(;;) { | |
213 | HI("ss-clk"); | |
214 | usleep(50000); | |
215 | LO("ss-clk"); | |
216 | usleep(50000); | |
217 | } | |
218 | ||
3bacb654 | 219 | } |