summaryrefslogtreecommitdiffstats
path: root/bindings/c/ParameterFramework.h
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/c/ParameterFramework.h')
-rw-r--r--bindings/c/ParameterFramework.h265
1 files changed, 265 insertions, 0 deletions
diff --git a/bindings/c/ParameterFramework.h b/bindings/c/ParameterFramework.h
new file mode 100644
index 0000000..20cc820
--- /dev/null
+++ b/bindings/c/ParameterFramework.h
@@ -0,0 +1,265 @@
+/** @copyright
+ * Copyright (c) 2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @file Simplified parameter framework C API.
+ * This API does not target a perfect one/one mapping with the c++ one,
+ * but rather aim ease of use and type safety (as far as possible in c).
+ * All function are reentrant and function call on a pfw (PfwHandle)
+ * does not impact any other pfw.
+ * Ie. There is no shared resources between pfw instances.
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+
+/** Lots of function in this API require non null pointer parameter.
+ * Such arguments are marked NONNULL.
+ */
+#define NONNULL __attribute__((nonnull))
+#define NONNULL_(...) __attribute__((nonnull (__VA_ARGS__)))
+#define USERESULT __attribute__((warn_unused_result))
+
+/** Private handle to a parameter framework.
+ * A PfwHandler* is valid if:
+ * - it was created by pfwCreate
+ * - it has not been destroyed by pfwDestroyParameter
+ * - is not NULL
+ * A valid handle MUST be provided to all pfw related method.
+ * A valid handler MUST be destroyed with pfwDestroy before programme
+ * termination.
+ * @note Forward declaration to break header dependency.
+ */
+struct PfwHandler_;
+/** Typedef for use ease. @see PfwHandler_. */
+typedef struct PfwHandler_ PfwHandler;
+
+///////////////////////////////
+///////////// Log /////////////
+///////////////////////////////
+/** Pfw log level for the callback. */
+typedef enum {
+ pfwLogInfo = 55, //< Random value to avoid unfortunate mismatch.
+ pfwLogWarning
+} PfwLogLevel;
+
+/** Type of the parameter framework log callback.
+ * @param userCtx[in] Arbitrary context provided during callback registration.
+ * @param level[in] Log level of the log line.
+ * @param logLine[in] Log line (without end line control character like '\n')
+ * to be logged. The pointer is invalidate after function
+ * return or if any pfw function is called.
+ */
+typedef void PfwLogCb(void *userCtx, PfwLogLevel level, const char *logLine);
+
+/** Logger containing a callback method and its context. */
+typedef struct {
+ /** User defined arbitrary value that will be provided to all logCb call. */
+ void *userCtx;
+ /** Callback that will be called.
+ * If NULL nothing will be logged.
+ */
+ PfwLogCb *logCb;
+} PfwLogger;
+
+///////////////////////////////
+///////////// Core ////////////
+///////////////////////////////
+
+/** Structure of a parameter framework criterion. */
+typedef struct {
+ /** Name of the criterion in the pfw configuration rules. */
+ const char *name; //< Must not be null.
+ bool inclusive; //< True if the criterion is inclusive, false if exclusive.
+ /** Null terminated list of criterion value names.
+ * @example { "Red", "Green", "Blue", NULL }
+ *
+ * For an exclusive criterion, the list must not contain more elements then
+ * INT_MAX.
+ * For an inclusive criterion, the list must not contain more elements then
+ * sizeof(int) * BIT_CHAR - 1.
+ * Ie: (int)1 << n must *not* overflow (UB),
+ * were n is the number of element in the
+ * list. @see pfwSetCriterion
+ */
+ const char **values; //< Must not be null.
+} PfwCriterion;
+
+
+/** Create a parameter framework instance.
+ * Can not fail except for memory allocation.
+ */
+PfwHandler *pfwCreate() USERESULT;
+
+/** Destroy a parameter framework. Can not fail. */
+void pfwDestroy(PfwHandler *handle) NONNULL;
+
+/** Start a parameter framework.
+ * @param handle[in] @see PfwHandler
+ * @param configPath[in] Path to the file containing the pfw configuration.
+ * @param criteria[in] An array of PfwCriterion.
+ * @param criterionNb[in] The number of PfwCriterion in criteria.
+ * @param logger[in] the logger to use for all operation.
+ * If NULL, log infos to standard output and
+ * errors to standard error.
+ * @return true on success, false on failure.
+ */
+bool pfwStart(PfwHandler *handle, const char *configPath,
+ const PfwCriterion criteria[], size_t criterionNb,
+ const PfwLogger *loggger) NONNULL_(1, 2, 3) USERESULT;
+
+/** @return a string describing the last call result.
+ * If the last pfw function call succeeded, return an empty string.
+ * If the last pfw function call failed, return a message explaining the error cause.
+ * The return pointer is invalidated if any pfw method is called on the SAME
+ * PfwHandle.
+ *
+ * Each PfwHandle own it's last error message. It is not static nor TLS.
+ * As a result, calling a pfw function with a NULL PfwHandler will result in a
+ * failure WITHOUT updating the last error.
+ */
+const char *pfwGetLastError(const PfwHandler *handle) NONNULL;
+
+/** Set a criterion value given its name and value.
+ * @param handle[in] @see PfwHandler
+ * @param name[in] The name of the criterion that need to be changed.
+ * @param value If the criterion is exclusive, the index of the new value.
+ * If the criterion is inclusive, a bit field where each bit
+ * correspond to the value index.
+ * For an inclusive criterion defined as such: { "Red", "Green", "Blue", NULL }
+ * to set the value Green and Blue, value has to be 1<<1 | 1<<2 = 0b110 = 6.
+ * For an exclusive criterion defined as such: { "Car", "Boat", "Plane", NULL }
+ * to set the value Plane, value has to be 2.
+ *
+ * Criterion change do not have impact on the parameters value
+ * (no configuration applied) until the changes are committed using pfwApplyConfigurations.
+ *
+ * @return true on success and false on failure.
+ */
+bool pfwSetCriterion(PfwHandler *handle, const char name[], int value) NONNULL USERESULT;
+/** Get a criterion value given its name.
+ * Same usage as pfwSetCriterion except that value is an out param.
+ * Get criterion will return the last value setted with pfwSetCriterion independantly of pfwCommitCritenio.
+ */
+bool pfwGetCriterion(const PfwHandler *handle, const char name[], int *value) NONNULL USERESULT;
+
+/** Commit criteria change and change parameters according to the configurations.
+ * Criterion do not have impact on the parameters value when changed,
+ * instead they are staged and only feed to the rule engine
+ * (who then impact parameter values according to the configuration) when
+ * committed with this function.
+ *
+ * @param handle[in] @see PfwHandler
+ * @return true on success and false on failure.
+ */
+bool pfwApplyConfigurations(const PfwHandler *handle) NONNULL USERESULT;
+
+///////////////////////////////
+/////// Parameter access //////
+///////////////////////////////
+
+/** Handler to a pfw parameter.
+ * A PfwParameterHandler* is valid if:
+ * - it was created by pfwBindParameter
+ * - it has not been destroyed by pfwDestroyParameter
+ * - is not NULL
+ * - the pfwHandle used to created is still valid (ie. it must not outlive
+ * its parent pfw)
+ * A valid handle MUST be provided to all pfw parameter related method.
+ * Any created handle MUST be destroyed (with pfwDestroyParameter) before
+ * the PfwHandler that was used for its creation.
+ * @note Forward declaration to break header dependency.
+ */
+struct PfwParameterHandler_;
+typedef struct PfwParameterHandler_ PfwParameterHandler;
+
+/** Construct the handle to a parameter given its path.
+ * The PfwHandle MUST stay valid until PfwParameterHandler destruction.
+ * @return a PfwParameterHandler on success, NULL on error.
+ * @see pfwGetLastError for error detail.
+ */
+PfwParameterHandler *pfwBindParameter(PfwHandler *handle, const char path[]) NONNULL;
+/** Destroy a parameter handle. Can not fail. */
+void pfwUnbindParameter(PfwParameterHandler *handle) NONNULL;
+
+/** Access the value of a previously bind int parameter.
+ * @param handle[in] Handler to a valid parameter.
+ * @param value[in] Non null pointer to an integer that will
+ * hold the parameter value on success, undefined otherwise.
+ * return true of success, false on failure.
+ */
+bool pfwGetIntParameter(const PfwParameterHandler *handle, int32_t *value ) NONNULL USERESULT;
+
+/** Set the value of a previously bind int parameter.
+ * @param handle[in] Handler to a valid parameter.
+ * @param value[in] The parameter value to set.
+ * return true of success, false on failure.
+ */
+bool pfwSetIntParameter(PfwParameterHandler *handle, int32_t value) NONNULL USERESULT;
+
+/** Access the value of a previously bind string parameter.
+ * @param handle[in] Handler to a valid parameter.
+ * @param value[out] Non null pointer on a string.
+ * Will point on the parameter value string on success,
+ * NULL on failure.
+ * The callee MUST free the returned string using pfwFree after use.
+ * @return true on success, false on failure.
+ */
+bool pfwGetStringParameter(const PfwParameterHandler *handle, const char *value[]) NONNULL;
+
+/** Set the value of a previously bind string parameter.
+ * @param handle[in] Handler to a valid parameter
+ * @param value[in] Non null pointer to a null terminated string to set.
+ */
+bool pfwSetStringParameter(PfwParameterHandler *handle, const char value[]) NONNULL USERESULT;
+
+/** Frees the memory space pointed to by ptr,
+ * which must have been returned by a previous call to the pfw.
+ *
+ * @param ptr[in] pointer to the memory to free.
+ * @see man 3 free for usage.
+ * @note Wrapper around the standard free to avoid problems
+ * in case of a different pfw and client allocator.
+ */
+void pfwFree(void *ptr);
+
+#undef NONNULL
+#undef NONNULL_
+#undef USERESULT
+
+#ifdef __cplusplus
+}
+#endif