X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=Hal%2FHal.c;h=b4944e2c79090a97dcba17ea049e04377d85a231;hp=91f635fc6610a7b808b61528e7f41d570a8b8187;hb=4868ec0934cb78bf2349296ec33401cf9ce4a953;hpb=a210dfa3087cdca2393e7a4f3611e654f4724b53 diff --git a/Hal/Hal.c b/Hal/Hal.c index 91f635f..b4944e2 100644 --- a/Hal/Hal.c +++ b/Hal/Hal.c @@ -10,18 +10,22 @@ /* -------- INTERNAL FEATURES -------- */ -#define LED_CONFIG() (P1DIR |= BIT6) -#define LED_ON() (P1OUT |= BIT6) -#define LED_OFF() (P1OUT &= ~BIT6) -#define LED_READ() (P1OUT & BIT6) -#define LED_TOGGLE() (P1OUT ^= BIT6) - -#define CONNECTED_LED_CONFIG() (P1DIR |= BIT0) -#define CONNECTED_LED_ON() (P1OUT |= BIT0) -#define CONNECTED_LED_OFF() (P1OUT &= ~BIT0) +#define GREEN_LED_CONFIG() (P1DIR |= BIT6) +#define GREEN_LED_ON() (P1OUT |= BIT6) +#define GREEN_LED_OFF() (P1OUT &= ~BIT6) +#define GREEN_LED_READ() (P1OUT & BIT6) +#define GREEN_LED_TOGGLE() (P1OUT ^= BIT6) + +#define RED_LED_CONFIG() (P1DIR |= BIT0) +#define RED_LED_ON() (P1OUT |= BIT0) +#define RED_LED_OFF() (P1OUT &= ~BIT0) +#define RED_LED_READ() (P1OUT & BIT0) +#define RED_LED_TOGGLE() (P1OUT ^= BIT0) #define BUTTON_CONFIG() (P1DIR &= ~BIT3, P1REN |= BIT3, P1OUT |= BIT3, P1IES |= BIT3); #define BUTTON_ENABLE() (P1IFG &= ~BIT3, P1IE |= BIT3) +#define BUTTON_DISABLE() (P1IE &= ~BIT3, P1IFG &= ~BIT3) +#define BUTTON_FIRED() (P1IFG & BIT3) #define BUTTON_PRESSED() (!(P1IN & BIT3)) #define BUTTON_DEBOUNCE_MSECS 100 @@ -82,16 +86,18 @@ #define WAKEUP() (__bic_SR_register_on_exit(LPM3_bits)) #endif -#define NUM_HANDLERS 3 +#define NUM_HANDLERS 5 #define BUTTON_HANDLER_ID 0 -#define TICK_HANDLER_ID 1 -#define DISPATCH_HANDLER_ID 2 +#define EVENT4_HANDLER_ID 1 +#define EVENT5_HANDLER_ID 2 +#define TICK_HANDLER_ID 3 +#define DISPATCH_HANDLER_ID 4 -static void buttonHandler(void); +static void buttonHandler(uint8_t id); static void postEvent(uint8_t handlerId); -static Hal_Handler appButtonHandler; +static void (*appButtonHandler)(void); static volatile uint16_t handlerEvents = 0; static uint16_t clockTick = 0; static Hal_Handler handlerTab[NUM_HANDLERS]; @@ -99,7 +105,7 @@ static Hal_Handler handlerTab[NUM_HANDLERS]; /* -------- APP-HAL INTERFACE -------- */ -void Hal_buttonEnable(Hal_Handler handler) { +void Hal_buttonEnable(void (*handler)(void)) { handlerTab[BUTTON_HANDLER_ID] = buttonHandler; appButtonHandler = handler; BUTTON_CONFIG(); @@ -108,7 +114,6 @@ void Hal_buttonEnable(Hal_Handler handler) { } void Hal_connected(void) { - CONNECTED_LED_ON(); } void Hal_debugOn(uint8_t line) { @@ -150,7 +155,6 @@ void Hal_delay(uint16_t msecs) { } void Hal_disconnected(void) { - CONNECTED_LED_OFF(); } void Hal_init(void) { @@ -169,10 +173,10 @@ void Hal_init(void) { /* setup LEDs */ - LED_CONFIG(); - LED_OFF(); - CONNECTED_LED_CONFIG(); - CONNECTED_LED_OFF(); + GREEN_LED_CONFIG(); + GREEN_LED_OFF(); + RED_LED_CONFIG(); + RED_LED_OFF(); /* setup debug pins */ @@ -224,7 +228,7 @@ void Hal_idleLoop(void) { uint8_t id; for (id = 0, mask = 0x1; id < NUM_HANDLERS; id++, mask <<= 1) { if ((events & mask) && handlerTab[id]) { - handlerTab[id](); + handlerTab[id](id); } } } @@ -234,20 +238,36 @@ void Hal_idleLoop(void) { } } -void Hal_ledOn(void) { - LED_ON(); +void Hal_greenLedOn(void) { + GREEN_LED_ON(); +} + +void Hal_greenLedOff(void) { + GREEN_LED_OFF(); +} + +bool Hal_greenLedRead(void) { + return GREEN_LED_READ(); +} + +void Hal_greenLedToggle(void) { + GREEN_LED_TOGGLE(); } -void Hal_ledOff(void) { - LED_OFF(); +void Hal_redLedOn(void) { + RED_LED_ON(); } -bool Hal_ledRead(void) { - return LED_READ(); +void Hal_redLedOff(void) { + RED_LED_OFF(); } -void Hal_ledToggle(void) { - LED_TOGGLE(); +bool Hal_redLedRead(void) { + return RED_LED_READ(); +} + +void Hal_redLedToggle(void) { + RED_LED_TOGGLE(); } void Hal_tickStart(uint16_t msecs, Hal_Handler handler) { @@ -257,6 +277,11 @@ void Hal_tickStart(uint16_t msecs, Hal_Handler handler) { TA1CCTL0 = CCIE; // Enable the CCR0 interrupt } +void Hal_tickStop(void) { + handlerTab[TICK_HANDLER_ID] = 0; + TA1CCR0 = 0; + TA1CCTL0 = 0; +} /* -------- SRT-HAL INTERFACE -------- */ @@ -303,11 +328,12 @@ void Em_Hal_watchOn(void) { /* -------- INTERNAL FUNCTIONS -------- */ -static void buttonHandler(void) { - Hal_delay(100); +static void buttonHandler(uint8_t id) { + Hal_delay(BUTTON_DEBOUNCE_MSECS); if (BUTTON_PRESSED() && appButtonHandler) { appButtonHandler(); } + BUTTON_ENABLE(); } static void postEvent(uint8_t handlerId) { @@ -325,8 +351,9 @@ static void postEvent(uint8_t handlerId) { #pragma vector=PORT1_VECTOR #endif INTERRUPT void buttonIsr(void) { - postEvent(BUTTON_HANDLER_ID); - BUTTON_ENABLE(); + if (BUTTON_FIRED()) + postEvent(BUTTON_HANDLER_ID); + BUTTON_DISABLE(); WAKEUP(); }