X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=msp430%2FPulsecounter-Prog.c;fp=msp430%2FPulsecounter-Prog.c;h=ced5632fa253abca6f0cf3b09e1e998b960bbc87;hp=0000000000000000000000000000000000000000;hb=02d2dc9e46149beb63a3dac83a9346232e2626da;hpb=a95f4d9f58554e4d34141964212b8f5b8b10d69e diff --git a/msp430/Pulsecounter-Prog.c b/msp430/Pulsecounter-Prog.c new file mode 100644 index 0000000..ced5632 --- /dev/null +++ b/msp430/Pulsecounter-Prog.c @@ -0,0 +1,142 @@ +#include "Pulsecounter.h" +#include "Hal.h" + +static void gpioHandler(uint8_t id); +static void tickHandler(void); +static int32_t cold = 0; +static int32_t hot = 0; +static bool connected = false; +static bool updatable = false; + +void main() { + Hal_init(); + Hal_gpioEnable(gpioHandler); + Pulsecounter_setDeviceName("PULS-CNTR"); + Pulsecounter_start(); + Hal_idleLoop(); +} + +static void gpioHandler(uint8_t id) { + uint8_t i; + + switch (id) { + case 0: + /* Pulsecounter_accept(true); */ + updatable = true; + if (connected) { + Pulsecounter_coldTick_indicate(); + Hal_delay(100); + Pulsecounter_hotTick_indicate(); + } + Hal_greenLedOn(); + Hal_redLedOn(); + Hal_delay(10); + Hal_greenLedOff(); + Hal_redLedOff(); + Hal_tickStart(15000, tickHandler); + break; + case 1: + cold++; + if (connected) + Pulsecounter_coldTick_indicate(); + Hal_greenLedOn(); + Hal_delay(10); + Hal_greenLedOff(); + break; + case 2: + hot++; + if (connected) + Pulsecounter_hotTick_indicate(); + Hal_redLedOn(); + Hal_delay(10); + Hal_redLedOff(); + break; + default: + for (i = 0; i < 5; i++) { + Hal_greenLedOn(); + Hal_redLedOn(); + Hal_delay(10); + Hal_greenLedOff(); + Hal_redLedOff(); + Hal_delay(10); + } + } +} + +static void tickHandler(void) { + uint8_t i; + + Hal_tickStop(); + if (connected) + return; + for (i = 0; i < 3; i++) { + Hal_greenLedOn(); + Hal_delay(50); + Hal_redLedOn(); + Hal_delay(50); + Hal_redLedOff(); + Hal_delay(50); + Hal_greenLedOff(); + } + updatable = false; + /* Pulsecounter_accept(false); */ +} + +/* -------- SCHEMA CALLBACKS -------- */ + +void Pulsecounter_connectHandler(void) { + connected = true; + Hal_tickStop(); + Hal_connected(); + Hal_redLedOn(); + Hal_delay(100); + Hal_redLedOff(); + Hal_greenLedOn(); + Hal_delay(100); + Hal_greenLedOff(); +} + +void Pulsecounter_disconnectHandler(void) { + connected = false; + updatable = false; + Hal_greenLedOn(); + Hal_delay(100); + Hal_greenLedOff(); + Hal_redLedOn(); + Hal_delay(100); + Hal_redLedOff(); + /* Hal_tickStart(15000, tickHandler); */ + Hal_disconnected(); +} + +void Pulsecounter_coldTick_fetch(Pulsecounter_coldTick_t* const output) { + *output = cold; +} + +void Pulsecounter_hotTick_fetch(Pulsecounter_hotTick_t* const output) { + *output = hot; +} + +void Pulsecounter_coldSet_store(Pulsecounter_coldSet_t* const input) { + Hal_greenLedOn(); + Hal_delay(100); + Hal_greenLedOff(); + Hal_delay(100); + Hal_greenLedOn(); + Hal_delay(100); + Hal_greenLedOff(); + // if (updatable) + cold = *input; +} + +void Pulsecounter_hotSet_store(Pulsecounter_hotSet_t* const input) { + Hal_redLedOn(); + Hal_delay(100); + Hal_redLedOff(); + Hal_delay(100); + Hal_redLedOn(); + Hal_delay(100); + Hal_redLedOff(); + // if (updatable) + hot = *input; +}