diff options
author | Tai Vuong <tvuong@audiokinetic.com> | 2017-11-02 16:31:15 -0400 |
---|---|---|
committer | Tai Vuong <tvuong@audiokinetic.com> | 2017-11-02 16:31:15 -0400 |
commit | 5d2ee4455d95771d12cc6058bc19c0d6f7fe43d1 (patch) | |
tree | b4cbc2be7475641edf71ae42c6ce117dba27b91d /ahl-binding/ahl-binding.h | |
parent | e92aade201ec131c3eb7430305f60a0a4c9c44c1 (diff) | |
parent | ab6e470190f2cc410b1f6fa8f146317a3c3b08b5 (diff) |
merge dev branch with master
Diffstat (limited to 'ahl-binding/ahl-binding.h')
-rw-r--r-- | ahl-binding/ahl-binding.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/ahl-binding/ahl-binding.h b/ahl-binding/ahl-binding.h new file mode 100644 index 0000000..405144d --- /dev/null +++ b/ahl-binding/ahl-binding.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2017 "Audiokinetic Inc" + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AHL_BINDING_INCLUDE +#define AHL_BINDING_INCLUDE + +//#define AHL_DISCONNECT_POLICY // define for debugging HLB in standalone only + +#include <json-c/json.h> +#include <glib.h> +#define AFB_BINDING_VERSION 2 +#include <afb/afb-binding.h> +#include "ahl-interface.h" +#include "ahl-policy-utils.h" + +#ifndef PUBLIC + #define PUBLIC +#endif + +#define AHL_SUCCESS 0 +#define AHL_FAIL 1 + +#define AHL_ACCESS_CONTROL_GRANTED 1 +#define AHL_ACCESS_CONTROL_DENIED 0 + +#define AHL_STR_MAX_LENGTH 256 + +typedef struct EndpointInfo +{ + endpointID_t endpointID; // Unique endpoint ID (per type) + EndpointTypeT type; // Source or sink device + char * gsDeviceName; // Unique device card name + char * gsDisplayName; // Application display name + char * gsDeviceURI; // Associated URI + char * gsDeviceDomain; // Device URI domain (e.g. alsa or pulse) + char * pRoleName; // Role assigned to this endpoint + DeviceURITypeT deviceURIType; // Device URI type (includes audio domain information) + char * gsHALAPIName; // HAL associated with the device (for volume control) + AlsaDeviceInfoT alsaInfo; // ALSA specific device information + AudioFormatT format; // Preferred audio format supported (later could be array of supported formats) + int iVolume; // Storage for current endpoint volume (policy effected). + GHashTable * pPropTable; // Storage for array of properties (policy effected) +} EndpointInfoT; + +typedef struct StreamInfo { + streamID_t streamID; // Stream unique ID + EndpointInfoT * pEndpointInfo; // Associated endpoint information (reference) + StreamStateT streamState; // Stream activity state + StreamMuteT streamMute; // Stream mute state + struct afb_event streamStateEvent; // Stream specific event for stream state changes + EndpointSelectionModeT endpointSelMode; // Automatic (priority based) or manual endpoint selection + char * pRoleName; // Role string identifier (from role config but could be programatically overriden later) + int iPriority; // Role normalized priority (0-100) (from role config but could be programatically overriden later) + InterruptBehaviorT eInterruptBehavior; // Role behavior when interrupting lower priority streams (from role config but could be programatically overriden later) +} StreamInfoT; + +typedef struct RoleInfo { + char * pRoleName; // Role string identifier + int iPriority; // Role normalized priority (0-100) + InterruptBehaviorT eInterruptBehavior; // Role behavior when interrupting lower priority streams + GPtrArray * pActionList; // List of supported actions for the role (gchar*) + GPtrArray * pSourceEndpoints; // Source endpoints info (EndpointInfoT*) + GPtrArray * pSinkEndpoints; // Sink endpoints info (EndpointInfoT*) +} RoleInfoT; + +// Parts of the context that are visible to the policy (for state based decisions) +typedef struct AHLPolicyCtx { + GHashTable * pRoleInfo; // Hash table of role information structure (RoleInfoT*) accessed by role name + GHashTable * pStreams; // List of active streams (StreamInfoT*) accessed by streamID + GPtrArray * pHALList; // List of HAL dependencies + // TODO: Events need to be sent directly by HLB when separation with policy complete + struct afb_event propertyEvent; // AGL event used when property changes + struct afb_event volumeEvent; // AGL event used when volume changes + struct afb_event postActionEvent; // AGL event used on post action call +} AHLPolicyCtxT; + +// Global binding context +typedef struct AHLCtx { + AHLPolicyCtxT policyCtx; + endpointID_t nextSourceEndpointID; // Counter to assign new ID + endpointID_t nextSinkEndpointID; // Counter to assign new ID + endpointID_t nextStreamID; // Counter to assign new ID +} AHLCtxT; + +// Client specific binding context +typedef struct AHLClientCtx { + GArray * pStreamAccessList; // List of streams that client has control over +} AHLClientCtxT; + +// ahl-binding.c +PUBLIC int AhlBindingInit(); +PUBLIC void AhlOnEvent(const char *evtname, json_object *eventJ); + +// ahl-deviceenum.c +int EnumerateDevices(json_object * in_jDeviceArray, char * in_pAudioRole, EndpointTypeT in_deviceType, GPtrArray * out_pEndpointArray); +EndpointInfoT * InitEndpointInfo(); +void TermEndpointInfo( EndpointInfoT * out_pEndpointInfo ); +// ahl-config.c +int ParseHLBConfig(); +// ahl-policy.c +#ifndef AHL_DISCONNECT_POLICY +PUBLIC void audiohlapi_raise_event(json_object *EventDataJ); +#endif + +#endif // AHL_BINDING_INCLUDE |