include/switch.h
author Tero Marttila <terom@paivola.fi>
Thu, 25 Sep 2014 00:55:47 +0300
changeset 8 61eba9d55764
permissions -rw-r--r--
switch
#ifndef QMSK_SWITCH_H
#define QMSK_SWITCH_H

#include "stdlib.h"

extern byte switch_mask;

/*
 * Setup switch input triggering on SWITCH_DDR/PORT/PIN using SWITCH_PCMSK/PCIE/PCIF interrupts.
 */
void switch_init (void)
{
    switch_mask = SWITCH_MASK;

    // input mode
    byte bit = 1;

    for (byte i = 0; i < 8; i++) {
        if (SWITCH_MASK & bit) {
            cbi(SWITCH_DDR, i);

            // pull-up
            sbi(SWITCH_PORT, i);
        }

        bit <<= 1;
    }

    // interrupt mask for port
    *SWITCH_PCMSK = SWITCH_MASK;

    // enable interrupts
    sbi(&PCICR, SWITCH_PCIE);
}

/*
 * Update switch state if changed.
 *
 * Returns 1 if changed, 0 if no changes.
 *
 * TODO: debouncing
 */
byte switch_read (byte *sp);

#endif