FreeCalypso > hg > tcs211-c139
view chipsetsw/drivers/drv_app/buzzer/buzzer.c @ 48:616f63f3e501 default tip
fixed bug in etm_pkt_send() dealing with max-sized packets:
this fix is needed for fc-fsio cpout command to work like it does
with Pirelli's firmware (they must have made the same fix)
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Fri, 13 Nov 2015 19:11:07 +0000 |
parents | f297861532cf |
children |
line wrap: on
line source
/* * BUZZER.C * * Buzzer driver * * Target : ARM * * Copyright (c) Texas Instruments 2000 * */ #include "main/sys_types.h" #include "memif/mem.h" #include "armio/armio.h" #include "buzzer.h" #include "timer/timer.h" #include "board.cfg" /* * Initialize buzzer * */ void BZ_Init(void) { } /* * BZ_Enable / BZ_Disable * * Enable / disable buzzer * * The buzzer uses timer 1 */ void BZ_Enable(void) { *((volatile SYS_UWORD16 *) ARMIO_PWM_CNTL) |= BZ_ON; } void BZ_Disable(void) { *((volatile SYS_UWORD16 *) ARMIO_PWM_CNTL) &= ~BZ_ON; } /* * BZ_Tone * * Changes the timer count to set the tone frequency in Hz * * 58 ticks= 1 ms, which give a frequency of 500 Hz * * */ void BZ_Tone(int f) { if (f > 255) { f = 255; } *((volatile SYS_UWORD16 *) ARMIO_LOAD_TIM) = f; } /* * BZ_Volume * * Changes the buzzer volume * */ void BZ_Volume(int v) { // the level range is 0 up to 63 if (v > 63) { v = 63; } *((volatile SYS_UWORD16 *) BZ_LEVEL) = v; } /* * BZ_KeyBeep_ON * * Audio feedback to user after keybeep * */ void BZ_KeyBeep_ON(void) { volatile int i; BZ_Init (); BZ_Volume (255); BZ_Enable (); BZ_Tone (50); for (i = 0; i < 17000; i++) ; BZ_Disable (); } /* * BZ_KeyBeep_OFF * * Audio feedback to user after keybeep * */ void BZ_KeyBeep_OFF(void) { volatile int i; BZ_Init (); BZ_Volume (255); BZ_Enable (); BZ_Tone (100); for (i = 0; i < 17000; i++) ; BZ_Disable (); } /* * LT_Enable / LT_Disable * * Enable / disable LCD lighting * */ void LT_Enable(void) { #if (BOARD == 7 || BOARD == 8 || BOARD == 9) *((volatile SYS_UWORD16 *) ARMIO_PWM_CNTL) |= LT_ON; #endif } void LT_Disable(void) { #if (BOARD == 7 || BOARD == 8 || BOARD == 9) *((volatile SYS_UWORD16 *) ARMIO_PWM_CNTL) &= ~LT_ON; #endif } /* * LT_Level * * Set LCD display level */ void LT_Level(SYS_WORD8 level) { if (level > 63) level=63; // the level range is 0 up to 63 *((volatile SYS_UWORD16 *) LT_LEVEL) = level; } /* * LT_Status * * Return lighting status for sleep manager * * FreeCalypso change: the software as delivered by TI is broken * in this regard: when built for D-Sample (BOARD 41), their BMI * treats Iota LEDB as "the backlight", which does require the * 13 MHz clock to be running, but their LT_Status() function * (called from the L1 binary blob) only checks the older B & C * kind of backlight status, and always returns "all clear" on * the D-Sample. * * This bug matters for us on Mot C139 and other targets that use * Iota LEDB for the keypad backlight: when this backlight is on * and L1 enters deep sleep, the light flickers visibly. * * Our solution: we introduce a hacky global variable here which * LT_Status() will simply return, and we'll hack LLS to set and * clear it when it turns Iota LEDB on and off. */ unsigned char iota_ledb_status; SYS_BOOL LT_Status(void) { #if (BOARD == 7 || BOARD == 8 || BOARD == 9) if (*((volatile SYS_UWORD16 *) ARMIO_PWM_CNTL) & LT_ON) return(1); // the light is on else return(0); #endif return(iota_ledb_status); }