X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fbuzzer.c;h=042d06cc76be47d8f27a054e0f813b38d5b05208;hb=HEAD;hp=a3e71d99a6697c0da6df9391aea3fb6f221de8ed;hpb=27c90e14b9a2600bc38486f046187a7e690b24fb;p=bertos.git diff --git a/drv/buzzer.c b/drv/buzzer.c deleted file mode 100755 index a3e71d99..00000000 --- a/drv/buzzer.c +++ /dev/null @@ -1,202 +0,0 @@ -/*! - * \file - * - * - * \version $Id$ - * - * \author Bernardo Innocenti - * - * \brief Buzzer driver - */ - -/* - * $Log$ - * Revision 1.6 2004/06/07 18:10:06 aleph - * Remove free pool of timers; use user-provided Timer structure instead - * - * Revision 1.5 2004/06/07 15:54:23 aleph - * Update to new event.h naming - * - * Revision 1.4 2004/06/06 16:09:22 bernie - * Reformat (from project_ks). - * - * Revision 1.3 2004/06/03 11:27:09 bernie - * Add dual-license information. - * - * Revision 1.2 2004/05/23 18:21:53 bernie - * Trim CVS logs and cleanup header info. - * - */ - -#include "hw.h" -#include "kdebug.h" -#include "timer.h" -#include "buzzer.h" -#include - - -#if (ARCH & ARCH_EMUL) - - int Emul_IsBuzzerOn(void); - void Emul_BuzzerOn(void); - void Emul_BuzzerOff(void); - void Emul_BuzzerInit(void); - - #define IS_BUZZER_ON (Emul_IsBuzzerOn()) - #define BUZZER_ON (Emul_BuzzerOn()) - #define BUZZER_OFF (Emul_BuzzerOff()) - #define BUZZER_INIT (Emul_BuzzerInit()) - -#elif defined(__AVR__) - - #define IS_BUZZER_ON (PORTG & BV(PORTG0)) - - /*! - * Buzzer manipulation macros - * - * \note Some PORTG functions are being used from - * interrupt code, so we must be careful to - * avoid race conditions. - */ - #define BUZZER_ON \ - do { \ - cpuflags_t _flags; \ - DISABLE_IRQSAVE(_flags); \ - PORTG |= BV(PORTG0); \ - ENABLE_IRQRESTORE(_flags); \ - } while (0) - - #define BUZZER_OFF \ - do { \ - cpuflags_t _flags; \ - DISABLE_IRQSAVE(_flags); \ - PORTG &= ~BV(PORTG0); \ - ENABLE_IRQRESTORE(_flags); \ - } while (0) - - #define BUZZER_INIT \ - do { \ - cpuflags_t _flags; \ - DISABLE_IRQSAVE(_flags); \ - PORTG &= ~BV(PORTG0); \ - DDRG |= BV(PORTG0); \ - ENABLE_IRQRESTORE(_flags); \ - } while (0) - -#elif defined(__IAR_SYSTEMS_ICC) || defined(__IAR_SYSTEMS_ICC__) /* 80C196 */ - - #define IS_BUZZER_ON (cpld->Buzzer & 1) - #define BUZZER_ON (cpld->Buzzer = 1) - #define BUZZER_OFF (cpld->Buzzer = 0) - #define BUZZER_INIT (cpld->Buzzer = 0) - -#endif /* ARCH, __AVR__, __IAR_SYSTEM_ICC */ - - -/* Local vars */ -static Timer buz_timer; -static bool buz_timer_running; -static time_t buz_repeat_interval; -static time_t buz_repeat_duration; - - -/*! - * Turn off buzzer, called by software timer - */ -static void buz_softint(void) -{ - if (IS_BUZZER_ON) - { - BUZZER_OFF; - if (buz_repeat_interval) - { - /* Wait for interval time */ - buz_timer.delay = buz_repeat_interval; - timer_add(&buz_timer); - } - else - buz_timer_running = false; - } - else if (buz_repeat_interval) - { - /* Wait for beep time */ - BUZZER_ON; - buz_timer.delay = buz_repeat_duration; - timer_add(&buz_timer); - } - else - buz_timer_running = false; -} - - -/*! - * Beep for the specified ms time - */ -void buz_beep(time_t time) -{ - cpuflags_t flags; - - /* Remove the software interrupt if it was already queued */ - DISABLE_IRQSAVE(flags); - if (buz_timer_running) - timer_abort(&buz_timer); - - /* Turn on buzzer */ - BUZZER_ON; - - /* Add software interrupt to turn the buzzer off later */ - buz_timer_running = true; - buz_timer.delay = time; - timer_add(&buz_timer); - - ENABLE_IRQRESTORE(flags); -} - - -/*! - * Start buzzer repetition - */ -void buz_repeat_start(time_t duration, time_t interval) -{ - buz_repeat_interval = interval; - buz_repeat_duration = duration; - buz_beep(duration); -} - - -/*! - * Stop buzzer repetition - */ -void buz_repeat_stop(void) -{ - cpuflags_t flags; - DISABLE_IRQSAVE(flags); - - /* Remove the software interrupt if it was already queued */ - if (buz_timer_running) - { - timer_abort(&buz_timer); - buz_timer_running = false; - } - - buz_repeat_interval = 0; - BUZZER_OFF; - - ENABLE_IRQRESTORE(flags); -} - - -/*! - * Initialize buzzer - */ -void buz_init(void) -{ - BUZZER_INIT; - - /* Inizializza software interrupt */ - event_initSoftInt(&buz_timer.expire, (Hook)buz_softint, 0); -}