diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-06-18 15:51:33 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-10-08 15:53:53 +0200 |
commit | 2a283187230646b2537c1fee1f6dbe1239174d7c (patch) | |
tree | 45ae35f3dc3fd8c740c6e40e2737fd26ef6c30aa | |
parent | ab16006968af9c01139eea48374708c5a7148503 (diff) |
Optimize alsacore event handler
Optimize alsacore event handler by avoiding generating a string to detect
an alsacore event.
Change-Id: I7498e99741b2b7095076016143ec8be6520ee122
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
-rw-r--r-- | 4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c index cc7b7ff..acf3ce0 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-cb.c @@ -37,11 +37,7 @@ void HalCtlsDispatchApiEvent(afb_dynapi *apiHandle, const char *evtLabel, json_object *eventJ) { - int numid, idx; - - char cardIdString[6]; - - char *alsaCoreLabel; + int numid, idx = 0, cardidx; CtlConfigT *ctrlConfig; CtlSourceT source; @@ -65,17 +61,19 @@ void HalCtlsDispatchApiEvent(afb_dynapi *apiHandle, const char *evtLabel, json_o return; } - snprintf(cardIdString, 6, "hw:%i", currentHalData->sndCardId); - currentHalAlsaCtlsT = currentHalData->ctlHalSpecificData->ctlHalAlsaMapT; + // Extract sound card index from event + while(evtLabel[idx] != '\0' && evtLabel[idx] != ':') + idx++; - if(asprintf(&alsaCoreLabel, "%s/%s", ALSACORE_API, cardIdString) < 0) { - AFB_ApiError(apiHandle, "%s: Didn't succeed to generate string for alascore events catching", __func__); - return; - } + if(evtLabel[idx] != '\0' && + sscanf(&evtLabel[idx + 1], "%d", &cardidx) == 1 && + currentHalData->sndCardId == cardidx) { + if(wrap_json_unpack(eventJ, "{s:i s:o !}", "id", &numid, "val", &valuesJ)) { + AFB_ApiError(apiHandle, "%s: Invalid Alsa Event label=%s value=%s", __func__, evtLabel, json_object_get_string(eventJ)); + return; + } - if(strcmp(evtLabel, alsaCoreLabel) == 0 && - ! wrap_json_unpack(eventJ, "{s:i s:o !}", "id", &numid, "val", &valuesJ)) { - free(alsaCoreLabel); + currentHalAlsaCtlsT = currentHalData->ctlHalSpecificData->ctlHalAlsaMapT; // Search for corresponding numid in halCtls, if found, launch callback (if available) for(idx = 0; idx < currentHalAlsaCtlsT->ctlsCount; idx++) { @@ -107,8 +105,6 @@ void HalCtlsDispatchApiEvent(afb_dynapi *apiHandle, const char *evtLabel, json_o return; } - free(alsaCoreLabel); - AFB_ApiNotice(apiHandle, "%s: not an alsacore event '%s' [msg=%s]", __func__, @@ -231,8 +227,8 @@ int HalCtlsHandleOneHalMapObject(AFB_ApiT apiHandle, char *cardId, struct CtlHal if(alsaMap->ctl.alsaCtlCreation) { if(HalCtlsCreateAlsaCtl(apiHandle, cardId, &alsaMap->ctl)) { AFB_ApiError(apiHandle, - "%s: An error happened when trying to create a new alsa control", - __func__); + "%s: An error happened when trying to create a new alsa control", + __func__); return -1; } } |