From 5edcdde0b51f3d5153990672f55422bbcabc5cec Mon Sep 17 00:00:00 2001 From: Sreenidhi T Date: Wed, 11 Apr 2012 06:50:28 -0700 Subject: Added changes for parsing bt_did.conf file Change-Id: I3cd885d49080a1bfa258c39881fd7cd5fdf2b652 --- main/bte_conf.c | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) (limited to 'main') diff --git a/main/bte_conf.c b/main/bte_conf.c index a24a138..a03e7be 100644 --- a/main/bte_conf.c +++ b/main/bte_conf.c @@ -59,8 +59,11 @@ #include #include #include +#include +#include #include "bt_target.h" +#include "bta_api.h" /****************************************************************************** ** Externs @@ -77,6 +80,13 @@ DEV_CLASS local_device_default_class = {0x40, 0x02, 0x0C}; /****************************************************************************** ** Local type definitions ******************************************************************************/ +#define CONF_DBG 0 +#define info(format, ...) LOGI (format, ## __VA_ARGS__) +#define debug(format, ...) if (CONF_DBG) LOGD (format, ## __VA_ARGS__) +#define error(format, ...) LOGE (format, ## __VA_ARGS__) + +#define CONF_KEY_LEN 32 +#define CONF_VALUE_LEN 96 #define CONF_COMMENT '#' #define CONF_DELIMITERS " =\n\r\t" @@ -91,6 +101,25 @@ typedef struct { conf_action_t *p_action; } conf_entry_t; +typedef struct { + char key[CONF_KEY_LEN]; + char value[CONF_VALUE_LEN]; +} tKEY_VALUE_PAIRS; + +enum { + CONF_DID, + CONF_DID_RECORD_NUM, + CONF_DID_PRIMARY_RECORD, + CONF_DID_VENDOR_ID, + CONF_DID_VENDOR_ID_SOURCE, + CONF_DID_PRODUCT_ID, + CONF_DID_VERSION, + CONF_DID_CLIENT_EXECUTABLE_URL, + CONF_DID_SERVICE_DESCRIPTION, + CONF_DID_DOCUMENTATION_URL, + CONF_DID_MAX +}; +typedef UINT8 tCONF_DID; /****************************************************************************** ** Static variables ******************************************************************************/ @@ -106,6 +135,18 @@ static const conf_entry_t conf_table[] = { {(const char *) NULL, NULL} }; +static tKEY_VALUE_PAIRS did_conf_pairs[CONF_DID_MAX] = { + { "[DID]", "" }, + { "recordNumber", "" }, + { "primaryRecord", "" }, + { "vendorId", "" }, + { "vendorIdSource", "" }, + { "productId", "" }, + { "version", "" }, + { "clientExecutableURL", "" }, + { "serviceDescription", "" }, + { "documentationURL", "" }, +}; /***************************************************************************** ** FUNCTIONS *****************************************************************************/ @@ -219,3 +260,198 @@ void bte_load_conf(const char *p_path) } } +/******************************************************************************* +** +** Function bte_parse_did_conf +** +** Description Read conf entry from p_path file one by one and get +** the corresponding config value +** +** Returns TRUE if success, else FALSE +** +*******************************************************************************/ +static BOOLEAN bte_parse_did_conf (const char *p_path, UINT32 num, + tKEY_VALUE_PAIRS *conf_pairs, UINT32 conf_pairs_num) +{ + UINT32 i, param_num=0, count=0, start_count=0, end_count=0, conf_num=0; + BOOLEAN key=TRUE, conf_found=FALSE; + + FILE *p_file; + char *p; + char line[CONF_MAX_LINE_LEN+1]; /* add 1 for \0 char */ + + LOGI("Attempt to load did conf from %s", p_path); + + if ((p_file = fopen(p_path, "r")) != NULL) + { + /* read line by line */ + while (fgets(line, CONF_MAX_LINE_LEN+1, p_file) != NULL) + { + count++; + if (line[0] == CONF_COMMENT) + continue; + + if (conf_found && (conf_num == num) && (*line == '[')) { + conf_found = FALSE; + end_count = count-1; + break; + } + + p = strtok(line, CONF_DELIMITERS); + while (p != NULL) { + if (conf_num <= num) { + if (key) { + if (!strcmp(p, conf_pairs[0].key)) { + if (++conf_num == num) { + conf_found = TRUE; + start_count = count; + strncpy(conf_pairs[0].value, "1", CONF_VALUE_LEN); + } + } else { + if (conf_num == num) { + for (i=1; i%s< not found", p_path); + } + if (!end_count) + end_count = count; + + if (start_count) { + debug("Read %s configuration #%u from lines %u to %u in file %s", + conf_pairs[0].key, (unsigned int)num, (unsigned int)start_count, + (unsigned int)end_count, p_path); + return TRUE; + } + + error("%s configuration not found in file %s", conf_pairs[0].key, p_path); + return FALSE; +} + +/******************************************************************************* +** +** Function bte_load_did_conf +** +** Description Set local Device ID records, reading from configuration files +** +** Returns None +** +*******************************************************************************/ + +void bte_load_did_conf (const char *p_path) +{ + tBTA_DI_RECORD rec; + UINT32 rec_num, i, j; + + for (i=1; i<=BTA_DI_NUM_MAX; i++) { + for (j=0; j= BTA_DI_NUM_MAX) || + (!((rec.vendor_id_source >= DI_VENDOR_ID_SOURCE_BTSIG) && + (rec.vendor_id_source <= DI_VENDOR_ID_SOURCE_USBIF))) || + (rec.vendor == DI_VENDOR_ID_DEFAULT)) { + + error("DID record #%u not set", (unsigned int)i); + for (j=0; j