示例#1
0
文件: kbd.c 项目: octachrome/piberry
void kbd_scan() {
    int b, i;
    for (b = 0; b < data.nbanks; b++) {
        int bank = data.banks[b];
        gpio_clear(bank);
        delay(100);

        for (i = 0; i < data.ninputs; i++) {
            int input = data.inputs[i];
            int key = b * data.ninputs + i;

            int byte = key / 32;
            int bit = key % 32;
            unsigned int state = data.keystates[byte] & (1 << bit);

            if (gpio_level(input) == 0) {
                if (!state) {
                    data.onevent(KEY_DOWN, key);
                    data.keystates[byte] |= (1 << bit);
                }
            } else {
                if (state) {
                    data.onevent(KEY_UP, key);
                    data.keystates[byte] &= ~(1 << bit);
                }
            }
        }

        gpio_set(bank);
    }
}
示例#2
0
void startc ( void )
{
    gpio_fsel(gpio47, GPIO_FN_OUTPUT);
    gpio_fsel(gpio23, GPIO_FN_OUTPUT);
    gpio_fsel(gpio24, GPIO_FN_INPUT);

    while(1)
    {
        gpio_set(gpio47);

        enum { HIGH = 1 };
        if (gpio_level(gpio24) == HIGH)
        {
            gpio_set(gpio23);
        }
        else
        {
            gpio_clear(gpio23);
        }

        for (volatile int busy=0; busy<0x400000; busy++);

        gpio_clear(gpio47);

        for (volatile int busy=0; busy<0x400000; busy++);
    }
}