X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fbuzzer.c;h=042d06cc76be47d8f27a054e0f813b38d5b05208;hb=HEAD;hp=5f3349e130b5ecbcdf120c0087b47eb5bdc38d03;hpb=7ee3b3c3da60b181d18336e892d8d0920166f5ae;p=bertos.git diff --git a/drv/buzzer.c b/drv/buzzer.c deleted file mode 100755 index 5f3349e1..00000000 --- a/drv/buzzer.c +++ /dev/null @@ -1,192 +0,0 @@ -/*! - * \file - * - * - * \version $Id$ - * - * \author Bernardo Innocenti - * - * \brief Buzzer driver - */ - -/* - * $Log$ - * 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 */ - buz_timer = timer_new(); - ASSERT(buz_timer != NULL); - INITEVENT_INT(&buz_timer->expire, (Hook)buz_softint, 0); -}