diff options
Diffstat (limited to 'src/4a-internals-hal/4a-internals-hal-cb.c')
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-cb.c | 84 |
1 files changed, 16 insertions, 68 deletions
diff --git a/src/4a-internals-hal/4a-internals-hal-cb.c b/src/4a-internals-hal/4a-internals-hal-cb.c index 34fbe74..65ff96d 100644 --- a/src/4a-internals-hal/4a-internals-hal-cb.c +++ b/src/4a-internals-hal/4a-internals-hal-cb.c @@ -37,15 +37,11 @@ void InternalHalDispatchApiEvent(afb_api_t apiHandle, const char *evtLabel, json_object *eventJ) { - int numid, idx = 0, cardidx; + int error; CtlConfigT *ctrlConfig; - CtlSourceT source; struct HalData *currentHalData; - struct InternalHalAlsaMap *currentHalMapControl; - - json_object *valuesJ, *normalizedValuesJ; AFB_API_DEBUG(apiHandle, "Evtname=%s [msg=%s]", evtLabel, json_object_get_string(eventJ)); @@ -61,79 +57,31 @@ void InternalHalDispatchApiEvent(afb_api_t apiHandle, const char *evtLabel, json return; } - // Extract sound card index from event - while(evtLabel[idx] != '\0' && evtLabel[idx] != ':') - idx++; - - if(evtLabel[idx] != '\0' && - (sscanf(&evtLabel[idx + 1], "%d", &cardidx) == 1)) { - if(wrap_json_unpack(eventJ, "{s:i s:o}", "id", &numid, "val", &valuesJ)) { + if((strlen(evtLabel) > ALSACORE_API_NAME_LENGTH) && + ! strncmp(evtLabel, ALSACORE_API, ALSACORE_API_NAME_LENGTH)) { + error = InternalHalHandleAlsaCoreEvents(apiHandle, evtLabel, eventJ, currentHalData); + if(error < 0) { AFB_API_ERROR(apiHandle, - "Invalid alsacore event received label=%s value=%s", + "Error %i caught when tried to handle alsacore event evtname=%s [msg=%s]", + error, evtLabel, json_object_get_string(eventJ)); return; } - - if(cds_list_empty(¤tHalData->internalHalData->halMapListHead)) { - AFB_API_ERROR(apiHandle, "No halmap data is available, cannot handle alsacore event"); - return; + else if(error > 0) { + AFB_API_INFO(apiHandle, + "Warning %i raised when tried to handle alsacore event evtname=%s [msg=%s]", + error, + evtLabel, + json_object_get_string(eventJ)); } - - // Search for corresponding numid in ALSA controls list, if found, launch callback (if available) - cds_list_for_each_entry(currentHalMapControl, ¤tHalData->internalHalData->halMapListHead, node) { - if(currentHalMapControl->cardNb == cardidx && - currentHalMapControl->ctl.alsaCtlProperties && - currentHalMapControl->ctl.numid == numid) { - if(currentHalMapControl->action) { - memset(&source, 0, sizeof(CtlSourceT)); - source.uid = currentHalMapControl->action->uid; - source.api = currentHalMapControl->action->api; - - (void) ActionExecOne(&source, currentHalMapControl->action, valuesJ); - } - else if(currentHalMapControl->actionJ) { - AFB_API_WARNING(apiHandle, - "The alsa control id '%i' is corresponding to a known control which " - "has a registered action, but action is not ready to be executed", - numid); - return; - } - else { - AFB_API_NOTICE(apiHandle, - "The alsa control id '%i' is corresponding to a known control " - "but without any action registered", - numid); - } - - if(! currentHalMapControl->alsaControlEvent || - InternalHalConvertJsonValues(apiHandle, - currentHalMapControl->ctl.alsaCtlProperties, - valuesJ, - &normalizedValuesJ, - CONVERSION_ALSACORE_TO_NORMALIZED) || - (afb_event_push(currentHalMapControl->alsaControlEvent, normalizedValuesJ) < 0)) { - AFB_API_ERROR(apiHandle, - "Couldn't generate an event for known halmap %s (alsa control id %i)", - currentHalMapControl->uid, - currentHalMapControl->ctl.numid); - } - - return; - } + else { + return; } - - AFB_API_WARNING(apiHandle, - "Alsacore event with an unrecognized numid: %i, evtname=%s [msg=%s]", - numid, - evtLabel, - json_object_get_string(eventJ)); - - return; } AFB_API_INFO(apiHandle, - "Not an alsacore event '%s' [msg=%s]", + "Not an internally handled event '%s' [msg=%s]", evtLabel, json_object_get_string(eventJ)); |