new stuff
[bort-panel.git] / seg.h
diff --git a/seg.h b/seg.h
index 0d6c8a6361c755af2f576fa83b17913910bbfa8d..d3c5679bc5aca98596a72fdbb13211e8e4f52c5e 100644 (file)
--- a/seg.h
+++ b/seg.h
@@ -4,10 +4,12 @@
 #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;
@@ -40,8 +96,7 @@ void kd() {
        rem.tv_sec = 0;
        rem.tv_nsec = 0;
 
-       nanosleep(&ts, &rem);
-       */
+       nanosleep(&ts, &rem); */
 }
 
 int name2dev(char *s) {
@@ -59,6 +114,16 @@ 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);
@@ -108,6 +173,10 @@ void set_pin(char *name, int state) {
 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));
@@ -227,4 +296,3 @@ void blink(int c, int ms) {
        }
 }
 
-