📄 headset_config.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 + -