diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-04-19 10:24:11 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-05-24 12:06:20 +0200 |
commit | 735e7a39cc509f74f85c48b6a3db50e08c377752 (patch) | |
tree | fd57e17b915881b8793791fee5feeea3385f28bd /4a-hal/4a-hal-manager | |
parent | 68138a3ec7a78ad7304d291ff92d8e5292847c4e (diff) |
Reorganize repository directories
Reorganize repository directories to clarify code use.
BUG-AGL: SPEC-2329
Change-Id: Ia9be0c1818cb2e331e75b51a87fcb2820407c1d8
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-manager')
-rw-r--r-- | 4a-hal/4a-hal-manager/4a-hal-manager-cb.c | 273 | ||||
-rw-r--r-- | 4a-hal/4a-hal-manager/4a-hal-manager-cb.h | 36 | ||||
-rw-r--r-- | 4a-hal/4a-hal-manager/4a-hal-manager.c | 168 | ||||
-rw-r--r-- | 4a-hal/4a-hal-manager/4a-hal-manager.h | 29 |
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 |