summaryrefslogtreecommitdiffstats
path: root/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2018-06-03 19:16:32 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2018-10-08 15:51:00 +0200
commit67fc2c25d727888cb45a847971771f34674b68ff (patch)
tree4fab47f096de6a897f8f33028ad8072d7bd07815 /4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c
parent70108117e5f392eff2710d5d6a0cd04e400e4cde (diff)
Handle hal status using card presence and mixer init
Test audio card presence at hal startup using alsacore call. Handling a new state of hal. Move alsacore link files into 4a-hal-controllers. Check state of hal before mixer initialization call. Actualize hal state if mixer initlialization ends well. Add a sndCardId filed to 'SpecificHalData' structure which will contain audio card if (from alsa). Change-Id: I2e82a14ee6ba6e63f06fe2b498587783941b7b98 Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c')
-rw-r--r--4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c
new file mode 100644
index 0000000..37d6447
--- /dev/null
+++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-alsacore-link.c
@@ -0,0 +1,79 @@
+/*
+ * 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 <stdbool.h>
+
+#include "../4a-hal-utilities/4a-hal-utilities-data.h"
+#include "../4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h"
+
+#include "4a-hal-controllers-alsacore-link.h"
+
+/*******************************************************************************
+ * HAL controllers alsacore calls funtions *
+ ******************************************************************************/
+
+bool HalCtlsGetCardIdByCardPath(afb_dynapi *apiHandle, struct SpecificHalData *currentCtlHalData)
+{
+ int *cardId;
+
+ char *cardIdString = NULL;
+ char **returnedStatus, **returnedInfo;
+
+ enum CallError returnedError;
+
+ json_object *toSendJ, *returnJ, *responsJ, *devidJ;
+
+ cardId = alloca(sizeof(int));
+ *cardId = -1;
+
+ wrap_json_pack(&toSendJ, "{s:s}", "devpath", currentCtlHalData->sndCard);
+
+ if(afb_dynapi_call_sync(apiHandle, ALSACORE_API, ALSACORE_GETINFO_VERB, toSendJ, &returnJ)) {
+ returnedStatus = alloca(sizeof(char *));
+ returnedInfo = alloca(sizeof(char *));
+
+ returnedError = HalUtlHandleAppFwCallError(apiHandle, ALSACORE_API, ALSACORE_GETINFO_VERB, returnJ, returnedStatus, returnedInfo);
+ AFB_DYNAPI_WARNING(apiHandle,
+ "Error %i during call to verb %s of %s api",
+ (int) returnedError,
+ ALSACORE_GETINFO_VERB,
+ ALSACORE_API);
+ }
+ else if(json_object_object_get_ex(returnJ, "response", &responsJ)) {
+ if(json_object_object_get_ex(responsJ, "devid", &devidJ) && json_object_is_type(devidJ, json_type_string)) {
+ cardIdString = (char *) json_object_get_string(devidJ);
+ if(sscanf(cardIdString, "hw:%i", cardId) <= 0)
+ AFB_DYNAPI_WARNING(apiHandle, "Couldn't get valid devid from string: '%s'", cardIdString);
+ }
+ else {
+ AFB_DYNAPI_WARNING(apiHandle, "Response devid is not present/valid");
+ }
+
+ currentCtlHalData->sndCardId = *cardId;
+
+ return true;
+ }
+
+ currentCtlHalData->sndCardId = *cardId;
+
+ return false;
+}
+