]> www.average.org Git - pulsecounter.git/blob - msp430/Pulsecounter-Prog.c
clear interrupt status + cleanup
[pulsecounter.git] / msp430 / Pulsecounter-Prog.c
1 #include "Pulsecounter.h"
2 #include "Hal.h"
3
4 static void settleHandler(uint8_t id);
5 static void jitterHandler(uint8_t id, uint32_t count);
6 static int32_t cold = 0;
7 static int32_t hot  = 0;
8 static int32_t coldJ = 0;
9 static int32_t hotJ  = 0;
10 static bool connected = false;
11
12 void main() {
13     Hal_init();
14     Hal_gpioEnable(settleHandler, jitterHandler);
15     Pulsecounter_setDeviceName("PULS-CNTR");
16     Pulsecounter_start();
17     Hal_idleLoop();
18 }
19
20 static void blink(uint8_t which, uint8_t count) {
21     uint8_t i;
22     for (i = 0; i < count; i++) {
23         if (i) Hal_delay(50);
24         if (which & 1) Hal_greenLedOn();
25         if (which & 2) Hal_redLedOn();
26         Hal_delay(50);
27         if (which & 1) Hal_greenLedOff();
28         if (which & 2) Hal_redLedOff();
29     }
30 }
31
32 static void settleHandler(uint8_t id) {
33     switch (id) {
34     case 0:
35         /* Pulsecounter_accept(true); */
36         if (connected) {
37             Pulsecounter_coldTick_indicate();
38             Hal_delay(100);
39             Pulsecounter_hotTick_indicate();
40         }
41         blink(3, 2);
42         break;
43     case 1:
44         cold++;
45         if (connected)
46             Pulsecounter_coldTick_indicate();
47         blink(1, 2);
48         break;
49     case 2:
50         hot++;
51         if (connected)
52             Pulsecounter_hotTick_indicate();
53         blink(2, 2);
54         break;
55     default:
56         blink(3, 15);
57     }
58 }
59
60 static void jitterHandler(uint8_t id, uint32_t count) {
61     switch (id) {
62     case 0:
63         blink(3, count);
64         break;
65     case 1:
66         coldJ = count;
67         if (connected)
68             Pulsecounter_coldJitter_indicate();
69         blink(1, 1);
70         break;
71     case 2:
72         hotJ = count;
73         if (connected)
74             Pulsecounter_hotJitter_indicate();
75         blink(2, 1);
76         break;
77     default:
78         blink(3, 13);
79     }
80 }
81
82 /* -------- SCHEMA CALLBACKS -------- */
83
84 void Pulsecounter_connectHandler(void) {
85     connected = true;
86     blink(1, 5);
87 }
88
89 void Pulsecounter_disconnectHandler(void) {
90     connected = false;
91     blink(2, 5);
92 }
93
94 void Pulsecounter_coldTick_fetch(Pulsecounter_coldTick_t* const output) {
95     *output = cold;
96 }
97
98 void Pulsecounter_hotTick_fetch(Pulsecounter_hotTick_t* const output) {
99     *output = hot;
100 }
101
102 void Pulsecounter_coldJitter_fetch(Pulsecounter_coldJitter_t* output) {
103     *output = coldJ;
104 }
105
106 void Pulsecounter_hotJitter_fetch(Pulsecounter_hotJitter_t* output) {
107     *output = hotJ;
108 }