diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-05-29 14:00:43 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-10-08 15:51:00 +0200 |
commit | fe2759e55720c0927726cb4235e3e203b245998f (patch) | |
tree | e0a2760b7033e0fe9c280ba13a9b54317ee87da3 | |
parent | c82bd2a432a8c56015e0ab377a467ff5c4c85b66 (diff) |
Use a structure to store ctl hal specific data
To avoid multiple variables at NULL in specific hal data,
use a structure to store all controller hal specific data.
These data won't be use if the hal is external (registered).
Example of controller hal specific data :
- Mixer api name
- Mixer initialization json
- Mixer streams names and card id
...
Change-Id: Ifc4823d5ea21ed408b4ecc25b870cad74d3b2173
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
-rw-r--r-- | 4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c | 11 | ||||
-rw-r--r-- | 4a-hal/4a-hal-utilities/4a-hal-utilities-data.c | 31 | ||||
-rw-r--r-- | 4a-hal/4a-hal-utilities/4a-hal-utilities-data.h | 27 |
3 files changed, 61 insertions, 8 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 index a20297b..bf7ccbe 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-api-loader.c @@ -86,7 +86,7 @@ static int HalCtlsInitOneApi(afb_dynapi *apiHandle) return -3; // Fill SpecificHalDatadata structure - currentCtlHalData->internal = true; + currentCtlHalData->internal = (unsigned int) true; currentCtlHalData->status = HAL_STATUS_UNAVAILABLE; currentCtlHalData->apiName = (char *) ctrlConfig->api; @@ -97,8 +97,8 @@ static int HalCtlsInitOneApi(afb_dynapi *apiHandle) currentCtlHalData->version = (char *) ctrlConfig->version; currentCtlHalData->date = (char *) ctrlConfig->date; - currentCtlHalData->apiHandle = apiHandle; - currentCtlHalData->ctrlConfig = ctrlConfig; + currentCtlHalData->ctlHalSpecificData->apiHandle = apiHandle; + currentCtlHalData->ctlHalSpecificData->ctrlConfig = ctrlConfig; // TODO JAI: Search for hw sndCard // TODO JAI: Update alsa command of HalCtl to use alsa-softmixer/alsa-core data @@ -160,12 +160,17 @@ int HalCtlsCreateApi(afb_dynapi *apiHandle, char *path, struct HalMgrData *HalMg return -3; } + // Allocation of current hal controller data currentCtlHalData = HalUtlAddHalApiToHalList(HalMgrGlobalData); if(! currentCtlHalData) return -4; + // Stores current hal controller data in controller config ctrlConfig->external = (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 (Pre-V3 return code ToBeChanged) return afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, HalCtlsLoadOneApi, ctrlConfig); } diff --git a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.c b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.c index 811d11d..6db24b9 100644 --- a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.c +++ b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.c @@ -26,6 +26,30 @@ #include "4a-hal-utilities-data.h" /******************************************************************************* + * Specfic Hal controller streams data handling functions * + ******************************************************************************/ + +uint8_t HalUtlRemoveAllCtlHalStreamsData(struct CtlHalStreamsDataT *ctlHalStreamsData) +{ + unsigned int cpt; + + if(! ctlHalStreamsData) + return -1; + + if(! ctlHalStreamsData->count) + return -2; + + for(cpt = 0; cpt < ctlHalStreamsData->count; cpt++) { + free(ctlHalStreamsData->data[cpt].name); + free(ctlHalStreamsData->data[cpt].cardId); + } + + free(ctlHalStreamsData->data); + + return 0; +} + +/******************************************************************************* * Specfic Hal data handling functions * ******************************************************************************/ @@ -94,7 +118,12 @@ uint8_t HalUtlRemoveSelectedHalFromList(struct HalMgrData *HalMgrGlobalData, str free(matchingApi->author); free(matchingApi->version); free(matchingApi->date); - }; + } + else { + HalUtlRemoveAllCtlHalStreamsData(&matchingApi->ctlHalSpecificData->ctlHalStreamsData); + + free(matchingApi->ctlHalSpecificData); + } free(matchingApi); diff --git a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h index ab4c8b3..9514571 100644 --- a/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h +++ b/4a-hal/4a-hal-utilities/4a-hal-utilities-data.h @@ -31,22 +31,41 @@ enum HalStatus { HAL_STATUS_AVAILABLE=1, }; +struct CtlHalStreamData { + char *name; + char *cardId; +}; + +struct CtlHalStreamsDataT { + struct CtlHalStreamData *data; + unsigned int count; +}; + +struct CtlHalSpecificData { + char *mixerApiName; + json_object *halMixerJ; + + struct CtlHalStreamsDataT ctlHalStreamsData; + // TODO JAI : add structure to hold halmap section data + + afb_dynapi *apiHandle; + CtlConfigT *ctrlConfig; +}; + // Structure to store specific hal (controller or external) data struct SpecificHalData { char *apiName; enum HalStatus status; char *sndCard; char *info; - uint8_t internal; + unsigned int internal; char *author; char *version; char *date; - // Can be beefed up if needed - afb_dynapi *apiHandle; // Can be NULL if external api - CtlConfigT *ctrlConfig; // Can be NULL if external api + struct CtlHalSpecificData *ctlHalSpecificData; // Can be NULL if external api struct SpecificHalData *next; }; |