⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 headset_config.c

📁 bluelab的一个很好的例程
💻 C
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2005

FILE NAME
    headset_config.c
    
DESCRIPTION
    
*/

#include "headset_config.h"

#include <ps.h>
#include <string.h>
#include <stdlib.h>

/****************************************************************************/
/* Reference the default configuartion definition files */


 	extern const config_type csr_pioneer_default_config;
 


 
/****************************************************************************/
/* Identify each default configuration, this defines an offset into the main config table */
typedef enum
{
	/* CSR Headset Pioneer */
 	csr_pioneer = (0),
      
 	entry_1 = (0),
 
 	entry_2 = (0),
 
 	entry_3 = (0),

 	entry_4 = (0),    

 	entry_5 = (0),

    entry_6 = (0),
 
 	last_config_id = (7)
}config_id_type;
 

/****************************************************************************/
/* Table of default configurations */
const config_type* const default_configs[] = 
{
 
	/* CSR Headset Pioneer */
	 &csr_pioneer_default_config,
 
 	0,
 
 	0,

 	0,

 	0,

 	0,

 	0,

};


/****************************************************************************/
const uint8 * const default_service_records[] = 
{
		/* CSR Headset Pioneer */
 	0,
 	0,
 	0,
 	0,
 	0,
 	0,
    0,
} ;

/****************************************************************************/
const uint16 * const default_service_record_lengths[] = 
{
		/* CSR Headset Pioneer */
 	0,
 	0,
 	0,
 	0,
 	0,
 	0,
    0,
} ;

/****************************************************************************/
/****************************************************************************/



/* Key defintion structure */
typedef struct
{
 	uint16    length;
 	const uint16* data;
}key_type;


/****************************************************************************
NAME 
 	getkey

DESCRIPTION
 	Access specified key in constant space
 
RETURNS
 	void
*/
static key_type getkey(config_id_type config_id, uint16 key_id)
{
 	key_type key = {0, 0};
 
 	switch(key_id)
 	{
   		case PSKEY_BATTERY_CONFIG:
      		key.length = default_configs[config_id]->battery_config->length;
      		key.data = (uint16*)&default_configs[config_id]->battery_config->value;
      		break;

  		case PSKEY_BUTTON_CONFIG:
        	key.length = default_configs[config_id]->button_config->length;
        	key.data = (uint16*)&default_configs[config_id]->button_config->value;
        	break;
  
		case PSKEY_BUTTON_PATTERN_CONFIG:
        	key.length = default_configs[config_id]->button_pattern_config->length;
        	key.data = (uint16*)&default_configs[config_id]->button_pattern_config->value;
        	break;


		case PSKEY_HFP_SUPPORTED_FEATURES:
        	key.length = default_configs[config_id]->supported_features_config->length;
   			key.data = (uint16*)&default_configs[config_id]->supported_features_config->value;
            break ;
            
		case PSKEY_INPUT_PIO_BLOCK:
   			key.length = default_configs[config_id]->input_pio_block->length;
   			key.data = (uint16*)&default_configs[config_id]->input_pio_block->value;
   			break;  
               
        case PSKEY_HFP_1_5_SUPPORTED_FEATURES:
            key.length = default_configs[config_id]->HFP_1_5_features_config->length;
   			key.data = (uint16*)&default_configs[config_id]->HFP_1_5_features_config->value;
   			break ;

        case PSKEY_NETWORK_SERVICE_IND_TIME:
        	key.length = default_configs[config_id]->network_ind_time->length;
   			key.data = (uint16*)&default_configs[config_id]->network_ind_time->value;
   			break;        
        
  		case PSKEY_MUTE_REMIND_TIME:
        	key.length = default_configs[config_id]->mute_remind_timeout->length;
        	key.data = (uint16*)&default_configs[config_id]->mute_remind_timeout->value;
        	break;

  		case PSKEY_POWER_ON_TIMEOUT:
        	key.length = default_configs[config_id]->power_on_timeout->length;
        	key.data = (uint16*)&default_configs[config_id]->power_on_timeout->value;
        	break;      
        
        case PSKEY_POWER_OFF_DISABLED_TIME:
   			key.length = default_configs[config_id]->auto_disconnect_timeout->length;
   			key.data = &default_configs[config_id]->auto_disconnect_timeout->value;
   			break;              
        
        case PSKEY_VOLUME_ORIENTATION:
       	    key.length = default_configs[config_id]->volume_orientation->length;
   			key.data = &default_configs[config_id]->volume_orientation->value;
   		 break; 

  		case PSKEY_PAIRING_TIMEOUT:
   			key.length = default_configs[config_id]->pairing_timeout->length;
   			key.data = &default_configs[config_id]->pairing_timeout->value;
   			break;
   
  		case PSKEY_AUTOMATIC_SWITCH_OFF:
   			key.length = default_configs[config_id]->auto_switch_off_timeout->length;
   			key.data = &default_configs[config_id]->auto_switch_off_timeout->value;
   			break;
   
  		case PSKEY_RADIO_CONFIG:
   			key.length = default_configs[config_id]->radio->length;
   			key.data = (uint16*)&default_configs[config_id]->radio->value;
   			break;
   
  		case PSKEY_NIMH_CHARGER_CONFIG:
   			key.length = default_configs[config_id]->nimh_charger->length;
   			key.data = (uint16*)&default_configs[config_id]->nimh_charger->value;
   			break;
   
  		case PSKEY_FEATURE_BLOCK:
   			key.length = default_configs[config_id]->features->length;
   			key.data = (uint16*)&default_configs[config_id]->features->value;
   			break;
   
  		case PSKEY_SPEAKER_GAIN_MAPPING:
   			key.length = default_configs[config_id]->volume->length;
   			key.data = (uint16*)&default_configs[config_id]->volume->value;
   			break;
   
  		case PSKEY_NO_LED_FILTERS:
   			key.length = default_configs[config_id]->no_led_filters->length;
   			key.data = &default_configs[config_id]->no_led_filters->value;
   			break;
   
  		case PSKEY_LED_FILTERS:
   			key.length = default_configs[config_id]->led_filters->length;
   			key.data = (uint16*)&default_configs[config_id]->led_filters->value;
   			break;
   
  		case PSKEY_NO_LED_STATES:
   			key.length = default_configs[config_id]->no_led_states->length;
   			key.data = &default_configs[config_id]->no_led_states->value;
   			break;
   
  		case PSKEY_LED_STATES:
   			key.length = default_configs[config_id]->led_states->length;
   			key.data = (uint16*)&default_configs[config_id]->led_states->value;
   			break;
   
  		case PSKEY_NO_LED_EVENTS:
   			key.length = default_configs[config_id]->no_led_events->length;
   			key.data = &default_configs[config_id]->no_led_events->value;
   			break;
   
  		case PSKEY_LED_EVENTS:
   			key.length = default_configs[config_id]->led_events->length;
   			key.data = (uint16*)&default_configs[config_id]->led_events->value;
   			break;
   
  		case PSKEY_EVENTS_A:
   			key.length = default_configs[config_id]->events_a->length;
   			key.data = (uint16*)&default_configs[config_id]->events_a->value;
   			break;
   
  		case PSKEY_EVENTS_B:
   			key.length = default_configs[config_id]->events_b->length;
   			key.data = (uint16*)&default_configs[config_id]->events_b->value;
   			break;
   
  		case PSKEY_NO_TONES:
   			key.length = default_configs[config_id]->no_tone_events->length;
   			key.data = &default_configs[config_id]->no_tone_events->value;
   			break;
   
  		case PSKEY_TONES:
   			key.length = default_configs[config_id]->tones->length;
   			key.data = (uint16*)&default_configs[config_id]->tones->value;
   			break;
   
  		case PSKEY_PIO_BLOCK:
   			key.length = default_configs[config_id]->pio_block->length;
   			key.data = (uint16*)&default_configs[config_id]->pio_block->value;
   			break;

        case PSKEY_LINK_LOSS_NUM_RETRIES:
            key.length = default_configs[config_id]->link_loss_num_retries->length;
            key.data = (uint16*)&default_configs[config_id]->link_loss_num_retries->value;
   			break;

  		case PSKEY_LAST_USED_AG:
  		case PSKEY_DEFAULT_AG:
  		case PSKEY_CONFIGURATION_ID:
  		default:
   			break;
 	}

 	return key;
}


