summaryrefslogtreecommitdiffstats
path: root/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-04-18 12:40:25 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-05-24 12:05:52 +0200
commit68138a3ec7a78ad7304d291ff92d8e5292847c4e (patch)
tree9157134d50a749c838afdf93a49c4ce17a018347 /4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c
parent196e723e79a1f5eae41cf4a8b1450df0679a4af8 (diff)
Clarify internals hal functions and files names
The purpose of this commit is to have of a more standard way to name files and functions used to generate/handle hal api (generated from hal json configuration file). It occurred to me that 'hal-controller' was not a good name because it is harder for people who don't know about the app-controller to understanded what is the purpose of these files/functions. It was renamed to 'internal-hal' because it's about hal that are all handle/load by hal-manager in opposition of external-hal that are independant binding/binder that can register themselves to hal-manager. BUG-AGL: SPEC-2329 Change-Id: I11b7efe64ec474b004a2a15ed8969b9db95d428f Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c')
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c243
1 files changed, 0 insertions, 243 deletions
diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c
deleted file mode 100644
index a6f6895..0000000
--- a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2018 "IoT.bzh"
- * Author Jonathan Aillet <jonathan.aillet@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <string.h>
-
-#include <filescan-utils.h>
-#include <wrap-json.h>
-
-#include <afb/afb-binding.h>
-
-#include <ctl-config.h>
-
-#include "4a-hal-utilities-verbs-loader.h"
-
-#include "4a-hal-controllers-api-loader.h"
-#include "4a-hal-controllers-alsacore-link.h"
-#include "4a-hal-controllers-cb.h"
-#include "4a-hal-controllers-mixer-link.h"
-
-// Default api to print log when apihandle not available
-afb_api_t AFB_default;
-
-/*******************************************************************************
- * Json parsing functions using app controller *
- ******************************************************************************/
-
-// Config Section definition
-static CtlSectionT ctrlSectionsDefault[] =
-{
- { .key = "resources", .loadCB = PluginConfig },
- { .key = "halmixer", .loadCB = HalCtlsHalMixerConfig },
- { .key = "onload", .loadCB = OnloadConfig },
- { .key = "controls", .loadCB = ControlConfig },
- { .key = "events", .loadCB = EventConfig },
- { .key = "halmap", .loadCB = HalCtlsHalMapConfig },
- { .key = NULL }
-};
-
-/*******************************************************************************
- * Dynamic HAL verbs' functions *
- ******************************************************************************/
-
-// Every HAL export the same API & Interface Mapping from SndCard to AudioLogic is done through alsaHalSndCardT
-static afb_verb_t CtlHalApiStaticVerbs[] =
-{
- /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */
- { .verb = "info", .callback = HalCtlsInfo, .info = "List available streams/playbacks/captures/controls for this api" },
- { .verb = "subscribe", .callback = HalCtlsSubscribe, .info = "Subscribe to event(s) for values changes (streams/playbacks/captures/controls) for this api" },
- { .verb = "unsubscribe", .callback = HalCtlsUnsubscribe, .info = "Unsubscribe to event(s) for values changes (streams/playbacks/captures/controls) for this api" },
- { .verb = NULL } // Marker for end of the array
-};
-
-/*******************************************************************************
- * Dynamic API functions for app controller *
- ******************************************************************************/
-
-static int HalCtlsInitOneApi(afb_api_t apiHandle)
-{
- CtlConfigT *ctrlConfig;
- struct SpecificHalData *currentCtlHalData;
-
- if(! apiHandle)
- return -1;
-
- // Hugely hack to make all V2 AFB_DEBUG to work in fileutils
- AFB_default = apiHandle;
-
- // Retrieve section config from api handle
- if(! (ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle)))
- return -2;
-
- currentCtlHalData = (struct SpecificHalData *) getExternalData(ctrlConfig);
- if(! currentCtlHalData)
- return -3;
-
- // Fill SpecificHalDatadata structure
- currentCtlHalData->internal = 1;
-
- currentCtlHalData->sndCardPath = (char *) ctrlConfig->uid;
- currentCtlHalData->info = (char *) ctrlConfig->info;
-
- currentCtlHalData->author = (char *) ctrlConfig->author;
- currentCtlHalData->version = (char *) ctrlConfig->version;
- currentCtlHalData->date = (char *) ctrlConfig->date;
-
- currentCtlHalData->ctlHalSpecificData->apiHandle = apiHandle;
- currentCtlHalData->ctlHalSpecificData->ctrlConfig = ctrlConfig;
-
- currentCtlHalData->sndCardId = HalCtlsGetCardIdByCardPath(apiHandle, currentCtlHalData->sndCardPath);
-
- if(! (currentCtlHalData->ctlHalSpecificData->streamUpdates = afb_api_make_event(apiHandle, HAL_STREAM_UPDATES_EVENT_NAME)))
- return -4;
-
- if(currentCtlHalData->sndCardId < 0)
- currentCtlHalData->status = HAL_STATUS_UNAVAILABLE;
- else
- currentCtlHalData->status = HAL_STATUS_AVAILABLE;
-
- // TBD JAI: handle refresh of hal status for dynamic card (/dev/by-id)
-
- return CtlConfigExec(apiHandle, ctrlConfig);
-}
-
-static int HalCtlsLoadOneApi(void *cbdata, afb_api_t apiHandle)
-{
- int err;
- CtlConfigT *ctrlConfig;
- CtlSectionT *ctrlCurrentSections;
-
- if(! cbdata || ! apiHandle)
- return -1;
-
- ctrlConfig = (CtlConfigT*) cbdata;
-
- // Save closure as api's data context
- afb_api_set_userdata(apiHandle, ctrlConfig);
-
- // Add static controls verbs
- if(HalUtlLoadVerbs(apiHandle, CtlHalApiStaticVerbs)) {
- AFB_API_ERROR(apiHandle, "Load Section : fail to register static V2 verbs");
- return 1;
- }
-
- ctrlCurrentSections = malloc(sizeof(ctrlSectionsDefault));
- memcpy(ctrlCurrentSections, ctrlSectionsDefault, sizeof(ctrlSectionsDefault));
-
- // Load section for corresponding Api
- if((err = CtlLoadSections(apiHandle, ctrlConfig, ctrlCurrentSections)))
- return err;
-
- // Declare an event manager for this Api
- afb_api_on_event(apiHandle, HalCtlsDispatchApiEvent);
-
- // Init Api function (does not receive user closure ???)
- afb_api_on_init(apiHandle, HalCtlsInitOneApi);
-
- return 0;
-}
-
-int HalCtlsCreateApi(afb_api_t apiHandle, char *path, struct HalMgrData *HalMgrGlobalData)
-{
- CtlConfigT *ctrlConfig;
- struct SpecificHalData *currentCtlHalData;
-
- if(! apiHandle || ! path || ! HalMgrGlobalData)
- return -1;
-
- // Create one Api per file
- ctrlConfig = CtlLoadMetaData(apiHandle, path);
- if(! ctrlConfig) {
- AFB_API_ERROR(apiHandle, "No valid control config file in:\n-- %s", path);
- return -2;
- }
-
- if(! ctrlConfig->api) {
- AFB_API_ERROR(apiHandle, "API Missing from metadata in:\n-- %s", path);
- return -3;
- }
-
- // Allocation of current hal controller data
- currentCtlHalData = HalUtlAddHalApiToHalList(&HalMgrGlobalData->halDataList);
- if(! currentCtlHalData)
- return -4;
-
- currentCtlHalData->apiName = (char *) ctrlConfig->api;
-
- // Stores current hal controller data in controller config
- setExternalData(ctrlConfig, (void *) currentCtlHalData);
-
- // Allocation of the structure that will be used to store specific hal controller data
- currentCtlHalData->ctlHalSpecificData = calloc(1, sizeof(struct CtlHalSpecificData));
-
- // Create one API
- if(! afb_api_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, HalCtlsLoadOneApi, ctrlConfig))
- return -5;
-
- return 0;
-}
-
-int HalCtlsCreateAllApi(afb_api_t apiHandle, struct HalMgrData *HalMgrGlobalData)
-{
- int index, status = 0;
- char *dirList, *fileName, *fullPath;
- char filePath[CONTROL_MAXPATH_LEN];
-
- filePath[CONTROL_MAXPATH_LEN - 1] = '\0';
-
- json_object *configJ, *entryJ;
-
- if(! apiHandle || ! HalMgrGlobalData)
- return -1;
-
- // Hugely hack to make all V2 AFB_DEBUG to work in fileutils
- AFB_default = apiHandle;
-
- AFB_API_NOTICE(apiHandle, "Begining to create all APIs");
-
- dirList = getenv("CONTROL_CONFIG_PATH");
- if(! dirList)
- dirList = CONTROL_CONFIG_PATH;
-
- configJ = CtlConfigScan(dirList, "hal");
- if(! configJ) {
- AFB_API_WARNING(apiHandle, "No hal-(binder-middle-name)*.json config file(s) found in %s, 4a-hal-manager will only works with external hal", dirList);
- return 0;
- }
-
- // We load 1st file others are just warnings
- for(index = 0; index < (int) json_object_array_length(configJ); index++) {
- entryJ = json_object_array_get_idx(configJ, index);
-
- if(wrap_json_unpack(entryJ, "{s:s, s:s !}", "fullpath", &fullPath, "filename", &fileName)) {
- AFB_API_ERROR(apiHandle, "HOOPs invalid JSON entry = %s", json_object_get_string(entryJ));
- return -2;
- }
-
- strncpy(filePath, fullPath, sizeof(filePath) - 1);
- strncat(filePath, "/", sizeof(filePath) - 1);
- strncat(filePath, fileName, sizeof(filePath) - 1);
-
- if(HalCtlsCreateApi(apiHandle, filePath, HalMgrGlobalData) < 0)
- status--;
- }
-
- return status;
-} \ No newline at end of file