summaryrefslogtreecommitdiffstats
path: root/4a-hal/4a-hal-manager
diff options
context:
space:
mode:
Diffstat (limited to '4a-hal/4a-hal-manager')
-rw-r--r--4a-hal/4a-hal-manager/4a-hal-manager-cb.c273
-rw-r--r--4a-hal/4a-hal-manager/4a-hal-manager-cb.h36
-rw-r--r--4a-hal/4a-hal-manager/4a-hal-manager.c168
-rw-r--r--4a-hal/4a-hal-manager/4a-hal-manager.h29
4 files changed, 0 insertions, 506 deletions
diff --git a/4a-hal/4a-hal-manager/4a-hal-manager-cb.c b/4a-hal/4a-hal-manager/4a-hal-manager-cb.c
deleted file mode 100644
index 32fbb25..0000000
--- a/4a-hal/4a-hal-manager/4a-hal-manager-cb.c
+++ /dev/null
@@ -1,273 +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 <wrap-json.h>
-
-#include <afb/afb-binding.h>
-
-#include "4a-hal-utilities-data.h"
-
-#include "4a-hal-manager-cb.h"
-
-/*******************************************************************************
- * HAL Manager event handler function *
- ******************************************************************************/
-
-// TBD JAI : to implement
-void HalMgrDispatchApiEvent(afb_api_t apiHandle, const char *evtLabel, json_object *eventJ)
-{
- AFB_API_WARNING(apiHandle, "Not implemented yet");
- // Use "4a-hal-manager-events.h" to handle events
-}
-
-/*******************************************************************************
- * HAL Manager verbs functions *
- ******************************************************************************/
-
-void HalMgrPing(afb_req_t request)
-{
- static int count = 0;
-
- count++;
-
- AFB_REQ_NOTICE(request, "ping count = %d", count);
- afb_req_success(request, json_object_new_int(count), NULL);
-
- return;
-}
-
-void HalMgrLoaded(afb_req_t request)
-{
- int requestJsonErr = 0, allHal = 0, verbose = 0;
-
- char cardIdString[32];
-
- afb_api_t apiHandle;
- struct HalMgrData *halMgrData;
- struct HalData *currentHalData;
-
- json_object *requestJson, *requestAnswer, *apiObject;
-
- if(! (apiHandle = afb_req_get_api(request))) {
- afb_req_fail(request, "api_handle", "Can't get hal manager api handle");
- return;
- }
-
- halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle);
- if(! halMgrData) {
- afb_req_fail(request, "hal_manager_data", "Can't get hal manager data");
- return;
- }
-
- currentHalData = halMgrData->halDataList;
-
- if(! currentHalData) {
- afb_req_success(request, NULL, "No Hal Api loaded");
- return;
- }
-
- requestAnswer = json_object_new_array();
- if(! requestAnswer) {
- afb_req_fail(request, "json_answer", "Can't generate json answer");
- return;
- }
-
- if(! (requestJson = afb_req_json(request)))
- AFB_REQ_NOTICE(request, "Can't get request json");
- else
- requestJsonErr = wrap_json_unpack(requestJson, "{s?:b s?:b}", "all", &allHal, "verbose", &verbose);
-
- while(currentHalData) {
- if(allHal || currentHalData->status == HAL_STATUS_READY) {
- // Case if request key is 'verbose' and value is bigger than 0
- if(! requestJsonErr && verbose) {
- if(currentHalData->sndCardId >= 0)
- snprintf(cardIdString, sizeof(cardIdString), "hw:%i", currentHalData->sndCardId);
- else
- snprintf(cardIdString, sizeof(cardIdString), "not-found");
-
- wrap_json_pack(&apiObject,
- "{s:s s:i s:s s:i s:s s:s s:s s:s s:s}",
- "api", currentHalData->apiName,
- "status", (int) currentHalData->status,
- "sndcard", currentHalData->sndCardPath,
- "internal", (int) currentHalData->internal,
- "info", currentHalData->info ? currentHalData->info : "",
- "author", currentHalData->author ? currentHalData->author : "",
- "version", currentHalData->version ? currentHalData->version : "",
- "date", currentHalData->date ? currentHalData->date : "",
- "snd-dev-id", cardIdString);
- json_object_array_add(requestAnswer, apiObject);
- }
- // Case if request is empty or not handled
- else {
- json_object_array_add(requestAnswer, json_object_new_string(currentHalData->apiName));
- }
- }
-
- currentHalData = currentHalData->next;
- }
-
- afb_req_success(request, requestAnswer, "Requested data");
-}
-
-void HalMgrLoad(afb_req_t request)
-{
- int cardId = -1;
-
- char *apiName, *sndCardPath, *info = NULL, *author = NULL, *version = NULL, *date = NULL;
-
- afb_api_t apiHandle;
- struct HalMgrData *halMgrData;
- struct HalData *addedHal;
-
- json_object *requestJson, *apiReceivedMetadata;
-
- if(! (apiHandle = afb_req_get_api(request))) {
- afb_req_fail(request, "api_handle", "Can't get hal manager api handle");
- return;
- }
-
- halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle);
- if(! halMgrData) {
- afb_req_fail(request, "hal_manager_data", "Can't get hal manager data");
- return;
- }
-
- if(! (requestJson = afb_req_json(request))) {
- afb_req_fail(request, "request_json", "Can't get request json");
- return;
- }
-
- if(! json_object_object_get_ex(requestJson, "metadata", &apiReceivedMetadata)) {
- afb_req_fail(request, "api_metadata", "Can't get json metadata section to register external hal");
- return;
- }
-
- if(wrap_json_unpack(apiReceivedMetadata,
- "{s:s s:s s?:s s?:s s?:s s?:s s?:i}",
- "api", &apiName,
- "uid", &sndCardPath,
- "info", &info,
- "author", &author,
- "version", &version,
- "date", &date,
- "snd-dev-id", &cardId)) {
- afb_req_fail(request, "api_metadata", "Can't metadata of api to register");
- return;
- }
-
- addedHal = HalUtlAddHalToHalList(&halMgrData->halDataList);
-
- addedHal->internal = 0;
- // TBD JAI : initialize external to unavailable once event from external hal will be handled
- addedHal->status = HAL_STATUS_READY;
-
- addedHal->apiName = strdup(apiName);
- addedHal->sndCardPath = strdup(sndCardPath);
-
- if(info)
- addedHal->info = strdup(info);
-
- if(author)
- addedHal->author = strdup(author);
-
- if(version)
- addedHal->version = strdup(version);
-
- if(date)
- addedHal->date = strdup(date);
-
- addedHal->sndCardId = cardId;
-
- // TBD JAI: add subscription to this api status events, if subscription fails, remove hal from list
-
- afb_req_success(request, NULL, "Api successfully registered");
-}
-
-void HalMgrUnload(afb_req_t request)
-{
- char *apiName;
-
- afb_api_t apiHandle;
- struct HalMgrData *halMgrData;
- struct HalData *halToRemove;
-
- json_object *requestJson;
-
- if(! (apiHandle = afb_req_get_api(request))) {
- afb_req_fail(request, "api_handle", "Can't get hal manager api handle");
- return;
- }
-
- halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle);
- if(! halMgrData) {
- afb_req_fail(request, "hal_manager_data", "Can't get hal manager data");
- return;
- }
-
- if(! (requestJson = afb_req_json(request))) {
- afb_req_fail(request, "request_json", "Can't get request json");
- return;
- }
-
- if(wrap_json_unpack(requestJson, "{s:s}", "api", &apiName)) {
- afb_req_fail(request, "requested_api", "Can't get api to remove");
- return;
- }
-
- halToRemove = HalUtlSearchHalDataByApiName(&halMgrData->halDataList, apiName);
- if(! halToRemove) {
- afb_req_fail(request, "requested_api", "Can't find api to remove");
- return;
- }
-
- if(halToRemove->internal) {
- afb_req_fail(request, "requested_api", "Can't remove an internal hal");
- return;
- }
-
- if(HalUtlRemoveSelectedHalFromList(&halMgrData->halDataList, halToRemove)) {
- afb_req_fail(request, "unregister_error", "Didn't succeed to remove specified api");
- return;
- }
-
- // TBD JAI: remove subscription to this api status events
-
- afb_req_success(request, NULL, "Api successfully unregistered");
-}
-
-// TBD JAI : to implement
-void HalMgrSubscribeEvent(afb_req_t request)
-{
- AFB_REQ_WARNING(request, "Not implemented yet");
-
- afb_req_success(request, json_object_new_boolean(0), NULL);
-}
-
-// TBD JAI : to implement
-void HalMgrUnsubscribeEvent(afb_req_t request)
-{
- AFB_REQ_WARNING(request, "Not implemented yet");
-
- afb_req_success(request, json_object_new_boolean(0), NULL);
-}
diff --git a/4a-hal/4a-hal-manager/4a-hal-manager-cb.h b/4a-hal/4a-hal-manager/4a-hal-manager-cb.h
deleted file mode 100644
index e0e144f..0000000
--- a/4a-hal/4a-hal-manager/4a-hal-manager-cb.h
+++ /dev/null
@@ -1,36 +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.
- */
-
-#ifndef _HALMGR_CB_INCLUDE_
-#define _HALMGR_CB_INCLUDE_
-
-#include <stdio.h>
-
-#include <afb/afb-binding.h>
-
-// Event handler
-void HalMgrDispatchApiEvent(afb_api_t apiHandle, const char *evtLabel, json_object *eventJ);
-
-// Exported verbs callbacks
-void HalMgrPing(afb_req_t request);
-void HalMgrLoaded(afb_req_t request);
-void HalMgrLoad(afb_req_t request);
-void HalMgrUnload(afb_req_t request);
-void HalMgrSubscribeEvent(afb_req_t request);
-void HalMgrUnsubscribeEvent(afb_req_t request);
-
-#endif /* _HALMGR_CB_INCLUDE_ */ \ No newline at end of file
diff --git a/4a-hal/4a-hal-manager/4a-hal-manager.c b/4a-hal/4a-hal-manager/4a-hal-manager.c
deleted file mode 100644
index 4d2fbf1..0000000
--- a/4a-hal/4a-hal-manager/4a-hal-manager.c
+++ /dev/null
@@ -1,168 +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 <afb/afb-binding.h>
-
-#include "4a-hal-utilities-data.h"
-#include "4a-hal-utilities-verbs-loader.h"
-
-#include "../4a-internals-hal/4a-internals-hal-api-loader.h"
-
-#include "4a-hal-manager.h"
-#include "4a-hal-manager-cb.h"
-
-// Default api to print log when apihandle not available
-afb_api_t AFB_default;
-
-// Local (static) Hal manager data structure
-static struct HalMgrData localHalMgrGlobalData;
-
-/*******************************************************************************
- * HAL Manager verbs table *
- ******************************************************************************/
-
-// Hal manager exported verbs
-afb_verb_t HalManagerApiStaticVerbs[] =
-{
- /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */
- { .verb = "ping", .callback = HalMgrPing, .info = "Ping test"},
- { .verb = "loaded", .callback = HalMgrLoaded, .info = "Show loaded HAL"},
- { .verb = "load", .callback = HalMgrLoad, .info = "Load an external HAL to HAL Manager"},
- { .verb = "unload", .callback = HalMgrUnload, .info = "Unload an external HAL to HAL Manager"},
- { .verb = "subscribe", .callback = HalMgrSubscribeEvent, .info = "Subscribe to an event"},
- { .verb = "unsuscribe", .callback = HalMgrUnsubscribeEvent, .info = "Unsubscribe to an event"},
- { .verb = NULL } // Marker for end of the array
-};
-
-/*******************************************************************************
- * HAL Manager get 'HalData' linked list *
- from HAL list function *
- ******************************************************************************/
-
-struct HalData **HalMngGetHalDataList(void)
-{
- return &localHalMgrGlobalData.halDataList;
-}
-
-/*******************************************************************************
- * Dynamic API functions for hal manager *
- ******************************************************************************/
-
-static int HalMgrInitApi(afb_api_t apiHandle)
-{
- struct HalData *currentHalData;
- struct HalMgrData *halMgrData;
-
- 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
- halMgrData = (struct HalMgrData *) afb_api_get_userdata(apiHandle);
- if(! halMgrData)
- return -2;
-
- if(HalUtlInitializeHalMgrData(apiHandle, halMgrData, HAL_MANAGER_API_NAME, HAL_MANAGER_API_INFO))
- return -3;
-
- currentHalData = halMgrData->halDataList;
-
- while(currentHalData) {
- if(! currentHalData->apiName)
- return -4;
- else if(afb_api_require_api(apiHandle, currentHalData->apiName, 1))
- return -5;
-
- currentHalData = currentHalData->next;
- }
-
- return 0;
-}
-
-static int HalMgrLoadApi(void *cbdata, afb_api_t apiHandle)
-{
- struct HalMgrData *halMgrData;
-
- if(! cbdata || ! apiHandle)
- return -1;
-
- halMgrData = (struct HalMgrData *) cbdata;
-
- // Save closure as api's data context
- afb_api_set_userdata(apiHandle, halMgrData);
-
- // Add static controls verbs
- if(HalUtlLoadVerbs(apiHandle, HalManagerApiStaticVerbs)) {
- AFB_API_ERROR(apiHandle, "Load section : fail to register static verbs");
- return 1;
- }
-
- // Declare an event manager for Hal Manager
- afb_api_on_event(apiHandle, HalMgrDispatchApiEvent);
-
- // Init Api function (does not receive user closure ???)
- afb_api_on_init(apiHandle, HalMgrInitApi);
-
- afb_api_seal(apiHandle);
-
- return 0;
-}
-
-int HalMgrCreateApi(afb_api_t apiHandle, struct HalMgrData *halMgrData)
-{
- if(! apiHandle || ! halMgrData)
- return -1;
-
- // Create one API
- return afb_api_new_api(apiHandle, HAL_MANAGER_API_NAME, HAL_MANAGER_API_INFO, 1, HalMgrLoadApi, halMgrData) ? 0 : -1;
-}
-
-/*******************************************************************************
- * Startup function *
- ******************************************************************************/
-
-int afbBindingEntry(afb_api_t apiHandle)
-{
- int status = 0, rc;
-
- if(! apiHandle)
- return -1;
-
- // Hugely hack to make all V2 AFB_DEBUG to work in fileutils
- AFB_default = apiHandle;
-
- AFB_API_NOTICE(apiHandle, "Binding start");
-
- // Load Hal-Manager using Api v3
- rc = HalMgrCreateApi(apiHandle, &localHalMgrGlobalData);
- if(rc < 0)
- status--;
-
- // Load internals Hal using Api v3
- rc = InternalHalCreateAllApi(apiHandle, &localHalMgrGlobalData);
- if(rc < 0)
- status -= rc;
-
- return status;
-} \ No newline at end of file
diff --git a/4a-hal/4a-hal-manager/4a-hal-manager.h b/4a-hal/4a-hal-manager/4a-hal-manager.h
deleted file mode 100644
index 4a53bdd..0000000
--- a/4a-hal/4a-hal-manager/4a-hal-manager.h
+++ /dev/null
@@ -1,29 +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.
- */
-
-#ifndef _HALMGR_BINDING_INCLUDE_
-#define _HALMGR_BINDING_INCLUDE_
-
-#include <stdio.h>
-
-#define HAL_MANAGER_API_NAME "4a-hal-manager"
-#define HAL_MANAGER_API_INFO "Manager for 4A HAL APIs"
-
-// HAL Manager get 'HalData' linked list
-struct HalData **HalMngGetHalDataList(void);
-
-#endif /* _HALMGR_BINDING_INCLUDE_ */ \ No newline at end of file