/****************************************************************************
NAME 
 	get_config_id

DESCRIPTION
 	This function is called to read the configuration ID
 
RETURNS
 	Defaults to config 0 if the key doesn't exist
*/
static uint16 get_config_id(uint16 key)
{
 	/* Default to CSR standard configuration */
 	uint16 id = 0;
 
 	/* Read the configuration ID.  This identifies the configuration held in
       constant space */
 	if(PsRetrieve(key, &id, sizeof(uint16)))
 	{
  		if(id >= last_config_id)
  		{
          
   			id = 0;
  		}
 	}
 
 	return id;
}


/****************************************************************************
NAME 
 	ConfigRetrieve

DESCRIPTION
 	This function is called to read a configuration key.  If the key exists
 	in persistent store it is read from there.  If it does not exist then
 	the default is read from constant space
 
RETURNS
 	0 if no data was read otherwise the length of data
*/
uint16 ConfigRetrieve(uint16 key_id, void* data, uint16 len)
{
 	uint16 ret_len;
 	uint16 config_id;
 
 	/* Read the Configuration ID */
 	config_id = get_config_id(PSKEY_CONFIGURATION_ID);
   
 	/* Read requested key from PS if it exists */
 	ret_len = PsRetrieve(key_id, data, len);
 
 	/* If no key exists then read the parameters from the default configuration
       held in constant space */
 	if(!ret_len)
 	{
  		/* Access the required configuration */
  		if(default_configs[config_id])
  		{
   			/* Read the key */
   			key_type key = getkey(config_id, key_id);
   
   			/* Providing the requested length matches the entry in constant space */
   			if(key.length == len)
   			{
    			/* Copy from constant space */
    			memcpy(data, key.data, len);
    			ret_len = len;
   			}
  		}
 	}
 
 	return ret_len;
}

 


uint8 * get_service_record ( void ) 
{
	uint16 lIndex = get_config_id(PSKEY_CONFIGURATION_ID);
    
	uint8 * lServiceRecord = (uint8*) default_service_records[lIndex] ;
	
	DEBUG(("CONF: Service_Record[%d][%d]\n",lIndex , (int)lServiceRecord)) ;
    	
	return lServiceRecord ;
}

uint16 get_service_record_length ( void ) 
{
	uint16 lIndex = get_config_id(PSKEY_CONFIGURATION_ID);
    
    uint16 lLength = 0 ;

    if (default_service_record_lengths[lIndex])
    {
	   lLength = *default_service_record_lengths[lIndex] ;
    }
    

	DEBUG(("CONF: Service Record Len = [%d]\n", lLength)) ;
	
	return lLength ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -