fuck meaningful commit messages
[bort-panel.git] / pins.c
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
22 void test_7seg();
23
24 void kd2() {
25 usleep(5000);
26 }
27
28 void kdh() {
29 usleep(2500);
30 }
31
32 void kd1() {
33 usleep(1);
34 }
35
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
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 }
75 sample("srq1");
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
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
132 int main(int argc, char *argv[]) {
133
134 uint8_t b;
135
136 signal(SIGINT, inth);
137
138 pins_init();
139 config_pins();
140 pincnt();
141
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");
148 pcfg(1, 13, 0, OUTPUT, "clk");
149 pcfg(1, 15, 0, OUTPUT, "shld");
150 pcfg(0, 27, 0, OUTPUT, "clr");
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();
161
162 LO("clk");
163 HI("clkinh");
164 HI("clr");
165 HI("shld");
166
167 sleep(1);
168 for(;;){
169 LO("clk");
170 HI("clkinh");
171 HI("clr");
172 HI("shld");
173 kd2();
174 kd2();
175 clear();
176
177 LO("clk");
178 LO("shld");
179 kd2();
180 HI("clk");
181 kdh();
182 HI("clkinh");
183 kdh();
184 LO("clk");
185
186 HI("shld");
187 kdh();
188 kdh();
189 HI("clk");
190 kd2();
191 LO("clk");
192 LO("clkinh");
193 kd2();
194 HI("clk");
195
196 b = sample_byte("srq1");
197 printf("TEST: 0x%02x\n", b);
198 // sample_bytes();
199
200 kd2();
201 // tick(16);
202 // tick(7);
203 }
204 }
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
219 }