Dispatch console driver.

main.cpp

Committer:
Jasper
Date:
2011-04-14
Revision:
0:8c8623cc3eb2

File content as of revision 0:8c8623cc3eb2:

#include "mbed.h"

DigitalOut green(p22);
DigitalOut red(p21);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

#define      CH7 0x00000001
#define KEY_HASH 0x00000002
#define      CH6 0x00000004
#define      CH5 0x00000008
#define      CH4 0x00000010
#define      CH3 0x00000020
#define      CH2 0x00000040
#define      CH1 0x00000080
#define     TAPE 0x00000100
#define   B_CAST 0x00000200
#define     CONN 0x00000400
#define      T_T 0x00000800
#define      MON 0x00001000
#define      SEL 0x00002000
#define       LS 0x00004000
#define      TEL 0x00008000
#define    KEY_5 0x00010000
#define    KEY_4 0x00020000
#define    KEY_3 0x00040000
#define    KEY_2 0x00080000
#define    KEY_1 0x00100000
#define      BRB 0x00200000
#define     FUNC 0x00400000
#define    CTCSS 0x00800000
#define    KEY_6 0x01000000
#define    KEY_0 0x02000000
#define KEY_STAR 0x04000000
#define    KEY_9 0x08000000
#define    KEY_8 0x10000000
#define    KEY_7 0x20000000


DigitalOut buttonspl(p20);
DigitalOut ledclock(p19);
DigitalOut leddata(p18);
DigitalOut ledstrobe(p17);
DigitalIn  buttonsdata(p16);

void blues(int ledc)
{
        led1 = led2 = led3 = led4 = 0;
        switch (ledc) {
            case 0:
                led1 = 1;
                break;
            case 1:
                led2 = 1;
                break;
            case 2:
                led3 = 1;
                break;
            case 3:
                led4 = 1;
                break;
            case 4:
                led3 = 1;
                break;
            case 5:
                led2 = 1;
                break;
        }
}

void switchled(int led) {
    int i;
    
    for (i = 0; i < 32 ; i++) {
        ledclock = 0;
        if (i == led)
            leddata = 0;
        else
            leddata = 1;
        ledclock = 1;
    }
}

void button_test(uint32_t buttons) {
        printf("keys down: ");
        if (buttons & CH7)      printf("CH7 ");
        if (buttons & KEY_HASH)         printf("KEY_HASH ");
        if (buttons & CH6)      printf("CH6 ");
        if (buttons & CH5)      printf("CH5 ");
        if (buttons & CH4)      printf("CH4 ");
        if (buttons & CH3)      printf("CH3 ");
        if (buttons & CH2)      printf("CH2 ");
        if (buttons & CH1)      printf("CH1 ");
        if (buttons & TAPE)     printf("TAPE ");
        if (buttons & B_CAST)   printf("B_CAST ");
        if (buttons & CONN)     printf("CONN ");
        if (buttons & T_T)      printf("T_T ");
        if (buttons & MON)      printf("MON ");
        if (buttons & SEL)      printf("SEL ");
        if (buttons & LS)       printf("LS ");
        if (buttons & TEL)      printf("TEL ");
        if (buttons & KEY_5)    printf("KEY_5 ");
        if (buttons & KEY_4)    printf("KEY_4 ");
        if (buttons & KEY_3)    printf("KEY_3 ");
        if (buttons & KEY_2)    printf("KEY_2 ");
        if (buttons & KEY_1)    printf("KEY_1 ");
        if (buttons & BRB)      printf("BRB ");
        if (buttons & FUNC)     printf("FUNC ");
        if (buttons & CTCSS)    printf("CTCSS ");
        if (buttons & KEY_6)    printf("KEY_6 ");
        if (buttons & KEY_0)    printf("KEY_0 ");
        if (buttons & KEY_STAR)         printf("KEY_STAR ");
        if (buttons & KEY_9)    printf("KEY_9 ");
        if (buttons & KEY_8)    printf("KEY_8 ");
        if (buttons & KEY_7)    printf("KEY_7 ");
        printf("\r\n");
}

int boardstatus(uint32_t leds)
{
    uint32_t buttons = 0;
    int i, bbit;
    
    buttonspl = 1;
    wait_us(20);
    buttonspl = 0;
    
    ledstrobe = 1;
    
    for (i = 0; i < 32 ; i++) {
        ledclock = 1;
        if (leds & (1 << i))
            leddata = 0;
        else
            leddata = 1;
        ledclock = 0;
        bbit = buttonsdata;
        buttons |= bbit << i;
    }

    ledstrobe = 0;

    return buttons;
}

int main() {
    green = 1; red = 0;
    int count = 0;
    int buttons, obuttons;
    uint32_t bleds;
    
    ledclock = 0;
    bleds = 0;
    
    buttons = obuttons = 0;

    printf("Hello\r\n");
    
    while(1) {
        if ((count % 10) == 0)
            green = !green;

        if ((count % 5) == 0)
            red = !red;

        buttons = boardstatus(bleds);

        if (buttons != obuttons) {
            button_test(buttons);

#define ISPRESSED(x) (buttons & x)
#define WASPRESSED(x) (!(buttons &x ) && (obuttons & x))

            if (ISPRESSED(CH1)) {bleds |= 0xf;}
            if (ISPRESSED(CH2)) {bleds |= 0xf0;}
            if (ISPRESSED(CH3)) {bleds |= 0xf00;}
            if (ISPRESSED(CH4)) {bleds |= 0xf000;}
            if (ISPRESSED(CH5)) {bleds |= (uint32_t)0xf << 28;}
            if (ISPRESSED(CH6)) {bleds |= (uint32_t)0xf << 24;}
            if (ISPRESSED(CH7)) {bleds |= 0xf << 20;}

            if (WASPRESSED(CH1)) {bleds &= ~0xf;}
            if (WASPRESSED(CH2)) {bleds &= ~0xf0;}
            if (WASPRESSED(CH3)) {bleds &= ~0xf00;}
            if (WASPRESSED(CH4)) {bleds &= ~0xf000;}
            if (WASPRESSED(CH5)) {bleds &= ~((uint32_t)0xf << 28);}
            if (WASPRESSED(CH6)) {bleds &= ~((uint32_t)0xf << 24);}
            if (WASPRESSED(CH7)) {bleds &= ~(0xf << 20);}

            if (ISPRESSED(BRB)) {bleds = 0;}
            obuttons = buttons;
        }
        
        if (count & 1) {
            bleds |= 1 << 16;
            bleds &= ~(1 << 17);
        } else {
            bleds |= 1 << 17;
            bleds &= ~(1 << 16);
        }
        
        count++;
        wait(0.1);
    }
}