#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