#include <unistd.h>
#include <string.h>
#include <stdio.h>
+#include <time.h>
#include <sys/types.h>
#include <sys/gpio.h>
#include <sys/ioctl.h>
+#include <sys/time.h>
#define UP(N) set_pin(N, 1)
#define DOWN(N) set_pin(N, 0)
#define DISP_7 0x8e
#define DISP_8 0x8f
-
volatile int g0, g1, g2;
+const uint8_t d2seg[] = {
+ 0x3F
+ , 0x06
+ , 0x5B
+ , 0x4F
+ , 0x66
+ , 0x6D
+ , 0x7D
+ , 0x07
+ , 0x7F
+ , 0x6F
+ , 0x77
+ , 0x7C
+ , 0x39
+ , 0x5E
+ , 0x79
+ , 0x71
+};
+
+uint8_t dig(uint8_t d) {
+ return d2seg[d];
+}
+
+/*void timer(long usec) {
+ sigset_t sigs;
+ int s;
+
+ sigemptyset(&sigs);
+ sigaddset(&sigs, SIGALRM);
+
+ ualarm(usec, 0);
+ sigwait(&sigs, &s);
+}*/
+
+/*void timer(long usec) {
+ struct timespec t;
+ t.tv_nsec = usec;
+ t.tv_sec = 0;
+
+ nanosleep(&t, NULL);
+}*/
+
void kd() {
+
+ asm("movs r0, #0");
+
+ for(int i = 0; i < 10; i++) {
+ asm("movs r0, #10\n\t"
+ "1: subs r0, r0, #1\n\t"
+ "bne 1b");
+ }
+
+/* volatile int t = 0;
+
+ while(t != 80000)
+ t++; */
/* struct timespec ts, rem;
ts.tv_sec = 0;
rem.tv_sec = 0;
rem.tv_nsec = 0;
- nanosleep(&ts, &rem);
- */
+ nanosleep(&ts, &rem); */
}
int name2dev(char *s) {
return g2;
else if (! strncmp(s, "clk", GPIOPINMAXNAME))
return g2;
+ else if (! strncmp(s, "ser2", GPIOPINMAXNAME))
+ return g1;
+ else if (! strncmp(s, "clk-sr", GPIOPINMAXNAME))
+ return g1;
+ else if (! strncmp(s, "shld", GPIOPINMAXNAME))
+ return g1;
+ else if (! strncmp(s, "clr", GPIOPINMAXNAME))
+ return g0;
+
+
else {
printf("no gpio pin w/ name %s, exiting..\n", s);
exit(2);
void config_pins() {
struct gpio_pin_set *ser, *oe, *rclk, *srclk, *srclr, *dio, *clk;
+ /* ??? XXX wtf */
+ system("gpioctl gpio2 6 set out clk");
+ system("gpioctl gpio2 8 set out dio");
+
ser = calloc(1, sizeof(struct gpio_pin_set));
oe = calloc(1, sizeof(struct gpio_pin_set));
rclk = calloc(1, sizeof(struct gpio_pin_set));
}
}
-