src/switch.c
author Tero Marttila <terom@paivola.fi>
Thu, 25 Sep 2014 00:55:47 +0300
changeset 8 61eba9d55764
permissions -rw-r--r--
switch
8
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#include "stdlib.h"
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
//#include "switch.h"
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
#include <avr/io.h>
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
#include <avr/interrupt.h>
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
byte switch_mask;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
byte switch_status;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
byte switch_state;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
ISR(PCINT0_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
    switch_state = PINB;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
ISR(PCINT1_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    switch_state = PINC;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
ISR(PCINT2_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    switch_state = PIND;
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
byte switch_read (byte *sp)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    if (!switch_status)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        return 0;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    switch_status = 0;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    *sp = ~switch_state & switch_mask;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    return 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
}