diff options
author | fulup <fulup.arfoll@iot.bzh> | 2017-07-30 21:11:00 +0200 |
---|---|---|
committer | fulup <fulup.arfoll@iot.bzh> | 2017-07-30 21:11:00 +0200 |
commit | 94a12b24d1712573607b78cd78f47e998a0323d4 (patch) | |
tree | e7407a2aca62fc25bfb95300f94db95664d4aeb0 | |
parent | da4f9b32ad32593aec2635da47077f0c05da71be (diff) |
First Dev version with Volume Ramping
-rw-r--r-- | ALSA-afb/Alsa-AddCtl.c | 138 | ||||
-rw-r--r-- | ALSA-afb/Alsa-RegEvt.c | 47 | ||||
-rw-r--r-- | ALSA-afb/Alsa-SetGet.c | 31 | ||||
-rw-r--r-- | HAL-afb/HAL-interface/CMakeLists.txt | 2 | ||||
-rw-r--r-- | HAL-afb/HAL-interface/hal-interface.c | 325 | ||||
-rw-r--r-- | HAL-afb/HAL-interface/hal-interface.h | 47 | ||||
-rw-r--r-- | HAL-afb/HAL-interface/hal-volramp.c | 166 | ||||
-rw-r--r-- | HAL-afb/HAL-interface/hal-volume.c (renamed from HAL-afb/HAL-interface/hal-volmap.c) | 7 | ||||
-rw-r--r-- | HAL-afb/HAL-plugin/HalPlugCtl.c | 2 | ||||
-rw-r--r-- | HAL-afb/HDA-intel/IntelHdaHAL.c | 33 | ||||
-rw-r--r-- | HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c | 45 | ||||
-rw-r--r-- | HAL-afb/Unicens-USB/UnicensHAL.c | 15 | ||||
-rw-r--r-- | HAL-afb/Unicens-USB/UnicensVol.c | 4 | ||||
-rw-r--r-- | Shared-Interface/audio-interface.h | 35 | ||||
m--------- | conf.d/app-templates | 0 | ||||
-rw-r--r-- | conf.d/cmake/config.cmake | 2 | ||||
-rw-r--r-- | htdocs/CMakeLists.txt | 4 | ||||
-rw-r--r-- | htdocs/alsa-core.html | 14 | ||||
-rw-r--r-- | nbproject/configurations.xml | 486 | ||||
-rw-r--r-- | nbproject/project.xml | 8 |
20 files changed, 813 insertions, 598 deletions
diff --git a/ALSA-afb/Alsa-AddCtl.c b/ALSA-afb/Alsa-AddCtl.c index b7e3d90..7a68ab5 100644 --- a/ALSA-afb/Alsa-AddCtl.c +++ b/ALSA-afb/Alsa-AddCtl.c @@ -29,7 +29,7 @@ #include "Alsa-ApiHat.h" // Performs like a toggle switch for attenuation, because they're bool (ref:user-ctl-element-set.c) -static const unsigned int *allocate_bool_elem_set_tlv (void) { +static const unsigned int *allocate_bool_fake_tlv (void) { static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(range, -10000, 0); unsigned int *tlv= malloc(sizeof(range)); if (tlv == NULL) return NULL; @@ -37,8 +37,30 @@ static const unsigned int *allocate_bool_elem_set_tlv (void) { return tlv; } +static const unsigned int *allocate_int_dbscale_tlv (int min, int step, int mute) { + // SNDRV_CTL_TLVD_DECLARE_DB_SCALE(range, min, step, mute); + size_t tlvSize = sizeof(4*sizeof(int*)); + unsigned int *tlv= malloc(tlvSize); + tlv[0]=SNDRV_CTL_TLVT_DB_LINEAR; + tlv[1]=(int)tlvSize; + tlv[2]=min*100; + tlv[3] = ((step*100) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | ((mute*100) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0); + return tlv; +} + +static const unsigned int *allocate_int_linear_tlv (int max, int min) { + // SNDRV_CTL_TLVD_DECLARE_DB_LINEAR (range, min, max); + size_t tlvSize = sizeof(4*sizeof(int*)); + unsigned int *tlv= malloc(tlvSize); + tlv[0]=SNDRV_CTL_TLVT_DB_SCALE; + tlv[1]=(int)tlvSize; + tlv[2]=-min*100; + tlv[3]=max*100; + return tlv; +} + STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_object *ctlJ, halQueryMode queryMode) { - int err, ctlNumid; + int err, ctlNumid, ctlValue; json_object *tmpJ; const char *ctlName; ctlRequestT ctlRequest; @@ -53,7 +75,7 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje json_object_object_get_ex (ctlJ, "name" , &tmpJ); ctlName = json_object_get_string(tmpJ); - json_object_object_get_ex (ctlJ, "numid" , &tmpJ); + json_object_object_get_ex (ctlJ, "ctl" , &tmpJ); ctlNumid = json_object_get_int(tmpJ); if (!ctlNumid && !ctlName) { @@ -70,17 +92,30 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje if (!err) { snd_ctl_elem_id_alloca(&elemId); snd_ctl_elem_info_get_id(elemInfo, elemId); - if (ctlNumid) goto OnSucessExit; // hardware control nothing todo + if (snd_ctl_elem_info_get_numid(elemInfo)) goto OnSucessExit; // hardware control nothing todo else { // user created kcontrol should be removable err = snd_ctl_elem_remove(ctlDev, elemId); - AFB_NOTICE ("ctlName=%s numid=%d fail to reset", snd_ctl_elem_info_get_name(elemInfo), snd_ctl_elem_info_get_numid(elemInfo)); - goto OnErrorExit; + if (err < 0) { + afb_req_fail_f (request, "ctl-reset-fail", "ctlName=%s numid=%d fail to reset", snd_ctl_elem_info_get_name(elemInfo), snd_ctl_elem_info_get_numid(elemInfo)); + goto OnErrorExit; + } else elemInfo=NULL; // we remove control elemInfo is not valid anymore } } + + // Control was deleted need to refresh elemInfo + if (!elemInfo) { + snd_ctl_elem_info_alloca(&elemInfo); + if (ctlName) snd_ctl_elem_info_set_name (elemInfo, ctlName); + snd_ctl_elem_info_set_interface (elemInfo, SND_CTL_ELEM_IFACE_MIXER); + snd_ctl_elem_info(ctlDev, elemInfo); + } // default for json_object_get_int is zero json_object_object_get_ex (ctlJ, "min" , &tmpJ); ctlMin = json_object_get_int(tmpJ); + + json_object_object_get_ex (ctlJ, "value" , &tmpJ); + ctlValue = json_object_get_int(tmpJ); json_object_object_get_ex (ctlJ, "max" , &tmpJ); if (!tmpJ) ctlMax=1; @@ -91,7 +126,7 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje else ctlStep = json_object_get_int(tmpJ); json_object_object_get_ex (ctlJ, "count" , &tmpJ); - if (!tmpJ) ctlCount=2; + if (!tmpJ) ctlCount=1; else ctlCount = json_object_get_int(tmpJ); json_object_object_get_ex (ctlJ, "snddev" , &tmpJ); @@ -113,17 +148,17 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje switch (ctlType) { case SND_CTL_ELEM_TYPE_BOOLEAN: - err = snd_ctl_add_boolean_elem_set(ctlDev, elemInfo, 1, ctlCount); + err = snd_ctl_add_boolean_elem_set(ctlDev, elemInfo, ctlCount, ctlCount); if (err) { afb_req_fail_f (request, "ctl-invalid-bool", "devid=%s crl=%s invalid boolean data", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); goto OnErrorExit; } - elemTlv = allocate_bool_elem_set_tlv(); + elemTlv = allocate_bool_fake_tlv(); // Provide FALSE as default value for (int idx=0; idx < ctlCount; idx ++) { - snd_ctl_elem_value_set_boolean (elemValue, idx, 1); + snd_ctl_elem_value_set_boolean (elemValue, idx, ctlValue); } break; @@ -136,27 +171,79 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje // Provide 0 as default value for (int idx=0; idx < ctlCount; idx ++) { - snd_ctl_elem_value_set_integer (elemValue, idx, 0); - } + snd_ctl_elem_value_set_integer (elemValue, idx, ctlValue); + } + + // Fulup needed to be tested with some dB expert !!! + json_object *dbscaleJ; + if (json_object_object_get_ex (ctlJ, "dbscale" , &dbscaleJ)) { + if (json_object_get_type(dbscaleJ) != json_type_object) { + afb_req_fail_f (request, "ctl-invalid-dbscale", "devid=%s crl=%s invalid json in integer control", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); + goto OnErrorExit; + + json_object_object_get_ex (ctlJ, "min" , &tmpJ); + int min = json_object_get_int(tmpJ); + if (min >= 0) { + afb_req_fail_f (request, "ctl-invalid-dbscale", "devid=%s crl=%s min should be a negative number", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); + goto OnErrorExit; + } + + // default value 0=mute + json_object_object_get_ex (ctlJ, "max" , &tmpJ); + int max = json_object_get_int(tmpJ); + + // default value 1dB + json_object_object_get_ex (ctlJ, "step" , &tmpJ); + int step = json_object_get_int(tmpJ); + if (step <= 0) step=1; + + elemTlv = allocate_int_dbscale_tlv (min, max, step); + + } + } else { + // provide a fake linear TLV + elemTlv = allocate_int_linear_tlv (ctlMin, ctlMax); + } break; - case SND_CTL_ELEM_TYPE_INTEGER64: - err = snd_ctl_add_integer64_elem_set (ctlDev, elemInfo, 1, ctlCount, ctlMin, ctlMax, ctlStep); + + case SND_CTL_ELEM_TYPE_ENUMERATED: { + json_object *enumsJ; + json_object_object_get_ex (ctlJ, "enums" , &enumsJ); + if (json_object_get_type(enumsJ) != json_type_array) { + afb_req_fail_f (request, "ctl-missing-enums", "devid=%s crl=%s mandatory enum=xxx missing in enumerated control", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); + goto OnErrorExit; + } + + int length = json_object_array_length(enumsJ); + const char **enumlabels = malloc(length*sizeof(char*)); + + for (int jdx=0; jdx < length; jdx++) { + tmpJ = json_object_array_get_idx(enumsJ, jdx); + enumlabels[jdx] = json_object_get_string(tmpJ); + } + + err = snd_ctl_add_enumerated_elem_set (ctlDev, elemInfo, 1, ctlCount, length, enumlabels); if (err) { - afb_req_fail_f (request, "ctl-invalid-bool", "devid=%s crl=%s invalid boolean data", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); + afb_req_fail_f (request, "ctl-invalid-bool", "devid=%s crl=%s invalid enumerated control", snd_ctl_name(ctlDev), json_object_get_string(ctlJ)); goto OnErrorExit; } - + // Provide 0 as default value for (int idx=0; idx < ctlCount; idx ++) { - snd_ctl_elem_value_set_integer64 (elemValue, idx, 0); + snd_ctl_elem_value_set_enumerated (elemValue, idx, ctlValue); } - break; + + elemTlv = allocate_bool_fake_tlv(); - case SND_CTL_ELEM_TYPE_ENUMERATED: + break; + } + + // Long Term Waiting ToDoList + case SND_CTL_ELEM_TYPE_INTEGER64: case SND_CTL_ELEM_TYPE_BYTES: default: - afb_req_fail_f (request, "ctl-invalid-type", "crl=%s invalid/unknown type", json_object_get_string(ctlJ)); + afb_req_fail_f (request, "ctl-invalid-type", "crl=%s unsupported/unknown element type", json_object_get_string(ctlJ)); goto OnErrorExit; } @@ -177,7 +264,7 @@ STATIC json_object * addOneSndCtl(afb_req request, snd_ctl_t *ctlDev, json_obje afb_req_fail_f (request, "TLV-write-fail", "crl=%s numid=%d fail to write data error=%s", json_object_get_string(ctlJ), snd_ctl_elem_info_get_numid(elemInfo), snd_strerror(err)); goto OnErrorExit; } - } + } // return newly created as a JSON object OnSucessExit: @@ -225,9 +312,9 @@ PUBLIC void alsaAddCustomCtls(afb_req request) { switch (json_object_get_type(ctlsJ)) { case json_type_object: - ctlsValues= addOneSndCtl(request, ctlDev, ctlsJ, queryMode); - - break; + ctlsValues= addOneSndCtl(request, ctlDev, ctlsJ, queryMode); + if (!ctlsValues) goto OnErrorExit; + break; case json_type_array: ctlsValues= json_object_new_array(); @@ -235,6 +322,7 @@ PUBLIC void alsaAddCustomCtls(afb_req request) { json_object *ctlJ = json_object_array_get_idx (ctlsJ, idx); ctlValues= addOneSndCtl(request, ctlDev, ctlJ, queryMode) ; if (ctlValues) json_object_array_add (ctlsValues, ctlValues); + else goto OnErrorExit; } break; @@ -247,6 +335,6 @@ PUBLIC void alsaAddCustomCtls(afb_req request) { afb_req_success(request, ctlsValues, NULL); OnErrorExit: - if (ctlDev) snd_ctl_close(ctlDev); + if (ctlDev) snd_ctl_close(ctlDev); return; }
\ No newline at end of file diff --git a/ALSA-afb/Alsa-RegEvt.c b/ALSA-afb/Alsa-RegEvt.c index df6570a..add3944 100644 --- a/ALSA-afb/Alsa-RegEvt.c +++ b/ALSA-afb/Alsa-RegEvt.c @@ -71,7 +71,7 @@ OnErrorExit: // This routine is called when ALSA event are fired STATIC int sndCtlEventCB (sd_event_source* src, int fd, uint32_t revents, void* userData) { - int err; + int err, ctlNumid; evtHandleT *evtHandle = (evtHandleT*)userData; snd_ctl_event_t *eventId; json_object *ctlEventJ; @@ -79,12 +79,12 @@ STATIC int sndCtlEventCB (sd_event_source* src, int fd, uint32_t revents, void* int iface; int device; int subdev; - const char*devname; + const char*ctlName; ctlRequestT ctlRequest; snd_ctl_elem_id_t *elemId; if ((revents & EPOLLHUP) != 0) { - AFB_NOTICE( "SndCtl hanghup [car disconnected]"); + AFB_NOTICE("SndCtl hanghup [car disconnected]"); goto ExitOnSucess; } @@ -108,21 +108,30 @@ STATIC int sndCtlEventCB (sd_event_source* src, int fd, uint32_t revents, void* err = alsaGetSingleCtl (evtHandle->ctlDev, elemId, &ctlRequest, evtHandle->mode); if (err) goto OnErrorExit; + + // If CTL as a value use it as container for response + if (ctlRequest.valuesJ) ctlEventJ= ctlRequest.valuesJ; + else { + ctlEventJ = json_object_new_object(); + ctlNumid = snd_ctl_event_elem_get_numid(eventId); + json_object_object_add(ctlEventJ, "id",json_object_new_int (ctlNumid)); + } - iface = snd_ctl_event_elem_get_interface(eventId); - device = snd_ctl_event_elem_get_device(eventId); - subdev = snd_ctl_event_elem_get_subdevice(eventId); - devname= snd_ctl_event_elem_get_name(eventId); - - // proxy ctlevent as a binder event - ctlEventJ = json_object_new_object(); - json_object_object_add(ctlEventJ, "device" ,json_object_new_int (device)); - json_object_object_add(ctlEventJ, "subdev" ,json_object_new_int (subdev)); - if (evtHandle->mode < 2) { - json_object_object_add(ctlEventJ, "iface" ,json_object_new_int (iface)); - json_object_object_add(ctlEventJ, "devname",json_object_new_string (devname)); + if (evtHandle->mode >= QUERY_COMPACT) { + ctlName = snd_ctl_event_elem_get_name(eventId); + json_object_object_add(ctlEventJ, "name",json_object_new_string (ctlName)); + } + + if (evtHandle->mode >= QUERY_VERBOSE) { + iface = snd_ctl_event_elem_get_interface(eventId); + device = snd_ctl_event_elem_get_device(eventId); + subdev = snd_ctl_event_elem_get_subdevice(eventId); + json_object_object_add(ctlEventJ, "ifc" ,json_object_new_int (iface)); + json_object_object_add(ctlEventJ, "dev" ,json_object_new_int (device)); + json_object_object_add(ctlEventJ, "sub" ,json_object_new_int (subdev)); } - if (ctlRequest.valuesJ) (json_object_object_add(ctlEventJ, "value" ,ctlRequest.valuesJ)); + + AFB_DEBUG( "sndCtlEventCB=%s", json_object_get_string(ctlEventJ)); afb_event_push(evtHandle->afbevt, ctlEventJ); } @@ -234,7 +243,7 @@ PUBLIC void alsaEvtSubcribe (afb_req request) { // Subscribe to every Alsa CtlEvent send by a given board STATIC json_object *alsaProbeCardId (afb_req request) { char devid [10]; - const char *devname, *shortname, *longname; + const char *ctlName, *shortname, *longname; int card, err, index, idx; json_object *responseJ; snd_ctl_t *ctlDev; @@ -260,12 +269,12 @@ STATIC json_object *alsaProbeCardId (afb_req request) { // extract sound card information snd_ctl_card_info(ctlDev, cardinfo); index = snd_ctl_card_info_get_card(cardinfo); - devname = snd_ctl_card_info_get_id(cardinfo); + ctlName = snd_ctl_card_info_get_id(cardinfo); shortname= snd_ctl_card_info_get_name(cardinfo); longname = snd_ctl_card_info_get_longname(cardinfo); // check if short|long name match - if (!strcmp (sndname, devname)) break; + if (!strcmp (sndname, ctlName)) break; if (!strcmp (sndname, shortname)) break; if (!strcmp (sndname, longname)) break; } diff --git a/ALSA-afb/Alsa-SetGet.c b/ALSA-afb/Alsa-SetGet.c index 50b62ce..5a41ec1 100644 --- a/ALSA-afb/Alsa-SetGet.c +++ b/ALSA-afb/Alsa-SetGet.c @@ -618,7 +618,7 @@ PUBLIC int alsaGetSingleCtl (snd_ctl_t *ctlDev, snd_ctl_elem_id_t *elemId, ctlRe if (snd_ctl_elem_info_is_tlv_readable(elemInfo)) { unsigned int *tlv = alloca(TLV_BYTE_SIZE); if ((err = snd_ctl_elem_tlv_read(ctlDev, elemId, tlv, 4096)) < 0) { - fprintf (stderr, "Control %s element TLV read error\n", snd_strerror(err)); + AFB_NOTICE ("Control numid=%d err=%s element TLV read error\n", numid, snd_strerror(err)); goto OnErrorExit; } else { json_object_object_add (ctlRequest->valuesJ,"tlv", decodeTlv (tlv, TLV_BYTE_SIZE, queryMode)); @@ -642,15 +642,14 @@ STATIC void alsaSetGetCtls (ActionSetGetT action, afb_req request) { unsigned int ctlCount; snd_ctl_t *ctlDev; snd_ctl_elem_list_t *ctlList; - json_object *sndctls=json_object_new_array();; queryValuesT queryValues; - json_object *queryJ, *numidsJ; + json_object *queryJ, *numidsJ, *sndctls; queryJ = alsaCheckQuery (request, &queryValues); if (!queryJ) goto OnErrorExit; // Prase Numids + optional values - done= json_object_object_get_ex (queryJ, "numid" , &numidsJ); + done= json_object_object_get_ex (queryJ, "ctl" , &numidsJ); if (!done) queryValues.count=0; else { enum json_type jtype= json_object_get_type(numidsJ); @@ -701,6 +700,10 @@ STATIC void alsaSetGetCtls (ActionSetGetT action, afb_req request) { ctlRequest= alloca (sizeof(ctlRequestT)*(queryValues.count)); NumidsListParse (action, &queryValues, ctlRequest); } + + // if more than one crl requested prepare an array for response + if (queryValues.count!= 1 && action==ACTION_GET) sndctls=json_object_new_array(); + else sndctls=NULL; // Loop on all ctlDev controls for (int ctlIndex=0; ctlIndex < ctlCount; ctlIndex++) { @@ -745,7 +748,11 @@ STATIC void alsaSetGetCtls (ActionSetGetT action, afb_req request) { } if (err) status++; else { - if (action == ACTION_GET) json_object_array_add (sndctls, ctlRequest[jdx].valuesJ); + // Do not embed response in an array when only one ctl was requested + if (action == ACTION_GET) { + if (queryValues.count > 1) json_object_array_add (sndctls, ctlRequest[jdx].valuesJ); + else sndctls = ctlRequest[jdx].valuesJ; + } } } } @@ -755,16 +762,14 @@ STATIC void alsaSetGetCtls (ActionSetGetT action, afb_req request) { for (int jdx=0; jdx < queryValues.count; jdx++) { if (ctlRequest[jdx].used <= 0) { json_object *failctl = json_object_new_object(); - json_object_object_add (failctl, "numid", ctlRequest[jdx].jToken); - if (ctlRequest[jdx].valuesJ) json_object_object_add(failctl, "value", ctlRequest[jdx].valuesJ); - - AFB_NOTICE ("*** jToken=%s value=%s", json_object_get_string(ctlRequest[jdx].jToken), json_object_get_string(ctlRequest[jdx].valuesJ)); - - if (ctlRequest[jdx].numId == -1) json_object_object_add (failctl, "error", json_object_new_string ("Numid Invalid")); + if (ctlRequest[jdx].numId == -1) json_object_object_add (failctl, "warning", json_object_new_string ("Numid Invalid")); else { - if (ctlRequest[jdx].used == 0) json_object_object_add (failctl, "error", json_object_new_string ("Numid Does Not Exist")); - if (ctlRequest[jdx].used == -1) json_object_object_add (failctl, "error", json_object_new_string ("Value invalid")); + if (ctlRequest[jdx].used == 0) json_object_object_add (failctl, "warning", json_object_new_string ("Numid Does Not Exist")); + if (ctlRequest[jdx].used == -1) json_object_object_add (failctl, "warning", json_object_new_string ("Value Refused")); } + + json_object_object_add (failctl, "ctl", ctlRequest[jdx].jToken); + json_object_array_add (warningsJ, failctl); } /* WARNING!!!! Check with Jose why following put free valuesJ diff --git a/HAL-afb/HAL-interface/CMakeLists.txt b/HAL-afb/HAL-interface/CMakeLists.txt index c367c5c..d20a283 100644 --- a/HAL-afb/HAL-interface/CMakeLists.txt +++ b/HAL-afb/HAL-interface/CMakeLists.txt @@ -21,7 +21,7 @@ PROJECT_TARGET_ADD(hal-interface) # Define targets - ADD_LIBRARY(${TARGET_NAME} STATIC hal-volmap.c hal-interface.c) + ADD_LIBRARY(${TARGET_NAME} STATIC hal-volume.c hal-volramp.c hal-interface.c) # Library properties SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES OUTPUT_NAME halinterface) diff --git a/HAL-afb/HAL-interface/hal-interface.c b/HAL-afb/HAL-interface/hal-interface.c index f4fc8df..76cdbd8 100644 --- a/HAL-afb/HAL-interface/hal-interface.c +++ b/HAL-afb/HAL-interface/hal-interface.c @@ -21,24 +21,37 @@ #define _GNU_SOURCE // needed for vasprintf #include <string.h> #include "hal-interface.h" +#include <systemd/sd-event.h> -static alsaHalMapT *halCtls; -static const char *halDevid; - - +alsaHalSndCardT *halSndCard; STATIC const char *halCtlsLabels[] = { - [StartHalCrlTag] = "NOT_USED", - [Master_Playback_Volume] = "Master_Playback_Volume", - [Master_OnOff_Switch] = "Master_OnOff_Switch", - [Master_Playback_Ramp] = "Master_Playback_Ramp", - [PCM_Playback_Volume] = "PCM_Playback_Volume", - [PCM_Playback_Switch] = "PCM_Playback_Switch", - [Capture_Volume] = "Capture_Volume", - - [EndHalCrlTag] = "NOT_USED" - + [Master_Playback_Volume] = "Master_Playback_Volume", + [Master_OnOff_Switch] = "Master_OnOff_Switch", + [Master_Playback_Ramp]= "Master_Playback_Ramp", + [PCM_Playback_Volume] = "PCM_Playback_Volume", + [PCM_Playback_Switch] = "PCM_Playback_Switch", + [Capture_Volume] = "Capture_Volume", + + [Vol_Ramp] = "Volume_Ramp", + [Vol_Ramp_Set_Mode] = "Volume_Ramp_Mode", + [Vol_Ramp_Set_Delay] = "Volume_Ramp_Delay", + [Vol_Ramp_Set_Down] = "Volume_Ramp_Down", + [Vol_Ramp_Set_Up] = "Volume_Ramp_Up", + + [EndHalCrlTag] = NULL +}; + +PUBLIC char *halVolRampModes[] = { + + [RAMP_VOL_NONE] = "None", + [RAMP_VOL_NORMAL] = "Normal", + [RAMP_VOL_SMOOTH] = "Smooth", + [RAMP_VOL_EMERGENCY] = "Emergency", + + [EndHalVolMod] = NULL, + }; // Force specific HAL to depend on ShareHalLib @@ -54,6 +67,7 @@ STATIC void halSubscribe(afb_req request) { // Map HAL ctlName to ctlLabel STATIC int halCtlStringToIndex (const char* label) { + alsaHalMapT *halCtls= halSndCard->ctls; for (int idx = 0; halCtls[idx].tag != EndHalCrlTag; idx++) { if (!strcmp (halCtls[idx].label, label)) return idx; @@ -64,6 +78,7 @@ STATIC int halCtlStringToIndex (const char* label) { } STATIC int halCtlTagToIndex (halCtlsEnumT tag) { + alsaHalMapT *halCtls= halSndCard->ctls; for (int idx = 0; halCtls[idx].tag != EndHalCrlTag; idx++) { if (halCtls[idx].tag == tag) return idx; @@ -76,10 +91,11 @@ STATIC int halCtlTagToIndex (halCtlsEnumT tag) { // Return ALL HAL snd controls PUBLIC void halListCtls(afb_req request) { - struct json_object *ctlsHalJ = json_object_new_array(); + alsaHalMapT *halCtls= halSndCard->ctls; + json_object *ctlsHalJ = json_object_new_array(); for (int idx = 0; halCtls[idx].ctl.numid; idx++) { - struct json_object *ctlHalJ = json_object_new_object(); + json_object *ctlHalJ = json_object_new_object(); json_object_object_add(ctlHalJ, "label", json_object_new_string(halCtls[idx].label)); json_object_object_add(ctlHalJ, "tag" , json_object_new_int(halCtls[idx].tag)); @@ -91,8 +107,8 @@ PUBLIC void halListCtls(afb_req request) { afb_req_success (request, ctlsHalJ, NULL); } -STATIC int halGetCtlIndex (afb_req request, struct json_object*ctlInJ) { - struct json_object *tmpJ; +STATIC int halGetCtlIndex (afb_req request, json_object*ctlInJ) { + json_object *tmpJ; int tag, index, done; // check 1st short command mode [tag1, tag2, ...] @@ -127,7 +143,6 @@ STATIC int halGetCtlIndex (afb_req request, struct json_object*ctlInJ) { goto OnErrorExit; } - if (index < 0) goto OnErrorExit; // return corresponding lowlevel numid to querylist @@ -139,10 +154,48 @@ STATIC int halGetCtlIndex (afb_req request, struct json_object*ctlInJ) { } +STATIC int halCallAlsaSetCtls (json_object *ctlsOutJ) { + json_object *responseJ, *queryJ; + int err; + + // Call now level CTL + queryJ = json_object_new_object(); + json_object_object_add(queryJ, "devid", json_object_new_string (halSndCard->devid)); + json_object_object_add(queryJ, "ctl", ctlsOutJ); + + err= afb_service_call_sync("alsacore", "setctl", queryJ, &responseJ); + json_object_put (responseJ); // let's ignore response + + return err; +} + + +// retrieve a single HAL control from its tag. +PUBLIC int halSetCtlByTag (halRampEnumT tag, int value) { + json_object *ctlJ = json_object_new_array(); + alsaHalMapT *halCtls= halSndCard->ctls; + int err, index; + + index = halCtlTagToIndex(tag); + if (index < 0) goto OnErrorExit; + + json_object_array_add(ctlJ, json_object_new_int(halCtls[index].ctl.numid)); + json_object_array_add(ctlJ, volumeNormalise (ACTION_SET, &halCtls[index].ctl, json_object_new_int(value))); + + err = halCallAlsaSetCtls(ctlJ); + + return err; + + OnErrorExit: + return -1; +} + + // Translate high level control to low level and call lower layer PUBLIC void halSetCtls(afb_req request) { + alsaHalMapT *halCtls= halSndCard->ctls; int err, done, index; - struct json_object *ctlsInJ, *ctlsOutJ, *queryJ, *valuesJ, *responseJ; + json_object *ctlsInJ, *ctlsOutJ, *valuesJ; // get query from request ctlsInJ = afb_req_json(request); @@ -162,7 +215,7 @@ PUBLIC void halSetCtls(afb_req request) { } json_object_object_add (ctlsOutJ, "id", json_object_new_int(halCtls[index].ctl.numid)); - json_object_object_add (ctlsOutJ,"val", SetGetNormaliseVolumes (ACTION_SET, &halCtls[index].ctl, valuesJ)); + json_object_object_add (ctlsOutJ,"val", volumeNormalise (ACTION_SET, &halCtls[index].ctl, valuesJ)); break; } @@ -170,7 +223,7 @@ PUBLIC void halSetCtls(afb_req request) { ctlsOutJ = json_object_new_array(); for (int idx= 0; idx < json_object_array_length (ctlsInJ); idx++) { - struct json_object *ctlInJ = json_object_array_get_idx (ctlsInJ, idx); + json_object *ctlInJ = json_object_array_get_idx (ctlsInJ, idx); index= halGetCtlIndex (request, ctlInJ); if (index < 0) goto OnErrorExit; @@ -180,9 +233,9 @@ PUBLIC void halSetCtls(afb_req request) { goto OnErrorExit; } // let's create alsa low level set control request - struct json_object *ctlOutJ = json_object_new_object(); + json_object *ctlOutJ = json_object_new_object(); json_object_object_add (ctlOutJ, "id", json_object_new_int(halCtls[index].ctl.numid)); - json_object_object_add (ctlOutJ, "val", SetGetNormaliseVolumes (ACTION_SET, &halCtls[index].ctl, valuesJ)); + json_object_object_add (ctlOutJ, "val", volumeNormalise (ACTION_SET, &halCtls[index].ctl, valuesJ)); json_object_array_add (ctlsOutJ, ctlOutJ); } @@ -194,14 +247,9 @@ PUBLIC void halSetCtls(afb_req request) { goto OnErrorExit; } - // Call now level CTL - queryJ = json_object_new_object(); - json_object_object_add(queryJ, "devid", json_object_new_string (halDevid)); - json_object_object_add(queryJ, "numid", ctlsOutJ); - - err= afb_service_call_sync("alsacore", "setctl", queryJ, &responseJ); + err = halCallAlsaSetCtls (ctlsOutJ); if (err) { - afb_req_fail_f(request, "subcall:alsacore/setctl", "%s", json_object_get_string(responseJ)); + afb_req_fail_f(request, "subcall:alsacore/setctl", "%s", json_object_get_string(ctlsOutJ)); goto OnErrorExit; } @@ -213,24 +261,35 @@ OnErrorExit: }; // Remap low level controls into HAL hight level ones -STATIC json_object *HalGetPrepareResponse(afb_req request, struct json_object *ctlsJ) { - struct json_object *halResponseJ; - - // make sure return controls have a valid type - if (json_object_get_type(ctlsJ) != json_type_array) { - afb_req_fail_f(request, "ctls-notarray", "Invalid Controls return from alsa/getcontrol ctlsJ=%s", json_object_get_string(ctlsJ)); - goto OnErrorExit; +STATIC json_object *HalGetPrepareResponse(afb_req request, json_object *ctlsJ) { + alsaHalMapT *halCtls= halSndCard->ctls; + json_object *halResponseJ; + int length; + + switch (json_object_get_type(ctlsJ)) { + case json_type_array: + // responseJ is a JSON array + halResponseJ = json_object_new_array(); + length = json_object_array_length(ctlsJ); + break; + case json_type_object: + halResponseJ=NULL; + length = 1; + break; + default: + afb_req_fail_f(request, "ctls-notarray", "Invalid Controls return from alsa/getcontrol ctlsJ=%s", json_object_get_string(ctlsJ)); + goto OnErrorExit; } - // responseJ is a JSON array - halResponseJ = json_object_new_array(); - // loop on array and store values into client context - for (int idx = 0; idx < json_object_array_length(ctlsJ); idx++) { - struct json_object *sndCtlJ, *valJ, *numidJ; + for (int idx = 0; idx < length; idx++) { + json_object *sndCtlJ, *valJ, *numidJ; int numid; - sndCtlJ = json_object_array_get_idx(ctlsJ, idx); + // extract control from array if any + if (halResponseJ) sndCtlJ = json_object_array_get_idx(ctlsJ, idx); + else sndCtlJ=ctlsJ; + if (!json_object_object_get_ex(sndCtlJ, "id", &numidJ) || !json_object_object_get_ex(sndCtlJ, "val", &valJ)) { afb_req_fail_f(request, "ctl-invalid", "Invalid Control return from alsa/getcontrol ctl=%s", json_object_get_string(sndCtlJ)); goto OnErrorExit; @@ -240,14 +299,16 @@ STATIC json_object *HalGetPrepareResponse(afb_req request, struct json_object *c numid= (halCtlsEnumT) json_object_get_int(numidJ); for (int idx = 0; halCtls[idx].ctl.numid; idx++) { - if (halCtls[idx].ctl.numid == numid) { - + if (halCtls[idx].ctl.numid == numid) { // translate low level numid to HAL one and normalise values - struct json_object *halCtlJ = json_object_new_object(); + json_object *halCtlJ = json_object_new_object(); json_object_object_add(halCtlJ, "label", json_object_new_string(halCtls[idx].label)); // idx+1 == HAL/NUMID json_object_object_add(halCtlJ, "tag" , json_object_new_int(halCtls[idx].tag)); // idx+1 == HAL/NUMID - json_object_object_add(halCtlJ, "val" , SetGetNormaliseVolumes(ACTION_GET, &halCtls[idx].ctl, valJ)); - json_object_array_add(halResponseJ, halCtlJ); + json_object_object_add(halCtlJ, "val" , volumeNormalise(ACTION_GET, &halCtls[idx].ctl, valJ)); + + if (halResponseJ) json_object_array_add(halResponseJ, halCtlJ); + else halResponseJ=halCtlJ; + break; } } @@ -262,10 +323,55 @@ STATIC json_object *HalGetPrepareResponse(afb_req request, struct json_object *c return NULL; } + + +STATIC json_object *halCallAlsaGetCtls (json_object *ctlsOutJ) { + json_object *responseJ, *queryJ; + int err, done; + + // Call now level CTL + queryJ = json_object_new_object(); + json_object_object_add(queryJ, "devid", json_object_new_string (halSndCard->devid)); + json_object_object_add(queryJ, "ctl", ctlsOutJ); + + err= afb_service_call_sync("alsacore", "getctl", queryJ, &responseJ); + if (err) goto OnErrorExit; + + // Let ignore info data if any and keep on response + done = json_object_object_get_ex (responseJ, "response", &responseJ); + if (!done) goto OnErrorExit; + + return responseJ; + + OnErrorExit: + return NULL; +} + +// retrieve a single HAL control from its tag. +PUBLIC json_object *halGetCtlByTag (halRampEnumT tag) { + json_object *responseJ, *valJ; + alsaHalMapT *halCtls= halSndCard->ctls; + int done, index; + + index = halCtlTagToIndex(tag); + if (index < 0) goto OnErrorExit; + responseJ = halCallAlsaGetCtls(json_object_new_int(halCtls[index].ctl.numid)); + + done = json_object_object_get_ex(responseJ, "val", &valJ); + if (!done) goto OnErrorExit; + + return volumeNormalise(ACTION_GET, &halCtls[index].ctl, valJ); + + OnErrorExit: + return NULL; +} + + // Translate high level control to low level and call lower layer PUBLIC void halGetCtls(afb_req request) { - int err, index; - struct json_object *ctlsInJ, *ctlsOutJ, *queryJ, *responseJ; + int index; + alsaHalMapT *halCtls= halSndCard->ctls; + json_object *ctlsInJ, *ctlsOutJ, *responseJ; // get query from request ctlsInJ = afb_req_json(request); @@ -283,7 +389,7 @@ PUBLIC void halGetCtls(afb_req request) { case json_type_array: { for (int idx= 0; idx < json_object_array_length (ctlsInJ); idx++) { - struct json_object *ctlInJ = json_object_array_get_idx (ctlsInJ, idx); + json_object *ctlInJ = json_object_array_get_idx (ctlsInJ, idx); index= halGetCtlIndex (request, ctlInJ); if (index < 0) goto OnErrorExit; json_object_array_add (ctlsOutJ, json_object_new_int(halCtls[index].ctl.numid)); @@ -297,21 +403,14 @@ PUBLIC void halGetCtls(afb_req request) { } // Call now level CTL - queryJ = json_object_new_object(); - json_object_object_add(queryJ, "devid", json_object_new_string (halDevid)); - json_object_object_add(queryJ, "numid", ctlsOutJ); - - err= afb_service_call_sync("alsacore", "getctl", queryJ, &responseJ); - if (err) { + responseJ = halCallAlsaGetCtls (ctlsOutJ); + if (!responseJ) { afb_req_fail_f(request, "subcall:alsacore/getctl", "%s", json_object_get_string(responseJ)); goto OnErrorExit; } - // Let ignore info data if any and keep on response - json_object_object_get_ex (responseJ, "response", &responseJ); - // map back low level response to HAL ctl with normalised values - struct json_object *halResponse = HalGetPrepareResponse(request, responseJ); + json_object *halResponse = HalGetPrepareResponse(request, responseJ); if (!halResponse) goto OnErrorExit; afb_req_success (request, halResponse, NULL); @@ -321,35 +420,9 @@ OnErrorExit: return; }; -// This receive all event this binding subscribe to -PUBLIC void halServiceEvent(const char *evtname, struct json_object *eventJ) { - int numid; - struct json_object *numidJ, *valuesJ, *valJ; - - AFB_NOTICE("halServiceEvent evtname=%s [msg=%s]", evtname, json_object_get_string(eventJ)); - - json_object_object_get_ex (eventJ, "val" , &valuesJ); - if (!valuesJ) { - AFB_ERROR("halServiceEvent novalues: evtname=%s [msg=%s]", evtname, json_object_get_string(eventJ)); - return; - } - - json_object_object_get_ex (valuesJ, "numid" , &numidJ); - numid = json_object_get_int (numidJ); - - // search it corresponding numid in halCtls attach a callback - if (numid) { - for (int idx= 0; halCtls[idx].ctl.numid; idx++) { - if (halCtls[idx].ctl.numid == numid && halCtls[idx].cb.callback != NULL) { - json_object_object_get_ex (valuesJ, "val" , &valJ); - halCtls[idx].cb.callback (&halCtls[idx].ctl, halCtls[idx].cb.handle, valJ); - } - } - } -} -STATIC int UpdateOneSndCtl (alsaHalCtlMapT *ctl, struct json_object *sndCtlJ) { - struct json_object *tmpJ, *ctlJ; +STATIC int UpdateOneSndCtl (alsaHalCtlMapT *ctl, json_object *sndCtlJ) { + json_object *tmpJ, *ctlJ; json_object_object_get_ex (sndCtlJ, "name" , &tmpJ); ctl->name = (char*)json_object_get_string(tmpJ); @@ -377,7 +450,7 @@ STATIC int UpdateOneSndCtl (alsaHalCtlMapT *ctl, struct json_object *sndCtlJ) { // process dbscale TLV if any if (json_object_object_get_ex (sndCtlJ, "tlv" , &tmpJ)) { - struct json_object *dbscaleJ; + json_object *dbscaleJ; if (!json_object_object_get_ex (tmpJ, "dbscale" , &dbscaleJ)) { AFB_WARNING("TLV found but not DBscale attached ctl name=%s numid=%d", ctl->name, ctl->numid); @@ -407,8 +480,12 @@ STATIC int UpdateOneSndCtl (alsaHalCtlMapT *ctl, struct json_object *sndCtlJ) { // this is call when after all bindings are loaded PUBLIC int halServiceInit (const char *apiPrefix, alsaHalSndCardT *alsaHalSndCard) { int err; - struct json_object *queryurl, *responseJ, *devidJ, *ctlsJ, *tmpJ; - halCtls = alsaHalSndCard->ctls; // Get sndcard specific HAL control mapping + json_object *queryurl, *responseJ, *devidJ, *ctlsJ, *tmpJ; + alsaHalMapT *halCtls= alsaHalSndCard->ctls; + + // if not volume normalisation CB provided use default one + if (!alsaHalSndCard->volumeCB) alsaHalSndCard->volumeCB=volumeNormalise; + halSndCard= alsaHalSndCard; err= afb_daemon_require_api("alsacore", 1); if (err) { @@ -435,12 +512,12 @@ PUBLIC int halServiceInit (const char *apiPrefix, alsaHalSndCardT *alsaHalSndCar } // save devid for future use - halDevid = strdup (json_object_get_string(devidJ)); + halSndCard->devid = strdup (json_object_get_string(devidJ)); // for each Non Alsa Control callback create a custom control ctlsJ= json_object_new_array(); for (int idx= 0; (halCtls[idx].ctl.name||halCtls[idx].ctl.numid); idx++) { - struct json_object *ctlJ; + json_object *ctlJ; // map HAL ctlTad with halCrlLabel to simplify set/get ctl operations using Labels halCtls[idx].label = halCtlsLabels[halCtls[idx].tag]; @@ -452,10 +529,29 @@ PUBLIC int halServiceInit (const char *apiPrefix, alsaHalSndCardT *alsaHalSndCar if (halCtls[idx].ctl.maxval) json_object_object_add(ctlJ, "max" , json_object_new_int(halCtls[idx].ctl.maxval)); if (halCtls[idx].ctl.step) json_object_object_add(ctlJ, "step" , json_object_new_int(halCtls[idx].ctl.step)); if (halCtls[idx].ctl.type) json_object_object_add(ctlJ, "type" , json_object_new_int(halCtls[idx].ctl.type)); + if (halCtls[idx].ctl.count) json_object_object_add(ctlJ, "count", json_object_new_int(halCtls[idx].ctl.count)); + if (halCtls[idx].ctl.value) json_object_object_add(ctlJ, "value", json_object_new_int(halCtls[idx].ctl.value)); + + if (halCtls[idx].ctl.dbscale) { + json_object *dbscaleJ=json_object_new_object(); + if (halCtls[idx].ctl.dbscale->max) json_object_object_add(dbscaleJ, "max" , json_object_new_int(halCtls[idx].ctl.dbscale->max)); + if (halCtls[idx].ctl.dbscale->min) json_object_object_add(dbscaleJ, "min" , json_object_new_int(halCtls[idx].ctl.dbscale->min)); + if (halCtls[idx].ctl.dbscale->step) json_object_object_add(dbscaleJ, "step", json_object_new_int(halCtls[idx].ctl.dbscale->step)); + if (halCtls[idx].ctl.dbscale->mute) json_object_object_add(dbscaleJ, "mute", json_object_new_int(halCtls[idx].ctl.dbscale->mute)); + json_object_object_add(ctlJ, "dbscale" , dbscaleJ); + } + + if (halCtls[idx].ctl.enums) { + json_object *enumsJ=json_object_new_array(); + for (int jdx=0; halCtls[idx].ctl.enums[jdx]; jdx++) { + json_object_array_add(enumsJ, json_object_new_string(halCtls[idx].ctl.enums[jdx])); + } + json_object_object_add(ctlJ, "enums" , enumsJ); + } json_object_array_add(ctlsJ, ctlJ); } else { ctlJ = json_object_new_object(); - if (halCtls[idx].ctl.numid) json_object_object_add(ctlJ, "numid" , json_object_new_int(halCtls[idx].ctl.numid)); + if (halCtls[idx].ctl.numid) json_object_object_add(ctlJ, "ctl" , json_object_new_int(halCtls[idx].ctl.numid)); if (halCtls[idx].ctl.name) json_object_object_add(ctlJ, "name" , json_object_new_string(halCtls[idx].ctl.name)); json_object_array_add(ctlsJ, ctlJ); } @@ -508,13 +604,40 @@ PUBLIC int halServiceInit (const char *apiPrefix, alsaHalSndCardT *alsaHalSndCar return (1); }; + +// This receive all event this binding subscribe to +PUBLIC void halServiceEvent(const char *evtname, json_object *eventJ) { + int numid; + alsaHalMapT *halCtls= halSndCard->ctls; + json_object *numidJ, *valuesJ; + + AFB_DEBUG("halServiceEvent evtname=%s [msg=%s]", evtname, json_object_get_string(eventJ)); + + json_object_object_get_ex (eventJ, "id" , &numidJ); + numid = json_object_get_int (numidJ); + if (!numid) { + AFB_ERROR("halServiceEvent noid: evtname=%s [msg=%s]", evtname, json_object_get_string(eventJ)); + return; + } + json_object_object_get_ex (eventJ, "val" , &valuesJ); + + // search it corresponding numid in halCtls attach a callback + if (numid) { + for (int idx= 0; halCtls[idx].ctl.numid; idx++) { + if (halCtls[idx].ctl.numid == numid && halCtls[idx].cb.callback != NULL) { + halCtls[idx].cb.callback (halCtls[idx].tag, &halCtls[idx].ctl, halCtls[idx].cb.handle, valuesJ); + } + } + } +} + // Every HAL export the same API & Interface Mapping from SndCard to AudioLogic is done through alsaHalSndCardT PUBLIC afb_verb_v2 halServiceApi[] = { /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */ - { .verb = "ping", .callback = pingtest}, - { .verb = "ctl-list", .callback = halListCtls}, - { .verb = "ctl-get", .callback = halGetCtls}, - { .verb = "ctl-set", .callback = halSetCtls}, - { .verb = "evt-sub", .callback = halSubscribe}, + { .verb = "ping", .callback = pingtest , .info="ping test for API"}, + { .verb = "ctl-list", .callback = halListCtls , .info="List AGL normalised Sound Controls"}, + { .verb = "ctl-get", .callback = halGetCtls , .info="Get one/many sound controls"}, + { .verb = "ctl-set", .callback = halSetCtls , .info="Set one/many sound controls"}, + { .verb = "evt-sub", .callback = halSubscribe, .info="Subscribe to HAL events"}, { .verb = NULL} /* marker for end of the array */ }; diff --git a/HAL-afb/HAL-interface/hal-interface.h b/HAL-afb/HAL-interface/hal-interface.h index c31c145..23944ad 100644 --- a/HAL-afb/HAL-interface/hal-interface.h +++ b/HAL-afb/HAL-interface/hal-interface.h @@ -22,12 +22,26 @@ #include <alsa/asoundlib.h> #include "audio-interface.h" +#include <systemd/sd-event.h> + typedef enum { - ACTION_SET, - ACTION_GET + ACTION_SET, + ACTION_GET } ActionSetGetT; +// VolRamp Handle Store current status for a given VolRam CB set +typedef struct { + halRampEnumT mode; + halCtlsEnumT slave; + int delay; // delay between volset in us + int stepDown; // linear % + int stepUp; // linear % + int current; // current volume for slave ctl + int target; // target volume + sd_event_source *evtsrc; // event loop timer source +} halVolRampT; + typedef struct { int min; int max; @@ -42,7 +56,9 @@ typedef struct { int count; int minval; int maxval; + int value; int step; + char **enums; alsaHalDBscaleT *dbscale; } alsaHalCtlMapT; @@ -50,8 +66,8 @@ typedef struct { typedef struct afb_service alsaHalServiceT; typedef struct { - struct json_object* (*callback)(alsaHalCtlMapT *control, void* handle, struct json_object *valuesJ); - void* handle; + void (*callback)(halCtlsEnumT tag, alsaHalCtlMapT *control, void* handle, json_object *valuesJ); + void* handle; } alsaHalCbMapT; typedef struct { @@ -62,19 +78,28 @@ typedef struct { char* info; } alsaHalMapT; - -typedef const struct { - char *name; +typedef struct { + const char *name; const char *info; - alsaHalMapT *ctls; + alsaHalMapT *ctls; + const char *devid; + json_object* (*volumeCB)(ActionSetGetT action, const alsaHalCtlMapT *halCtls, json_object *valuesJ); } alsaHalSndCardT; +// hal-interface.c extern afb_verb_v2 halServiceApi[]; -PUBLIC void halServiceEvent(const char *evtname, struct json_object *object); +extern char *halVolRampModes[]; +PUBLIC void halServiceEvent(const char *evtname, json_object *object); PUBLIC int halServiceInit (const char *apiPrefix, alsaHalSndCardT *alsaHalSndCard); +PUBLIC json_object *halGetCtlByTag (halRampEnumT tag); +PUBLIC int halSetCtlByTag (halRampEnumT tag, int value); + + +// hal-volramp.c +PUBLIC void volumeRamp (halCtlsEnumT halTag,alsaHalCtlMapT *control, void* handle, json_object *valJ); -// hal-volmap.c -PUBLIC struct json_object *SetGetNormaliseVolumes(ActionSetGetT action, const alsaHalCtlMapT *halCtls, struct json_object *valuesJ); +// hal-volume.c +PUBLIC json_object *volumeNormalise(ActionSetGetT action, const alsaHalCtlMapT *halCtls, json_object *valuesJ); #endif /* SHAREHALLIB_H */ diff --git a/HAL-afb/HAL-interface/hal-volramp.c b/HAL-afb/HAL-interface/hal-volramp.c new file mode 100644 index 0000000..6343a06 --- /dev/null +++ b/HAL-afb/HAL-interface/hal-volramp.c @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * Author Fulup Ar Foll <fulup@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 // needed for vasprintf +#include "hal-interface.h" + +STATIC int RampTimerCB (sd_event_source* source,uint64_t timer, void* handle) { + halVolRampT *volRamp= (halVolRampT*)handle; + int err; + uint64_t usec; + + // RampDown + if (volRamp->current > volRamp->target) { + volRamp->current = volRamp->current - volRamp->stepDown; + if (volRamp->current < volRamp->target) volRamp->current = volRamp->target; + } + + // RampUp + if (volRamp->current < volRamp->target) { + volRamp->current = volRamp->current + volRamp->stepUp; + if (volRamp->current > volRamp->target) volRamp->current = volRamp->target; + } + + // request current Volume Level + err = halSetCtlByTag(volRamp->slave, volRamp->current); + if (err) goto OnErrorExit; + + // we reach target stop volram event + if (volRamp->current == volRamp->target) sd_event_source_unref(source); + else { + // otherwise validate timer for a new run + sd_event_now(afb_daemon_get_event_loop(), CLOCK_MONOTONIC, &usec); + sd_event_source_set_enabled(source, SD_EVENT_ONESHOT); + err=sd_event_source_set_time(source, usec+volRamp->delay); + } + + return 0; + + OnErrorExit: + AFB_WARNING ("RampTimerCB Fail to set HAL ctl tag=%d vol=%d", Master_Playback_Volume, volRamp->current); + sd_event_source_unref(source); // abandon VolRamp + return -1; +} + +/* UCS2 Interface Timer Callback */ +STATIC void SetRampTimer(void *handle) { + halVolRampT *volRamp= (halVolRampT*)handle; + + uint64_t usec; + /* set a timer with 250ms accuracy */ + sd_event_now(afb_daemon_get_event_loop(), CLOCK_MONOTONIC, &usec); + sd_event_add_time(afb_daemon_get_event_loop(), &volRamp->evtsrc, CLOCK_MONOTONIC, usec, 250, RampTimerCB, volRamp); +} + +STATIC int volumeDoRamp (halVolRampT *volRamp, int numid, json_object *volumeJ) { + json_object *responseJ; + + // request current Volume Level + responseJ = halGetCtlByTag(volRamp->slave); + if (!responseJ) { + AFB_WARNING ("volumeDoRamp Fail to get HAL ctl tag=%d", Master_Playback_Volume); + goto OnErrorExit; + } + + // use 1st volume value as target for ramping + switch (json_object_get_type(volumeJ)) { + case json_type_array: + volRamp->target=json_object_get_int(json_object_array_get_idx(volumeJ,0)); + break; + + case json_type_int: + volRamp->target=json_object_get_int(volumeJ); + break; + + default: + AFB_WARNING ("volumeDoRamp Invalid volumeJ=%s", json_object_get_string(volumeJ)); + goto OnErrorExit; + } + + // use 1st volume value as current for ramping + switch (json_object_get_type(responseJ)) { + case json_type_array: + volRamp->current=json_object_get_int(json_object_array_get_idx(responseJ,0)); + break; + + case json_type_int: + volRamp->current=json_object_get_int(responseJ); + break; + + default: + AFB_WARNING ("volumeDoRamp Invalid reponseJ=%s", json_object_get_string(responseJ)); + goto OnErrorExit; + } + + SetRampTimer (volRamp); + + return 0; + + OnErrorExit: + return -1; +} + + +PUBLIC void volumeRamp (halCtlsEnumT halTag, alsaHalCtlMapT *ctl, void* handle, json_object *valJ) { + halVolRampT *volRamp = (halVolRampT*) handle; + json_object *tmpJ; + + if (json_object_get_type(valJ) != json_type_array || volRamp==NULL) goto OnErrorExit; + + switch (halTag) { + case Vol_Ramp: + tmpJ = json_object_array_get_idx(valJ, 0); + volumeDoRamp (volRamp, ctl->numid, tmpJ); + break; + + case Vol_Ramp_Set_Mode: + tmpJ = json_object_array_get_idx(valJ, 0); + volRamp->mode = json_object_get_int (tmpJ); + break; + + case Vol_Ramp_Set_Slave: + tmpJ = json_object_array_get_idx(valJ, 0); + volRamp->slave = json_object_get_int (tmpJ); + break; + + case Vol_Ramp_Set_Delay: + tmpJ = json_object_array_get_idx(valJ, 0); + volRamp->delay = 1000*json_object_get_int (tmpJ); + break; + + case Vol_Ramp_Set_Down: + tmpJ = json_object_array_get_idx(valJ, 0); + volRamp->stepDown = json_object_get_int (tmpJ); + break; + + case Vol_Ramp_Set_Up: + tmpJ = json_object_array_get_idx(valJ, 0); + volRamp->stepUp = json_object_get_int (tmpJ); + break; + + default: + goto OnErrorExit; + } + + return; + + OnErrorExit: + AFB_WARNING ("Invalid Ctrl Event halCtlsEnumT=%d numid=%d name=%s value=%s", halTag, ctl->numid, ctl->name, json_object_get_string(valJ)); + return; +} +
\ No newline at end of file diff --git a/HAL-afb/HAL-interface/hal-volmap.c b/HAL-afb/HAL-interface/hal-volume.c index 2b619fd..593b74c 100644 --- a/HAL-afb/HAL-interface/hal-volmap.c +++ b/HAL-afb/HAL-interface/hal-volume.c @@ -16,6 +16,9 @@ * * references: * alsa-util/amixer.c + alsa-lib/simple.c + * snd_tlv_convert_from_dB + * nt snd_tlv_convert_to_dB + * snd_tlv_get_dB_range */ #define _GNU_SOURCE // needed for vasprintf @@ -58,7 +61,7 @@ STATIC int dbNormalizeVal (enumRandeModeDB_T normaliseMode, const alsaHalDBscale } // HAL normalise volume values to 0-100% -PUBLIC struct json_object *SetGetNormaliseVolumes(ActionSetGetT action, const alsaHalCtlMapT *halCtls, struct json_object *valuesJ) { +PUBLIC json_object *volumeNormalise(ActionSetGetT action, const alsaHalCtlMapT *halCtls, json_object *valuesJ) { enumRandeModeDB_T useNormalizeDB; int length; @@ -131,7 +134,7 @@ PUBLIC struct json_object *SetGetNormaliseVolumes(ActionSetGetT action, const al break; default: - AFB_NOTICE ("SetGetNormaliseVolumes: invalid action value=%d", (int)action); + AFB_NOTICE ("volumeNormalise: invalid action value=%d", (int)action); goto ExitOnError; } } diff --git a/HAL-afb/HAL-plugin/HalPlugCtl.c b/HAL-afb/HAL-plugin/HalPlugCtl.c index 3755876..4f76595 100644 --- a/HAL-afb/HAL-plugin/HalPlugCtl.c +++ b/HAL-afb/HAL-plugin/HalPlugCtl.c @@ -321,7 +321,7 @@ SND_CTL_PLUGIN_DEFINE_FUNC(afbhal) { return -EINVAL; } - err=snd_config_search(ctlconfig, "numid", &itemConf); + err=snd_config_search(ctlconfig, "ctl", &itemConf); if (!err) { if (snd_config_get_integer(itemConf, (long*)&plughandle->ctls[plughandle->ctlsCount].ctlNumid) < 0) { SNDERR("Not Integer: ctl:%s numid should be a valid integer", ctlLabel); diff --git a/HAL-afb/HDA-intel/IntelHdaHAL.c b/HAL-afb/HDA-intel/IntelHdaHAL.c index 66f241f..f7aec59 100644 --- a/HAL-afb/HDA-intel/IntelHdaHAL.c +++ b/HAL-afb/HDA-intel/IntelHdaHAL.c @@ -25,26 +25,27 @@ #include "hal-interface.h" #include "audio-interface.h" -STATIC struct json_object* MasterOnOff (alsaHalCtlMapT *control, void* handle, struct json_object *valJ) { - struct json_object *reponseJ; - - AFB_INFO ("Power Set value=%s", json_object_get_string(valJ)); - - reponseJ=json_object_new_object(); - json_object_object_add (reponseJ, "Callback", json_object_new_string("Hello From HAL")); - - return reponseJ; -} + +// Default Values for MasterVolume Ramping +STATIC halVolRampT volRampMaster= { + .mode = RAMP_VOL_NORMAL, + .slave = Master_Playback_Volume, + .delay = 100*1000, // ramping delay in us + .stepDown=1, + .stepUp =1, +}; // Map HAL hight sndctl with Alsa numid and optionally with a custom callback for non Alsa supported functionalities. STATIC alsaHalMapT alsaHalMap[]= { - { .tag=Master_Playback_Volume, .ctl={.numid=04 } }, - { .tag=PCM_Playback_Volume , .ctl={.numid=06 } }, - { .tag=PCM_Playback_Switch , .ctl={.numid=05 } }, - { .tag=Capture_Volume , .ctl={.numid=12 } }, - { .tag=Master_OnOff_Switch , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_BOOLEAN, .count=1, .name="Power-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, - { .tag=Master_Playback_Ramp , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=2, .name="Volume-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, + { .tag=Master_Playback_Volume, . ctl={ .name="Master Playback Volume" } }, + { .tag=PCM_Playback_Volume , .ctl={ .name="PCM Playback Volume" } }, + { .tag=PCM_Playback_Switch , .ctl={ .name="Master Playback Switch" } }, + { .tag=Capture_Volume , .ctl={ .name="Capture Volume" } }, + { .tag=Vol_Ramp , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="ramp volume linearly according to current ramp setting", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .name="Hal-VolRamp"} + }, + { .tag=EndHalCrlTag} /* marker for end of the array */ } ; diff --git a/HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c b/HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c index 10ef204..dd4499e 100644 --- a/HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c +++ b/HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c @@ -26,25 +26,41 @@ #include "hal-interface.h" #include "audio-interface.h" -STATIC struct json_object* MasterOnOff (alsaHalCtlMapT *control, void* handle, struct json_object *valJ) { - struct json_object *reponseJ; - - AFB_INFO ("Power Set value=%s", json_object_get_string(valJ)); - - reponseJ=json_object_new_object(); - json_object_object_add (reponseJ, "Callback", json_object_new_string("Hello From HAL")); - - return reponseJ; -} +// Default Values for MasterVolume Ramping +STATIC halVolRampT volRampMaster= { + .mode = RAMP_VOL_NORMAL, + .slave = Master_Playback_Volume, + .delay = 100*1000, // ramping delay in us + .stepDown=1, + .stepUp =1, +}; // Map HAL hight sndctl with Alsa numid and optionally with a custom callback for non Alsa supported functionalities. STATIC alsaHalMapT alsaHalMap[]= { - { .tag=Master_Playback_Volume, . ctl={.numid=04 } }, - { .tag=PCM_Playback_Volume , .ctl={.numid=06 } }, + { .tag=Master_Playback_Volume, . ctl={.name="Master Playback Volume" } }, + { .tag=PCM_Playback_Volume , .ctl={.name="Master 1 (Monitor) Playback Volume" } }, { .tag=PCM_Playback_Switch , .ctl={.numid=05 } }, { .tag=Capture_Volume , .ctl={.numid=12 } }, - { .tag=Master_OnOff_Switch , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_BOOLEAN, .count=1, .name="AGL-Power-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, - { .tag=Master_Playback_Ramp , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=2, .name="AGL-Volume-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, + + { .tag=Vol_Ramp_Set_Mode , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="select volramp speed", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_ENUMERATED, .count=1, .value=RAMP_VOL_NORMAL, .name="Hal-VolRamp-Mode", .enums=halVolRampModes} + }, + { .tag=Vol_Ramp_Set_Slave , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="set slave volume master numid", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .value=Master_Playback_Volume, .name="Hal-VolRamp-Slave", .enums=halVolRampModes} + }, + { .tag=Vol_Ramp_Set_Delay , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="set ramp delay [default 250ms]", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=1000, .step=100, .value=250, .name="Hal-VolRamp-Step-Down"} + }, + { .tag=Vol_Ramp_Set_Down , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="set linear step down ramp [default 10]", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .value=10, .name="Hal-VolRamp-Step-Down"} + }, + { .tag=Vol_Ramp_Set_Up , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="set linear step up ramp [default 10]", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .value=10, .name="Hal-VolRamp-Step-Up"} + }, + { .tag=Vol_Ramp , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="ramp volume linearly according to current ramp setting", + .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .name="Hal-VolRamp"} + }, + { .tag=EndHalCrlTag} /* marker for end of the array */ } ; @@ -53,6 +69,7 @@ STATIC alsaHalSndCardT alsaHalSndCard = { .name = "Scarlett 18i8 USB", // WARNING: name MUST match with 'aplay -l' .info = "Hardware Abstraction Layer for Scarlett Focusrite USB professional music sound card", .ctls = alsaHalMap, + .volumeCB = NULL, // use default volume normalisation function }; diff --git a/HAL-afb/Unicens-USB/UnicensHAL.c b/HAL-afb/Unicens-USB/UnicensHAL.c index 66f241f..9a42afd 100644 --- a/HAL-afb/Unicens-USB/UnicensHAL.c +++ b/HAL-afb/Unicens-USB/UnicensHAL.c @@ -25,16 +25,7 @@ #include "hal-interface.h" #include "audio-interface.h" -STATIC struct json_object* MasterOnOff (alsaHalCtlMapT *control, void* handle, struct json_object *valJ) { - struct json_object *reponseJ; - - AFB_INFO ("Power Set value=%s", json_object_get_string(valJ)); - - reponseJ=json_object_new_object(); - json_object_object_add (reponseJ, "Callback", json_object_new_string("Hello From HAL")); - - return reponseJ; -} + // Map HAL hight sndctl with Alsa numid and optionally with a custom callback for non Alsa supported functionalities. STATIC alsaHalMapT alsaHalMap[]= { @@ -42,8 +33,6 @@ STATIC alsaHalMapT alsaHalMap[]= { { .tag=PCM_Playback_Volume , .ctl={.numid=06 } }, { .tag=PCM_Playback_Switch , .ctl={.numid=05 } }, { .tag=Capture_Volume , .ctl={.numid=12 } }, - { .tag=Master_OnOff_Switch , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_BOOLEAN, .count=1, .name="Power-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, - { .tag=Master_Playback_Ramp , .ctl={.numid=0, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=2, .name="Volume-Switch"}, .cb={.callback=MasterOnOff, .handle=NULL}}, { .tag=EndHalCrlTag} /* marker for end of the array */ } ; @@ -66,7 +55,7 @@ STATIC int sndServiceInit () { // API prefix should be unique for each snd card PUBLIC const struct afb_binding_v2 afbBindingV2 = { - .api = "intel-hda", + .api = "unicens-usb", .init = sndServiceInit, .verbs = halServiceApi, .onevent = halServiceEvent, diff --git a/HAL-afb/Unicens-USB/UnicensVol.c b/HAL-afb/Unicens-USB/UnicensVol.c index ab9787d..cf4f497 100644 --- a/HAL-afb/Unicens-USB/UnicensVol.c +++ b/HAL-afb/Unicens-USB/UnicensVol.c @@ -25,8 +25,8 @@ #include "hal-interface.h" #include "audio-interface.h" -STATIC struct json_object* MasterOnOff (alsaHalCtlMapT *control, void* handle, struct json_object *valJ) { - struct json_object *reponseJ; +STATIC json_object* MasterOnOff (alsaHalCtlMapT *control, void* handle, json_object *valJ) { + json_object *reponseJ; AFB_INFO ("Power Set value=%s", json_object_get_string(valJ)); diff --git a/Shared-Interface/audio-interface.h b/Shared-Interface/audio-interface.h index 01c71cd..453a9c4 100644 --- a/Shared-Interface/audio-interface.h +++ b/Shared-Interface/audio-interface.h @@ -60,19 +60,36 @@ typedef enum { } halAclEnumT; typedef enum { - StartHalCrlTag=0, - - // HighLevel Audio Control List, - Master_Playback_Volume =1, - Master_Playback_Ramp =2, - PCM_Playback_Volume =3, - PCM_Playback_Switch =4, - Capture_Volume =5, - Master_OnOff_Switch =6, + StartHalCrlTag=0, + // volume RAMP + Vol_Ramp, + Vol_Ramp_Set_Mode, + Vol_Ramp_Set_Delay, + Vol_Ramp_Set_Down, + Vol_Ramp_Set_Up, + Vol_Ramp_Set_Slave, + + // HighLevel Audio Control List, + Master_Playback_Volume, + Master_Playback_Ramp, + PCM_Playback_Volume, + PCM_Playback_Switch, + Capture_Volume, + Master_OnOff_Switch, + EndHalCrlTag // used to compute number of ctls } halCtlsEnumT; +typedef enum { + RAMP_VOL_NONE = 0, + RAMP_VOL_NORMAL = 1, + RAMP_VOL_SMOOTH = 2, + RAMP_VOL_EMERGENCY = 3, + + EndHalVolMod + +} halRampEnumT; PUBLIC void pingtest(struct afb_req request); diff --git a/conf.d/app-templates b/conf.d/app-templates -Subproject 8f3bc0b6f25a5560a308078342a8ed3cc6dba13 +Subproject dee58363ddb98f8e63239035f1a8f1ab151c5e9 diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake index e7801c8..116ed2a 100644 --- a/conf.d/cmake/config.cmake +++ b/conf.d/cmake/config.cmake @@ -18,7 +18,7 @@ # Project Info # ------------------ -set(PROJECT_NAME unicens-agent) +set(PROJECT_NAME audio-bindings) set(PROJECT_VERSION "0.1") set(PROJECT_PRETTY_NAME "Audio Agent") set(PROJECT_DESCRIPTION "Expose Alsa through AGL AppFw") diff --git a/htdocs/CMakeLists.txt b/htdocs/CMakeLists.txt index 0026b8c..60f6cf8 100644 --- a/htdocs/CMakeLists.txt +++ b/htdocs/CMakeLists.txt @@ -23,7 +23,7 @@ ################################################## PROJECT_TARGET_ADD(www_test) - file(GLOB SOURCE_FILES "*.html" "*.js" "*.jpg") + file(GLOB SOURCE_FILES "*.html" "*.js" "*.jpg" "*.css") add_custom_target(${TARGET_NAME} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME} @@ -43,5 +43,5 @@ PROJECT_TARGET_ADD(www_test) ) # use only under native Linux when using "make install" - install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} DESTINATION . FILES_MATCHING PATTERN "*.html" PATTERN "*.js" PATTERN "*.jpg") + install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} DESTINATION .) diff --git a/htdocs/alsa-core.html b/htdocs/alsa-core.html index dafd43f..e946bdb 100644 --- a/htdocs/alsa-core.html +++ b/htdocs/alsa-core.html @@ -31,16 +31,16 @@ <br> <ol> <li><button onclick="callbinder('alsacore','getctl', {devid:sndcard, mode:mode})">Get all Alsa Ctls</button></li> - <li><button onclick="callbinder('alsacore','getctl', {devid:sndcard, mode:mode, numid:[numid]})">Get Alsa Ctls [numid]</button></li> - <li><button onclick="callbinder('alsacore','getctl', {devid:sndcard, mode:mode, numid:[numid,numid+1]})">Get Alsa Ctls [numid,numid+1]</button></li> + <li><button onclick="callbinder('alsacore','getctl', {devid:sndcard, mode:mode, ctl:[numid]})">Get Alsa Ctls [numid]</button></li> + <li><button onclick="callbinder('alsacore','getctl', {devid:sndcard, mode:mode, ctl:[numid,numid+1]})">Get Alsa Ctls [numid,numid+1]</button></li> <br> - <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, numid:[[9,20]]})">Set Alsa Ctl numid:[[9,20]]</button></li> - <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, numid:[{id:9,val:50}]})">Set Alsa Ctl numid:[{id:9,val:50}]}</button></li> - <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, numid:[[6,[20,20]]]})">Set Alsa Ctl numid:[[6,[20,20]]]</button></li> - <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, numid:[{id:6,val:[50,50]}]})">Set Alsa Ctl numid:[{id:2,val:[50,50]}]</button></li> - <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, numid:[{id:6,val:[50,50]}, {id:9,val:50,50}]})">Set Alsa Ctl numid:[{id:6,val:[50,50]}, {id:9,val:50,50}]</button></li> + <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, ctl:[[9,20]]})">Set Alsa Ctl ctl:[[9,20]]</button></li> + <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, ctl:[{id:9,val:50}]})">Set Alsa Ctl ctl:[{id:9,val:50}]}</button></li> + <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, ctl:[[6,[20,20]]]})">Set Alsa Ctl ctl:[[6,[20,20]]]</button></li> + <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, ctl:[{id:6,val:[50,50]}]})">Set Alsa Ctl ctl:[{id:2,val:[50,50]}]</button></li> + <li><button onclick="callbinder('alsacore','setctl', {devid:sndcard, mode:mode, ctl:[{id:6,val:[50,50]}, {id:9,val:50,50}]})">Set Alsa Ctl ctl:[{id:6,val:[50,50]}, {id:9,val:50,50}]</button></li> <br> <li><button onclick="callbinder('alsacore','ucmquery', {devid:sndcard, mode:mode})">List UCM verbs</button></li> <li><button onclick="callbinder('alsacore','ucmset' , {devid:sndcard, mode:mode, verb:'HiFi'})">Set UCM HiFi</button></li> diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index 938c355..a54b713 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -15,8 +15,8 @@ <df name="HAL-afb"> <df name="HAL-interface"> <in>hal-interface.c</in> - <in>hal-volmap.c</in> - <in>hal-volmap.h</in> + <in>hal-volramp.c</in> + <in>hal-volume.c</in> </df> <df name="HAL-plugin"> <in>HalPlugCb.c</in> @@ -74,7 +74,7 @@ </sourceRootList> <projectmakefile>Build/Makefile</projectmakefile> <confs> - <conf name="Amixer-Dhw_4" type="0"> + <conf name="Localhost" type="0"> <toolsSet> <compilerSet>GNU|GNU</compilerSet> <dependencyChecking>false</dependencyChecking> @@ -105,16 +105,23 @@ </preBuild> </makefileType> <item path="ALSA-afb/Alsa-AddCtl.c" ex="false" tool="0" flavor2="3"> - <cTool flags="4"> + <cTool flags="1"> <incDir> - <pElem>../../../opt/include/afb</pElem> - <pElem>ALSA-afb</pElem> + <pElem>../../../opt/include</pElem> <pElem>../../../opt/include/alsa</pElem> + <pElem>/usr/include/p11-kit-1</pElem> <pElem>/usr/include/json-c</pElem> <pElem>Shared-Interface</pElem> - <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> + <preprocessorList> + <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> + <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> + <Elem>MAX_LINEAR_DB_SCALE=24</Elem> + <Elem>MAX_SND_CARD=16</Elem> + <Elem>TLV_BYTE_SIZE=256</Elem> + <Elem>alsa_lowlevel_EXPORTS</Elem> + </preprocessorList> </cTool> </item> <item path="ALSA-afb/Alsa-ApiHat.c" ex="false" tool="0" flavor2="3"> @@ -131,7 +138,6 @@ <incDir> <pElem>../../../opt/include/afb</pElem> <pElem>ALSA-afb</pElem> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> <pElem>Shared-Interface</pElem> <pElem>../../../opt/include</pElem> @@ -140,23 +146,15 @@ </cTool> </item> <item path="ALSA-afb/Alsa-SetGet.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> + <pElem>../../../opt/include/afb</pElem> + <pElem>ALSA-afb</pElem> <pElem>/usr/include/json-c</pElem> <pElem>Shared-Interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> - <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_LINEAR_DB_SCALE=24</Elem> - <Elem>MAX_SND_CARD=16</Elem> - <Elem>TLV_BYTE_SIZE=256</Elem> - <Elem>alsa_lowlevel_EXPORTS</Elem> - </preprocessorList> </cTool> </item> <item path="ALSA-afb/Alsa-Ucm.c" ex="false" tool="0" flavor2="3"> @@ -164,10 +162,8 @@ <incDir> <pElem>../../../opt/include/afb</pElem> <pElem>ALSA-afb</pElem> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> <pElem>Shared-Interface</pElem> - <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> @@ -188,7 +184,18 @@ </incDir> </cTool> </item> - <item path="HAL-afb/HAL-interface/hal-volmap.c" ex="false" tool="0" flavor2="3"> + <item path="HAL-afb/HAL-interface/hal-volramp.c" + ex="false" + tool="0" + flavor2="3"> + <cTool flags="4"> + <incDir> + <pElem>Shared-Interface</pElem> + <pElem>build/HAL-afb/HAL-interface</pElem> + </incDir> + </cTool> + </item> + <item path="HAL-afb/HAL-interface/hal-volume.c" ex="false" tool="0" flavor2="3"> <cTool flags="4"> <incDir> <pElem>build/HAL-afb/HAL-interface</pElem> @@ -198,7 +205,6 @@ <item path="HAL-afb/HAL-plugin/HalPlugCb.c" ex="false" tool="0" flavor2="3"> <cTool flags="4"> <incDir> - <pElem>../../../opt/include</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> </cTool> @@ -206,7 +212,6 @@ <item path="HAL-afb/HAL-plugin/HalPlugCtl.c" ex="false" tool="0" flavor2="3"> <cTool flags="4"> <incDir> - <pElem>../../../opt/include</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> </cTool> @@ -214,19 +219,20 @@ <item path="HAL-afb/HAL-plugin/HalPlugPcm.c" ex="false" tool="0" flavor2="3"> <cTool flags="2"> <incDir> + <pElem>../../../opt/include/alsa</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> </cTool> </item> <item path="HAL-afb/HDA-intel/IntelHdaHAL.c" ex="false" tool="0" flavor2="3"> - <cTool flags="4"> + <cTool flags="1"> </cTool> </item> <item path="HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c" ex="false" tool="0" flavor2="3"> - <cTool flags="4"> + <cTool flags="1"> </cTool> </item> <item path="HAL-afb/Unicens-USB/UnicensHAL.c" ex="false" tool="0" flavor2="3"> @@ -335,7 +341,6 @@ <cTool> <incDir> <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> </incDir> </cTool> @@ -344,39 +349,50 @@ <cTool> <incDir> <pElem>HAL-afb/HAL-plugin</pElem> - <pElem>../../../opt/include/alsa</pElem> </incDir> </cTool> </folder> <folder path="0/HAL-afb/HDA-intel"> <cTool> <incDir> - <pElem>HAL-afb/HDA-intel</pElem> + <pElem>../../../opt/include</pElem> <pElem>../../../opt/include/alsa</pElem> - <pElem>Shared-Interface</pElem> + <pElem>/usr/include/p11-kit-1</pElem> + <pElem>/usr/include/json-c</pElem> <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include</pElem> + <pElem>Shared-Interface</pElem> <pElem>build/HAL-afb/HDA-intel</pElem> </incDir> + <preprocessorList> + <Elem>MAX_LINEAR_DB_SCALE=24</Elem> + <Elem>TLV_BYTE_SIZE=256</Elem> + <Elem>hal_intel_hda_EXPORTS</Elem> + </preprocessorList> </cTool> </folder> <folder path="0/HAL-afb/Scarlett-Focusrite"> <cTool> <incDir> - <pElem>HAL-afb/Scarlett-Focusrite</pElem> + <pElem>../../../opt/include</pElem> <pElem>../../../opt/include/alsa</pElem> - <pElem>Shared-Interface</pElem> + <pElem>/usr/include/p11-kit-1</pElem> + <pElem>/usr/include/json-c</pElem> <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include</pElem> + <pElem>Shared-Interface</pElem> <pElem>build/HAL-afb/Scarlett-Focusrite</pElem> </incDir> + <preprocessorList> + <Elem>MAX_LINEAR_DB_SCALE=24</Elem> + <Elem>TLV_BYTE_SIZE=256</Elem> + <Elem>hal_scalett_usb_EXPORTS</Elem> + </preprocessorList> </cTool> </folder> <folder path="0/HAL-afb/Unicens-USB"> <cTool> <incDir> <pElem>HAL-afb/Unicens-USB</pElem> - <pElem>../../../opt/include/alsa</pElem> + <pElem>/usr/include/json-c</pElem> </incDir> </cTool> </folder> @@ -399,7 +415,7 @@ </cTool> </folder> </conf> - <conf name="Amixer-CTL" type="0"> + <conf name="Laptop" type="0"> <toolsSet> <compilerSet>GNU|GNU</compilerSet> <dependencyChecking>false</dependencyChecking> @@ -407,9 +423,11 @@ </toolsSet> <flagsDictionary> <element flagsID="0" commonFlags="-g -fPIC -fPIC -g"/> - <element flagsID="1" commonFlags="-mtune=generic -march=x86-64 -g -fPIC"/> - <element flagsID="2" commonFlags="-mtune=generic -march=x86-64 -g -g -fPIC"/> - <element flagsID="3" commonFlags="-mtune=generic -march=x86-64 -g -ggdb -fPIC"/> + <element flagsID="1" commonFlags="-g -ggdb -fPIC -fPIC -g -ggdb"/> + <element flagsID="2" commonFlags="-mtune=generic -march=x86-64 -g -fPIC"/> + <element flagsID="3" commonFlags="-mtune=generic -march=x86-64 -g -g -fPIC"/> + <element flagsID="4" + commonFlags="-mtune=generic -march=x86-64 -g -ggdb -g -ggdb -fPIC"/> </flagsDictionary> <codeAssistance> <includeAdditional>true</includeAdditional> @@ -417,7 +435,7 @@ <makefileType> <makeTool> <buildCommandWorkingDir>build</buildCommandWorkingDir> - <buildCommand>${MAKE} -f Makefile install</buildCommand> + <buildCommand>${MAKE} -f Makefile remote-target-populate</buildCommand> <cleanCommand>${MAKE} -f Makefile clean</cleanCommand> <executablePath>build/CMakeFiles/feature_tests.bin</executablePath> </makeTool> @@ -428,45 +446,47 @@ </preBuild> </makefileType> <item path="ALSA-afb/Alsa-AddCtl.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> + <pElem>Shared-Interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> </item> <item path="ALSA-afb/Alsa-ApiHat.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> + <cTool flags="4"> <incDir> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> </item> <item path="ALSA-afb/Alsa-RegEvt.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> + <pElem>Shared-Interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> </item> <item path="ALSA-afb/Alsa-SetGet.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> + <pElem>Shared-Interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> </item> <item path="ALSA-afb/Alsa-Ucm.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> - <pElem>../../../opt/include</pElem> + <pElem>Shared-Interface</pElem> <pElem>build/ALSA-afb</pElem> </incDir> </cTool> @@ -479,317 +499,96 @@ ex="false" tool="0" flavor2="3"> - <cTool flags="3"> - </cTool> - </item> - <item path="HAL-afb/HAL-interface/hal-volmap.c" ex="false" tool="0" flavor2="0"> - </item> - <item path="HAL-afb/HAL-interface/hal-volmap.h" ex="false" tool="3" flavor2="0"> - </item> - <item path="HAL-afb/HAL-plugin/HalPlugCb.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> - <incDir> - <pElem>HAL-afb/HAL-plugin</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>../../../opt/include</pElem> - <pElem>build/HAL-afb/HAL-plugin</pElem> - </incDir> - </cTool> - </item> - <item path="HAL-afb/HAL-plugin/HalPlugCtl.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> - <incDir> - <pElem>HAL-afb/HAL-plugin</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>../../../opt/include</pElem> - <pElem>build/HAL-afb/HAL-plugin</pElem> - </incDir> - </cTool> - </item> - <item path="HAL-afb/HAL-plugin/HalPlugPcm.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> <incDir> <pElem>../../../opt/include/afb</pElem> - <pElem>HAL-afb/HAL-plugin</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>build/HAL-afb/HAL-plugin</pElem> - </incDir> - <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_SND_CARD=16</Elem> - </preprocessorList> - </cTool> - </item> - <item path="HAL-afb/HDA-intel/IntelHdaHAL.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> - </cTool> - </item> - <item path="HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c" - ex="false" - tool="0" - flavor2="3"> - <cTool flags="3"> - </cTool> - </item> - <item path="HighLevel-afb/HighLevelApiConf.c" ex="false" tool="0" flavor2="3"> - <cTool flags="2"> - <incDir> - <pElem>Shared-Interface</pElem> - <pElem>../../../opt/include</pElem> - <pElem>build/HighLevel-afb</pElem> - </incDir> - </cTool> - </item> - <item path="HighLevel-afb/HighLevelBinding.c" ex="false" tool="0" flavor2="3"> - <cTool flags="2"> - <incDir> + <pElem>HAL-afb/HAL-interface</pElem> <pElem>/usr/include/json-c</pElem> <pElem>Shared-Interface</pElem> <pElem>../../../opt/include</pElem> - <pElem>build/HighLevel-afb</pElem> + <pElem>build/HAL-afb/HAL-interface</pElem> </incDir> </cTool> </item> - <item path="MostVolume/DeviceContainer.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/DeviceValue.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/Mediator.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/ConnectionInfo.cpp" + <item path="HAL-afb/HAL-interface/hal-volramp.c" ex="false" - tool="1" - flavor2="4"> - </item> - <item path="MostVolume/external/Console.c" ex="false" tool="0" flavor2="2"> - </item> - <item path="MostVolume/external/MacAddr.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/MostIpc.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/MostMsg.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/MostMsgTx.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/MsgAddr.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/MsgFilter.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/external/Shadow_NetworkMaster.cpp" - ex="false" - tool="1" - flavor2="4"> - </item> - <item path="MostVolume/external/Thread.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="MostVolume/libmostvolume.cpp" ex="false" tool="1" flavor2="4"> - </item> - <item path="Shared-Interface/audio-interface.c" ex="false" tool="0" flavor2="3"> - <cTool flags="3"> - </cTool> - </item> - <folder path="0/ALSA-afb"> - <cTool> - <incDir> - <pElem>../../../opt/include/afb</pElem> - <pElem>ALSA-afb</pElem> - </incDir> - </cTool> - </folder> - <folder path="0/Common"> - <cTool> + tool="0" + flavor2="3"> + <cTool flags="1"> <incDir> - <pElem>/usr/include/alsa</pElem> <pElem>../../../opt/include</pElem> + <pElem>../../../opt/include/alsa</pElem> + <pElem>/usr/include/p11-kit-1</pElem> <pElem>/usr/include/json-c</pElem> - <pElem>build/Common</pElem> + <pElem>HAL-afb/HAL-interface</pElem> + <pElem>Shared-Interface</pElem> + <pElem>build/HAL-afb/HAL-interface</pElem> </incDir> <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_SND_CARD=16</Elem> + <Elem>MAX_LINEAR_DB_SCALE=24</Elem> + <Elem>TLV_BYTE_SIZE=256</Elem> </preprocessorList> </cTool> - </folder> - <folder path="0/HAL-afb"> - <cTool> + </item> + <item path="HAL-afb/HAL-interface/hal-volume.c" ex="false" tool="0" flavor2="3"> + <cTool flags="4"> <incDir> <pElem>../../../opt/include/afb</pElem> - </incDir> - <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_SND_CARD=16</Elem> - </preprocessorList> - </cTool> - </folder> - <folder path="0/HAL-afb/HAL-interface"> - <cTool> - <incDir> <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include/alsa</pElem> <pElem>/usr/include/json-c</pElem> - <pElem>Shared-Interface</pElem> - <pElem>../../../opt/include</pElem> <pElem>build/HAL-afb/HAL-interface</pElem> </incDir> </cTool> - </folder> - <folder path="0/HAL-afb/HDA-intel"> - <cTool> - <incDir> - <pElem>HAL-afb/HDA-intel</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>Shared-Interface</pElem> - <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include</pElem> - <pElem>build/HAL-afb/HDA-intel</pElem> - </incDir> - </cTool> - </folder> - <folder path="0/HAL-afb/Scarlett-Focusrite"> - <cTool> - <incDir> - <pElem>HAL-afb/Scarlett-Focusrite</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>Shared-Interface</pElem> - <pElem>HAL-afb/HAL-interface</pElem> - <pElem>../../../opt/include</pElem> - <pElem>build/HAL-afb/Scarlett-Focusrite</pElem> - </incDir> - </cTool> - </folder> - <folder path="0/HighLevel-afb"> - <cTool> - <incDir> - <pElem>../../../opt/include/afb</pElem> - <pElem>HighLevel-afb</pElem> - </incDir> - </cTool> - </folder> - <folder path="0/Shared-Interface"> - <cTool> - <incDir> - <pElem>../../../opt/include/afb</pElem> - <pElem>Shared-Interface</pElem> - <pElem>/usr/include/json-c</pElem> - <pElem>build/Shared-Interface</pElem> - </incDir> - </cTool> - </folder> - </conf> - <conf name="Amixer-Set" type="0"> - <toolsSet> - <compilerSet>GNU|GNU</compilerSet> - <dependencyChecking>false</dependencyChecking> - <rebuildPropChanged>false</rebuildPropChanged> - </toolsSet> - <flagsDictionary> - <element flagsID="0" commonFlags="-g -fPIC -fPIC -g"/> - <element flagsID="1" commonFlags="-g -ggdb -fPIC -fPIC"/> - <element flagsID="2" commonFlags="-mtune=generic -march=x86-64 -g -fPIC"/> - <element flagsID="3" commonFlags="-mtune=generic -march=x86-64 -g -g -fPIC"/> - </flagsDictionary> - <codeAssistance> - <includeAdditional>true</includeAdditional> - </codeAssistance> - <makefileType> - <makeTool> - <buildCommandWorkingDir>build</buildCommandWorkingDir> - <buildCommand>${MAKE} -f Makefile install</buildCommand> - <cleanCommand>${MAKE} -f Makefile clean</cleanCommand> - <executablePath>build/CMakeFiles/feature_tests.bin</executablePath> - </makeTool> - <preBuild> - <preBuildCommandWorkingDir>build</preBuildCommandWorkingDir> - <preBuildCommand>cmake ..</preBuildCommand> - <preBuildFirst>true</preBuildFirst> - </preBuild> - </makefileType> - <item path="ALSA-afb/Alsa-AddCtl.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="ALSA-afb/Alsa-ApiHat.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="ALSA-afb/Alsa-RegEvt.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="ALSA-afb/Alsa-SetGet.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="ALSA-afb/Alsa-Ucm.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="Common/AudioCommonLib.c" ex="false" tool="0" flavor2="2"> - <cTool flags="0"> - </cTool> - </item> - <item path="HAL-afb/HAL-interface/hal-interface.c" - ex="false" - tool="0" - flavor2="3"> - <cTool flags="1"> - </cTool> - </item> - <item path="HAL-afb/HAL-interface/hal-volmap.c" ex="false" tool="0" flavor2="0"> - </item> - <item path="HAL-afb/HAL-interface/hal-volmap.h" ex="false" tool="3" flavor2="0"> </item> <item path="HAL-afb/HAL-plugin/HalPlugCb.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> - <pElem>/usr/include/json-c</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> - <preprocessorList> - <Elem>PIC</Elem> - <Elem>cb_sample_EXPORTS</Elem> - </preprocessorList> </cTool> </item> <item path="HAL-afb/HAL-plugin/HalPlugCtl.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> - <pElem>/usr/include/json-c</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> - <preprocessorList> - <Elem>PIC</Elem> - <Elem>ctl_afbhal_EXPORTS</Elem> - </preprocessorList> </cTool> </item> <item path="HAL-afb/HAL-plugin/HalPlugPcm.c" ex="false" tool="0" flavor2="3"> <cTool flags="2"> <incDir> - <pElem>HAL-afb/HAL-plugin</pElem> <pElem>../../../opt/include/alsa</pElem> <pElem>build/HAL-afb/HAL-plugin</pElem> </incDir> </cTool> </item> <item path="HAL-afb/HDA-intel/IntelHdaHAL.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> </cTool> </item> <item path="HAL-afb/Scarlett-Focusrite/ScarlettUsbHAL.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> + </cTool> + </item> + <item path="HAL-afb/Unicens-USB/UnicensHAL.c" ex="false" tool="0" flavor2="3"> + <cTool flags="4"> + <incDir> + <pElem>Shared-Interface</pElem> + <pElem>HAL-afb/HAL-interface</pElem> + <pElem>../../../opt/include</pElem> + <pElem>build/HAL-afb/Unicens-USB</pElem> + </incDir> + </cTool> + </item> + <item path="HAL-afb/Unicens-USB/UnicensVol.c" ex="false" tool="0" flavor2="3"> + <cTool flags="4"> + <incDir> + <pElem>HAL-afb/HAL-interface</pElem> + <pElem>build/HAL-afb/Unicens-USB</pElem> + </incDir> </cTool> </item> <item path="HighLevel-afb/HighLevelApiConf.c" ex="false" tool="0" flavor2="3"> @@ -846,25 +645,15 @@ <item path="MostVolume/libmostvolume.cpp" ex="false" tool="1" flavor2="4"> </item> <item path="Shared-Interface/audio-interface.c" ex="false" tool="0" flavor2="3"> - <cTool flags="1"> + <cTool flags="4"> </cTool> </item> <folder path="0/ALSA-afb"> <cTool> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> - <pElem>/usr/include/json-c</pElem> - <pElem>Shared-Interface</pElem> - <pElem>build/ALSA-afb</pElem> + <pElem>../../../opt/include/afb</pElem> + <pElem>ALSA-afb</pElem> </incDir> - <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_SND_CARD=16</Elem> - <Elem>alsa_lowlevel_EXPORTS</Elem> - </preprocessorList> </cTool> </folder> <folder path="0/Common"> @@ -894,49 +683,43 @@ </preprocessorList> </cTool> </folder> - <folder path="0/HAL-afb/HAL-interface"> + <folder path="0/HAL-afb/HAL-plugin"> <cTool> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> - <pElem>/usr/include/json-c</pElem> - <pElem>HAL-afb/HAL-interface</pElem> - <pElem>Shared-Interface</pElem> - <pElem>build/HAL-afb/HAL-interface</pElem> + <pElem>HAL-afb/HAL-plugin</pElem> </incDir> </cTool> </folder> <folder path="0/HAL-afb/HDA-intel"> <cTool> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> + <pElem>HAL-afb/HDA-intel</pElem> <pElem>/usr/include/json-c</pElem> - <pElem>HAL-afb/HAL-interface</pElem> <pElem>Shared-Interface</pElem> + <pElem>HAL-afb/HAL-interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/HAL-afb/HDA-intel</pElem> </incDir> - <preprocessorList> - <Elem>hal_intel_hda_EXPORTS</Elem> - </preprocessorList> </cTool> </folder> <folder path="0/HAL-afb/Scarlett-Focusrite"> <cTool> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> + <pElem>HAL-afb/Scarlett-Focusrite</pElem> <pElem>/usr/include/json-c</pElem> - <pElem>HAL-afb/HAL-interface</pElem> <pElem>Shared-Interface</pElem> + <pElem>HAL-afb/HAL-interface</pElem> + <pElem>../../../opt/include</pElem> <pElem>build/HAL-afb/Scarlett-Focusrite</pElem> </incDir> - <preprocessorList> - <Elem>hal_scalett_usb_EXPORTS</Elem> - </preprocessorList> + </cTool> + </folder> + <folder path="0/HAL-afb/Unicens-USB"> + <cTool> + <incDir> + <pElem>HAL-afb/Unicens-USB</pElem> + <pElem>/usr/include/json-c</pElem> + </incDir> </cTool> </folder> <folder path="0/HighLevel-afb"> @@ -950,18 +733,11 @@ <folder path="0/Shared-Interface"> <cTool> <incDir> - <pElem>../../../opt/include</pElem> - <pElem>../../../opt/include/alsa</pElem> - <pElem>/usr/include/p11-kit-1</pElem> - <pElem>/usr/include/json-c</pElem> + <pElem>../../../opt/include/afb</pElem> <pElem>Shared-Interface</pElem> + <pElem>/usr/include/json-c</pElem> <pElem>build/Shared-Interface</pElem> </incDir> - <preprocessorList> - <Elem>CONTROL_CDEV_RX="/dev/inic-usb-crx"</Elem> - <Elem>CONTROL_CDEV_TX="/dev/inic-usb-ctx"</Elem> - <Elem>MAX_SND_CARD=16</Elem> - </preprocessorList> </cTool> </folder> </conf> diff --git a/nbproject/project.xml b/nbproject/project.xml index 442a905..3e443c4 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -14,15 +14,11 @@ </sourceRootList> <confList> <confElem> - <name>Amixer-Dhw_4</name> + <name>Localhost</name> <type>0</type> </confElem> <confElem> - <name>Amixer-CTL</name> - <type>0</type> - </confElem> - <confElem> - <name>Amixer-Set</name> + <name>Laptop</name> <type>0</type> </confElem> </confList> |