www.pudn.com > headset.rar > hal.c


/* 
  Rather small Hardware Abstraction Layer (HAL) for headset 
*/ 
#include "hal.h" 
 
#include  
#include  
 
 
/* TODO tidy this up once the new traps are supported by the firmware */ 
 
 
 
/* Scale the supplied gain to be within the specified range */ 
static uint16 scaleGainToRange(uint8 gain, uint16 max_range, uint16 max_gain) 
{ 
    return (((((gain * 10) * max_range)/max_gain) + 5)/10); 
} 
 
 
/* 
    HALsetVolume 
 
    Set the headset speaker volume. 
*/ 
void HALsetVolume(uint8 vol) 
{ 
    uint16 scaled_val = 0; 
     
    /* Get the range supported by the codec */ 
    uint16 range = CodecOutputGainRange() - 1; 
     
    /* If the range is zero don't bother setting anything */ 
    if (!range) 
        return; 
         
    /* If the range is not zero scale the gain to be in that range */ 
    scaled_val = scaleGainToRange(vol, range, 15); 
         
    /* Set the codec gain */ 
    CodecSetOutputGain(scaled_val); 
} 
 
 
/* 
    HALsetLED  
 
    Set the state of an LED.  For this example the leds are just 
    mapped directly to PIO lines. 
*/ 
/*lint -esym(759, HALsetLED) -esym(765,HALsetLED) -esym(714,HALsetLED) */ 
void HALsetLED(uint8 bit, uint8 state) 
{ 
    PioSet(bit, bit*state); 
} 
 
 
/* 
    HALsetMicrophone 
     
    Set the headset microphone gain. 
*/ 
void HALsetMicrophone(uint8 gain) 
{ 
    uint16 scaled_val = 0; 
 
    /* Get the range supported by the codec */ 
    uint16 range = CodecInputGainRange() - 1; 
 
    /* If the range is zero don't bother setting anything */ 
    if (!range) 
        return; 
 
    /* If the range is not zero scale the gain to be in that range */ 
    scaled_val = scaleGainToRange(gain, range, 15); 
 
    /* Set the codec gain */ 
    CodecSetInputGain(scaled_val); 
}