altosui: Add config and pyro tabs to graph widget
[fw/altos] / src / stmf0 / ao_beep_stm.c
index 84ccd93e9cca27578be67ad13ba4d0b4ef57e345..751e611aae3a45e5150cce85af5dc387ada5ebbf 100644 (file)
 #define BEEPER_TIMER   1
 #endif
 
+#ifndef BEEPER_AFR
+#define BEEPER_AFR     STM_AFR_AF2
+#endif
+
 #if BEEPER_TIMER == 1
 #define timer stm_tim1
 #define STM_RCC_TIMER STM_RCC_APB2ENR_TIM1EN
@@ -54,7 +58,10 @@ disable(void)
 #if BEEPER_TIMER == 1
        timer.bdtr = 0;
 #endif
-       stm_rcc_enr &= ~(1 << STM_RCC_TIMER);
+       stm_rcc_enr &= ~(1UL << STM_RCC_TIMER);
+
+       /* Disconnect the timer from the pin */
+       stm_afr_set(BEEPER_PORT, BEEPER_PIN, STM_AFR_NONE);
 }
 
 void
@@ -361,12 +368,15 @@ ao_beep(uint8_t beep)
 
                /* Update the values */
                timer.egr = (1 << STM_TIM23_EGR_UG);
+
+               /* Hook the timer up to the beeper pin */
+               stm_afr_set(BEEPER_PORT, BEEPER_PIN, BEEPER_AFR);
 #endif
        }
 }
 
 void
-ao_beep_for(uint8_t beep, uint16_t ticks) __reentrant
+ao_beep_for(uint8_t beep, AO_TICK_TYPE ticks) 
 {
        ao_beep(beep);
        ao_delay(ticks);
@@ -376,9 +386,8 @@ ao_beep_for(uint8_t beep, uint16_t ticks) __reentrant
 void
 ao_beep_init(void)
 {
-       ao_enable_port(BEEPER_PORT);
-       stm_afr_set(BEEPER_PORT, BEEPER_PIN, STM_AFR_AF2);
+       ao_enable_output(BEEPER_PORT, BEEPER_PIN, 0);
 
        /* Leave the timer off until requested */
-       stm_rcc_enr &= ~(1 << STM_RCC_TIMER);
+       stm_rcc_enr &= ~(1UL << STM_RCC_TIMER);
 }