/* * Copyright (C) 2018 "IoT.bzh" * Author Jonathan Aillet * * 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 _HAL_UTILITIES_DATA_INCLUDE_ #define _HAL_UTILITIES_DATA_INCLUDE_ #include #include #include #include #include "4a-hal-utilities-alsa-data.h" #define HAL_STREAM_UPDATES_EVENT_NAME "stream-updates" // Enum for hal status enum HalStatus { HAL_STATUS_UNAVAILABLE=0, HAL_STATUS_AVAILABLE=1, HAL_STATUS_READY=2 }; // Structure to store stream data struct InternalHalMixerData { char *verb; char *verbToCall; char *streamCardId; afb_event_t event; struct InternalHalMixerData *next; }; // Structure to store specific internal hal data struct InternalHalData { char *mixerApiName; char *prefix; json_object *halMixerJ; struct InternalHalMixerData *streamsData; afb_event_t streamUpdates; struct InternalHalMixerData *playbacksData; struct InternalHalMixerData *capturesData; struct InternalHalAlsaMapT *alsaMapT; afb_api_t apiHandle; CtlConfigT *ctrlConfig; }; // Structure to store specific hal (internal or external) data struct HalData { char *apiName; enum HalStatus status; char *sndCardPath; int sndCardId; char *info; unsigned int internal; char *author; char *version; char *date; // Can be beefed up if needed struct InternalHalData *internalHalData; // Can be NULL if external api struct HalData *next; }; // Structure to store hal manager data struct HalMgrData { char *apiName; char *info; afb_api_t apiHandle; struct HalData *halDataList; }; // Internal Hal - Streams data handling functions struct InternalHalMixerData *HalUtlAddMixerDataToMixerDataList(struct InternalHalMixerData **mixerDataList); int HalUtlRemoveSelectedMixerData(struct InternalHalMixerData **mixerDataList, struct InternalHalMixerData *mixerDataToRemove); int HalUtlRemoveAllMixerData(struct InternalHalMixerData **mixerDataList); int HalUtlGetNumberOfMixerDataInList(struct InternalHalMixerData **mixerDataList); struct InternalHalMixerData *HalUtlSearchMixerDataByProperties(struct InternalHalMixerData **mixerDataList, char *verb, char *verbToCall, char *streamCardId); // Hal data handling functions struct HalData *HalUtlAddHalToHalList(struct HalData **halDataList); int HalUtlRemoveSelectedHalFromList(struct HalData **halDataList, struct HalData *halToRemove); int HalUtlRemoveAllHalFromList(struct HalData **halDataList); int HalUtlGetNumberOfHalInList(struct HalData **halDataList); struct HalData *HalUtlSearchHalDataByApiName(struct HalData **halDataList, char *apiName); struct HalData *HalUtlSearchReadyHalDataByCardId(struct HalData **halDataList, int cardId); // Hal Manager data handling functions int HalUtlInitializeHalMgrData(afb_api_t apiHandle, struct HalMgrData *halMgrData, char *apiName, char *info); void HalUtlRemoveHalMgrData(struct HalMgrData *halMgrData); #endif /* _HAL_UTILITIES_DATA_INCLUDE_ */