X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=Pulsecounter-Prog.c;h=317fb7c8a11e0701afeb58c0713e8b717ae47119;hp=1507b24fea482d97b2a56ddee915e754b90a8f79;hb=1bdd8a835a5eefe1fb6fe631d1de47e0967c5ef5;hpb=a210dfa3087cdca2393e7a4f3611e654f4724b53 diff --git a/Pulsecounter-Prog.c b/Pulsecounter-Prog.c index 1507b24..317fb7c 100644 --- a/Pulsecounter-Prog.c +++ b/Pulsecounter-Prog.c @@ -1,40 +1,127 @@ -#include "Pulsecounter.h" -#include "Hal.h" - -static void buttonHandler(void); - -void main() { - Hal_init(); - Hal_buttonEnable(buttonHandler); - Pulsecounter_start(); - Hal_idleLoop(); -} - -static void buttonHandler(void) { - Hal_ledOn(); - Hal_delay(500); - Hal_ledOff(); - Pulsecounter_event3_indicate(); -} - -/* -------- SCHEMA CALLBACKS -------- */ - -void Pulsecounter_connectHandler(void) { - Hal_connected(); -} - -void Pulsecounter_disconnectHandler(void) { - Hal_disconnected(); -} - -void Pulsecounter_event3_fetch(Pulsecounter_event3_t* const output) { - *output = 3; -} - -void Pulsecounter_event4_fetch(Pulsecounter_event4_t* const output) { - *output = 4; -} - -void Pulsecounter_event5_fetch(Pulsecounter_event5_t* const output) { - *output = 5; -} +#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(); + 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) { + if (updatable) + cold = *input; +} + +void Pulsecounter_hotSet_store(Pulsecounter_hotSet_t* const input) { + if (updatable) + hot = *input; +}