summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Lipka <clipka@jp.adit-jv.com>2016-10-12 13:26:40 +0900
committerChristoph Lipka <clipka@jp.adit-jv.com>2016-10-24 13:39:56 +0900
commitdf990beaf93963fbe0f9c040959b0dfa7c08e472 (patch)
tree6f9945fea80bb9d72db9a615924d6b523de00f5d
parentce137a345cf2f637453aa1795af3d381157bf055 (diff)
downloadDLT-daemon-df990beaf93963fbe0f9c040959b0dfa7c08e472.tar.gz
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 <clipka@jp.adit-jv.com>
-rw-r--r--src/lib/dlt_user.c52
-rw-r--r--src/lib/dlt_user_cfg.h5
2 files changed, 56 insertions, 1 deletions
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