include/switch.h
author Tero Marttila <terom@paivola.fi>
Wed, 08 Oct 2014 23:20:34 +0300
changeset 11 a383e22204f2
parent 8 61eba9d55764
permissions -rw-r--r--
adxl345: control/data registers read/write
8
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#ifndef QMSK_SWITCH_H
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
#define QMSK_SWITCH_H
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
#include "stdlib.h"
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
extern byte switch_mask;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
/*
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
 * Setup switch input triggering on SWITCH_DDR/PORT/PIN using SWITCH_PCMSK/PCIE/PCIF interrupts.
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
 */
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
void switch_init (void)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    switch_mask = SWITCH_MASK;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
    // input mode
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    byte bit = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    for (byte i = 0; i < 8; i++) {
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
        if (SWITCH_MASK & bit) {
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
            cbi(SWITCH_DDR, i);
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
            // pull-up
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
            sbi(SWITCH_PORT, i);
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
        }
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
        bit <<= 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
    }
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
    // interrupt mask for port
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
    *SWITCH_PCMSK = SWITCH_MASK;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    // enable interrupts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    sbi(&PCICR, SWITCH_PCIE);
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
/*
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
 * Update switch state if changed.
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
 *
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
 * Returns 1 if changed, 0 if no changes.
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
 *
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
 * TODO: debouncing
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
 */
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
byte switch_read (byte *sp);
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
#endif