1ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/****************************************************************************** 2ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 3ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Copyright (C) 2009-2012 Broadcom Corporation 4ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 5ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 6ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * you may not use this file except in compliance with the License. 7ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * You may obtain a copy of the License at: 8ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 9ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 10ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 11ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Unless required by applicable law or agreed to in writing, software 12ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 13ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * See the License for the specific language governing permissions and 15ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * limitations under the License. 16ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 17ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville ******************************************************************************/ 18ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 19ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/****************************************************************************** 20ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 21ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Filename: conf.c 22ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 23ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Description: Contains functions to conduct run-time module configuration 24ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * based on entries present in the .conf file 25ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * 26ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville ******************************************************************************/ 27ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 28ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#define LOG_TAG "bt_vnd_conf" 29ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 30ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#include <utils/Log.h> 31ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#include <string.h> 32ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#include "bt_vendor_brcm.h" 33ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 34ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/****************************************************************************** 35ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Externs 36ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville******************************************************************************/ 37ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilleint userial_set_port(char *p_conf_name, char *p_conf_value, int param); 38ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilleint hw_set_patch_file_path(char *p_conf_name, char *p_conf_value, int param); 39ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilleint hw_set_patch_file_name(char *p_conf_name, char *p_conf_value, int param); 40ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) 41ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilleint hw_set_patch_settlement_delay(char *p_conf_name, char *p_conf_value, int param); 42ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#endif 43ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 44ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 45ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/****************************************************************************** 46ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Local type definitions 47ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville******************************************************************************/ 48ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 49ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#define CONF_COMMENT '#' 50ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#define CONF_DELIMITERS " =\n\r\t" 51ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#define CONF_VALUES_DELIMITERS "=\n\r\t" 52ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#define CONF_MAX_LINE_LEN 255 53ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 54ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilletypedef int (conf_action_t)(char *p_conf_name, char *p_conf_value, int param); 55ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 56ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savilletypedef struct { 57ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville const char *conf_entry; 58ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville conf_action_t *p_action; 59ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville int param; 60ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville} conf_entry_t; 61ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 62ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/****************************************************************************** 63ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Static variables 64ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville******************************************************************************/ 65ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 66ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/* 67ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville * Current supported entries and corresponding action functions 68ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville */ 69ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savillestatic const conf_entry_t conf_table[] = { 70ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville {"UartPort", userial_set_port, 0}, 71ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville {"FwPatchFilePath", hw_set_patch_file_path, 0}, 72ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville {"FwPatchFileName", hw_set_patch_file_name, 0}, 73ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#if (VENDOR_LIB_RUNTIME_TUNING_ENABLED == TRUE) 74ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville {"FwPatchSettlementDelay", hw_set_patch_settlement_delay, 0}, 75ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville#endif 76ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville {(const char *) NULL, NULL, 0} 77ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville}; 78ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 79ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/***************************************************************************** 80ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** CONF INTERFACE FUNCTIONS 81ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville*****************************************************************************/ 82ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 83ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville/******************************************************************************* 84ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** 85ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Function vnd_load_conf 86ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** 87ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Description Read conf entry from p_path file one by one and call 88ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** the corresponding config function 89ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** 90ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** Returns None 91ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville** 92ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville*******************************************************************************/ 93ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Savillevoid vnd_load_conf(const char *p_path) 94ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville{ 95ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville FILE *p_file; 96ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville char *p_name; 97ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville char *p_value; 98ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville conf_entry_t *p_entry; 99ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville char line[CONF_MAX_LINE_LEN+1]; /* add 1 for \0 char */ 100ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 101ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville ALOGI("Attempt to load conf from %s", p_path); 102ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 103ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville if ((p_file = fopen(p_path, "r")) != NULL) 104ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 105ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville /* read line by line */ 106ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville while (fgets(line, CONF_MAX_LINE_LEN+1, p_file) != NULL) 107ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 108ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville if (line[0] == CONF_COMMENT) 109ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville continue; 110ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 111ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville p_name = strtok(line, CONF_DELIMITERS); 112ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 113ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville if (NULL == p_name) 114ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 115ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville continue; 116ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 117ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 118ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville p_value = strtok(NULL, CONF_DELIMITERS); 119ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 120ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville if (NULL == p_value) 121ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 122ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville ALOGW("vnd_load_conf: missing value for name: %s", p_name); 123ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville continue; 124ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 125ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 126ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville p_entry = (conf_entry_t *)conf_table; 127ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 128ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville while (p_entry->conf_entry != NULL) 129ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 130ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville if (strcmp(p_entry->conf_entry, (const char *)p_name) == 0) 131ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 132ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville p_entry->p_action(p_name, p_value, p_entry->param); 133ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville break; 134ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 135ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 136ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville p_entry++; 137ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 138ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 139ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 140ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville fclose(p_file); 141ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 142ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville else 143ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville { 144ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville ALOGI( "vnd_load_conf file >%s< not found", p_path); 145ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville } 146ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville} 147ee836ae92bf015f6c0b00a974ace3b9188bd6c66Wink Saville 148