From df990beaf93963fbe0f9c040959b0dfa7c08e472 Mon Sep 17 00:00:00 2001 From: Christoph Lipka Date: Wed, 12 Oct 2016 13:26:40 +0900 Subject: Environment variables for library ringbuffer This patch adds environment variables to configure user library ringbuffer and step size. The following variables can be set: DLT_USER_BUFFER_MIN - for minimal size DLT_USER_BUFFER_MAX - for maximal size DLT_USER_BUFFER_STEP - for step size Signed-off-by: Christoph Lipka --- src/lib/dlt_user.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++- src/lib/dlt_user_cfg.h | 5 +++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index b3ee5da..0b00070 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -432,6 +432,12 @@ DltReturnValue dlt_init_common(void) { char *env_local_print; char * env_initial_log_level; + char *env_buffer_min; + uint32_t buffer_min = DLT_USER_RINGBUFFER_MIN_SIZE; + char *env_buffer_max; + uint32_t buffer_max = DLT_USER_RINGBUFFER_MAX_SIZE; + char *env_buffer_step; + uint32_t buffer_step = DLT_USER_RINGBUFFER_STEP_SIZE; /* Binary semaphore for threads */ if (sem_init(&dlt_mutex, 0, 1)==-1) @@ -506,7 +512,51 @@ DltReturnValue dlt_init_common(void) dlt_user.dlt_ll_ts_max_num_entries = 0; dlt_user.dlt_ll_ts_num_entries = 0; - if (dlt_buffer_init_dynamic(&(dlt_user.startup_buffer), DLT_USER_RINGBUFFER_MIN_SIZE, DLT_USER_RINGBUFFER_MAX_SIZE, DLT_USER_RINGBUFFER_STEP_SIZE) == DLT_RETURN_ERROR) + + env_buffer_min = getenv(DLT_USER_ENV_BUFFER_MIN_SIZE); + env_buffer_max = getenv(DLT_USER_ENV_BUFFER_MAX_SIZE); + env_buffer_step = getenv(DLT_USER_ENV_BUFFER_STEP_SIZE); + + if (env_buffer_min != NULL) + { + buffer_min = (uint32_t) strtol(env_buffer_min, NULL, 10); + if (errno == EINVAL || errno == ERANGE) + { + dlt_vlog(LOG_ERR, + "Wrong value specified for %s. Using default\n", + DLT_USER_ENV_BUFFER_MIN_SIZE); + buffer_min = DLT_USER_RINGBUFFER_MIN_SIZE; + } + } + + if (env_buffer_max != NULL) + { + buffer_max = (uint32_t) strtol(env_buffer_max, NULL, 10); + if (errno == EINVAL || errno == ERANGE) + { + dlt_vlog(LOG_ERR, + "Wrong value specified for %s. Using default\n", + DLT_USER_ENV_BUFFER_MAX_SIZE); + buffer_min = DLT_USER_RINGBUFFER_MAX_SIZE; + } + } + + if (env_buffer_step != NULL) + { + buffer_step = (uint32_t) strtol(env_buffer_step, NULL, 10); + if (errno == EINVAL || errno == ERANGE) + { + dlt_vlog(LOG_ERR, + "Wrong value specified for %s. Using default\n", + DLT_USER_ENV_BUFFER_STEP_SIZE); + buffer_min = DLT_USER_RINGBUFFER_STEP_SIZE; + } + } + + if (dlt_buffer_init_dynamic(&(dlt_user.startup_buffer), + buffer_min, + buffer_max, + buffer_step) == DLT_RETURN_ERROR) { dlt_user_initialised = false; DLT_SEM_FREE(); diff --git a/src/lib/dlt_user_cfg.h b/src/lib/dlt_user_cfg.h index e51fe83..b8d8c84 100644 --- a/src/lib/dlt_user_cfg.h +++ b/src/lib/dlt_user_cfg.h @@ -80,6 +80,11 @@ #define DLT_USER_RINGBUFFER_MAX_SIZE 500000 #define DLT_USER_RINGBUFFER_STEP_SIZE 50000 +/* Name of environment variable for ringbuffer configuration */ +#define DLT_USER_ENV_BUFFER_MIN_SIZE "DLT_USER_BUFFER_MIN" +#define DLT_USER_ENV_BUFFER_MAX_SIZE "DLT_USER_BUFFER_MAX" +#define DLT_USER_ENV_BUFFER_STEP_SIZE "DLT_USER_BUFFER_STEP" + /* Temporary buffer length */ #define DLT_USER_BUFFER_LENGTH 255 -- cgit v1.2.1