include/switch.h
changeset 8 61eba9d55764
equal deleted inserted replaced
7:5c37ed521807 8:61eba9d55764
       
     1 #ifndef QMSK_SWITCH_H
       
     2 #define QMSK_SWITCH_H
       
     3 
       
     4 #include "stdlib.h"
       
     5 
       
     6 extern byte switch_mask;
       
     7 
       
     8 /*
       
     9  * Setup switch input triggering on SWITCH_DDR/PORT/PIN using SWITCH_PCMSK/PCIE/PCIF interrupts.
       
    10  */
       
    11 void switch_init (void)
       
    12 {
       
    13     switch_mask = SWITCH_MASK;
       
    14 
       
    15     // input mode
       
    16     byte bit = 1;
       
    17 
       
    18     for (byte i = 0; i < 8; i++) {
       
    19         if (SWITCH_MASK & bit) {
       
    20             cbi(SWITCH_DDR, i);
       
    21 
       
    22             // pull-up
       
    23             sbi(SWITCH_PORT, i);
       
    24         }
       
    25 
       
    26         bit <<= 1;
       
    27     }
       
    28 
       
    29     // interrupt mask for port
       
    30     *SWITCH_PCMSK = SWITCH_MASK;
       
    31 
       
    32     // enable interrupts
       
    33     sbi(&PCICR, SWITCH_PCIE);
       
    34 }
       
    35 
       
    36 /*
       
    37  * Update switch state if changed.
       
    38  *
       
    39  * Returns 1 if changed, 0 if no changes.
       
    40  *
       
    41  * TODO: debouncing
       
    42  */
       
    43 byte switch_read (byte *sp);
       
    44 
       
    45 #endif