summaryrefslogtreecommitdiffstats
path: root/src/ahl-apidef.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ahl-apidef.h')
-rw-r--r--src/ahl-apidef.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/src/ahl-apidef.h b/src/ahl-apidef.h
new file mode 100644
index 0000000..fa78681
--- /dev/null
+++ b/src/ahl-apidef.h
@@ -0,0 +1,297 @@
+
+static const char _afb_description_v2_audiohl[] =
+ "{\"openapi\":\"3.0.0\",\"$schema\":\"http:iot.bzh/download/openapi/schem"
+ "a-3.0/default-schema.json\",\"info\":{\"description\":\"Audio high level"
+ " API for AGL applications\",\"title\":\"audiohighlevel\",\"version\":\"1"
+ ".0\",\"x-binding-c-generator\":{\"api\":\"audiohl\",\"version\":2,\"pref"
+ "ix\":\"audiohlapi_\",\"postfix\":\"\",\"start\":null,\"onevent\":null,\""
+ "init\":\"AhlBindingInit\",\"scope\":\"\",\"private\":false}},\"servers\""
+ ":[{\"url\":\"ws://{host}:{port}/api/audiohl\",\"description\":\"Audio hi"
+ "gh level API for AGL applications.\",\"variables\":{\"host\":{\"default\""
+ ":\"localhost\"},\"port\":{\"default\":\"1234\"}},\"x-afb-events\":[{\"$r"
+ "ef\":\"#/components/schemas/afb-event\"}]}],\"components\":{\"schemas\":"
+ "{\"afb-reply\":{\"$ref\":\"#/components/schemas/afb-reply-v2\"},\"afb-ev"
+ "ent\":{\"$ref\":\"#/components/schemas/afb-event-v2\"},\"afb-reply-v2\":"
+ "{\"title\":\"Generic response.\",\"type\":\"object\",\"required\":[\"jty"
+ "pe\",\"request\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const"
+ "\":\"afb-reply\"},\"request\":{\"type\":\"object\",\"required\":[\"statu"
+ "s\"],\"properties\":{\"status\":{\"type\":\"string\"},\"info\":{\"type\""
+ ":\"string\"},\"token\":{\"type\":\"string\"},\"uuid\":{\"type\":\"string"
+ "\"},\"reqid\":{\"type\":\"string\"}}},\"response\":{\"type\":\"object\"}"
+ "}},\"afb-event-v2\":{\"type\":\"object\",\"required\":[\"jtype\",\"event"
+ "\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-event"
+ "\"},\"event\":{\"type\":\"string\"},\"data\":{\"type\":\"object\"}}},\"e"
+ "ndpoint_info\":{\"type\":\"object\",\"required\":[\"endpoint_id\",\"type"
+ "\",\"name\"],\"properties\":{\"endpoint_id\":{\"type\":\"int\"},\"type\""
+ ":{\"type\":\"enum\"},\"name\":{\"type\":\"string\"}}},\"stream_info\":{\""
+ "type\":\"object\",\"required\":[\"stream_id\",\"pcm_name\",\"name\"],\"p"
+ "roperties\":{\"stream_id\":{\"type\":\"int\"},\"pcm_name\":{\"type\":\"s"
+ "tring\"},\"$ref\":\"#/components/schemas/endpoint_info\"}},\"routing_inf"
+ "o\":{\"type\":\"object\",\"required\":[\"routing_id\",\"source_id\",\"si"
+ "nk_id\"],\"properties\":{\"routing_id\":{\"type\":\"int\"},\"source_id\""
+ ":{\"type\":\"int\"},\"sink_id\":{\"type\":\"int\"}}}},\"x-permissions\":"
+ "{\"streamcontrol\":{\"permission\":\"urn:AGL:permission:audio:public:str"
+ "eamcontrol\"},\"routingcontrol\":{\"permission\":\"urn:AGL:permission:au"
+ "dio:public:routingcontrol\"},\"soundevent\":{\"permission\":\"urn:AGL:pe"
+ "rmission:audio:public:soundevent\"}},\"responses\":{\"200\":{\"descripti"
+ "on\":\"A complex object array response\",\"content\":{\"application/json"
+ "\":{\"schema\":{\"$ref\":\"#/components/schemas/afb-reply\"}}}},\"400\":"
+ "{\"description\":\"Invalid arguments\"}}},\"paths\":{\"/get_sources\":{\""
+ "description\":\"Retrieve array of available audio sources\",\"get\":{\"p"
+ "arameters\":[{\"in\":\"query\",\"name\":\"audio_role\",\"required\":fals"
+ "e,\"schema\":{\"type\":\"enum\"}}],\"responses\":{\"200\":{\"$ref\":\"#/"
+ "components/responses/200\",\"response\":{\"description\":\"Array of endp"
+ "oint info structures\",\"type\":\"array\",\"items\":{\"$ref\":\"#/compon"
+ "ents/schemas/endpoint_info\"}}},\"400\":{\"$ref\":\"#/components/respons"
+ "es/400\"}}}},\"/get_sinks\":{\"description\":\"Retrieve array of availab"
+ "le audio sinks\",\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"a"
+ "udio_role\",\"required\":false,\"schema\":{\"type\":\"enum\"}}],\"respon"
+ "ses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\"response\":{\""
+ "description\":\"Array of endpoint info structures\",\"type\":\"array\",\""
+ "items\":{\"$ref\":\"#/components/schemas/endpoint_info\"}}},\"400\":{\"$"
+ "ref\":\"#/components/responses/400\"}}}},\"/stream_open\":{\"description"
+ "\":\"Request opening a stream\",\"get\":{\"x-permissions\":{\"$ref\":\"#"
+ "/components/x-permissions/streamcontrol\"},\"parameters\":[{\"in\":\"que"
+ "ry\",\"name\":\"audio_role\",\"required\":true,\"schema\":{\"type\":\"en"
+ "um\"}},{\"in\":\"query\",\"name\":\"endpoint_type\",\"required\":true,\""
+ "schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\""
+ ",\"required\":false,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200"
+ "\":{\"$ref\":\"#/components/responses/200\",\"response\":{\"description\""
+ ":\"Stream information structure\",\"$ref\":\"#/components/schemas/stream"
+ "_info\"}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/stream"
+ "_close\":{\"description\":\"Request closing a stream\",\"get\":{\"x-perm"
+ "issions\":{\"$ref\":\"#/components/x-permissions/streamcontrol\"},\"para"
+ "meters\":[{\"in\":\"query\",\"name\":\"stream_id\",\"required\":true,\"s"
+ "chema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\"$ref\":\"#/compon"
+ "ents/responses/200\"},\"400\":{\"$ref\":\"#/components/responses/400\"}}"
+ "}},\"/get_available_routings\":{\"description\":\"Retrieve array of avai"
+ "lable routing info structures\",\"get\":{\"parameters\":[{\"in\":\"query"
+ "\",\"name\":\"audio_role\",\"required\":false,\"schema\":{\"type\":\"enu"
+ "m\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\""
+ "response\":{\"description\":\"Array of routing info structures\",\"type\""
+ ":\"array\",\"items\":{\"description\":\"Routing info structure {routingI"
+ "D, sourceID, sinkID }\",\"type\":\"object\"}}},\"400\":{\"$ref\":\"#/com"
+ "ponents/responses/400\"}}}},\"/add_routing\":{\"description\":\"Request "
+ "a routing connection between available devices\",\"get\":{\"x-permission"
+ "s\":{\"$ref\":\"#/components/x-permissions/routingcontrol\"},\"parameter"
+ "s\":[{\"in\":\"query\",\"name\":\"audio_role\",\"required\":true,\"schem"
+ "a\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"routing_id\",\"req"
+ "uired\":false,\"schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\""
+ "$ref\":\"#/components/responses/200\",\"response\":{\"description\":\"Ro"
+ "uting information structure\",\"$ref\":\"#/components/schemas/routing_in"
+ "fo\"}},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/remove_ro"
+ "uting\":{\"description\":\"Request to remove a routing connection betwee"
+ "n devices\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permis"
+ "sions/routingcontrol\"},\"parameters\":[{\"in\":\"query\",\"name\":\"rou"
+ "ting_id\",\"required\":true,\"schema\":{\"type\":\"int\"}}],\"responses\""
+ ":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\""
+ "#/components/responses/400\"}}}},\"/set_endpoint_volume\":{\"description"
+ "\":\"Set endpoint volume\",\"get\":{\"x-permissions\":{\"$ref\":\"#/comp"
+ "onents/x-permissions/streamcontrol\"},\"parameters\":[{\"in\":\"query\","
+ "\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"type\":\"enum"
+ "\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\"required\":true,\"sche"
+ "ma\":{\"type\":\"int\"}},{\"in\":\"query\",\"name\":\"volume\",\"require"
+ "d\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\",\"name\":\""
+ "ramp_time_ms\",\"required\":false,\"schema\":{\"type\":\"int\"}}],\"resp"
+ "onses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$r"
+ "ef\":\"#/components/responses/400\"}}}},\"/get_endpoint_volume\":{\"desc"
+ "ription\":\"Get endpoint volume\",\"get\":{\"parameters\":[{\"in\":\"que"
+ "ry\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\"type\":\""
+ "enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\"required\":true,\""
+ "schema\":{\"type\":\"int\"}}],\"responses\":{\"200\":{\"$ref\":\"#/compo"
+ "nents/responses/200\",\"response\":{\"description\":\"Endpoint volume va"
+ "lue\",\"type\":\"double\"}},\"400\":{\"$ref\":\"#/components/responses/4"
+ "00\"}}}},\"/set_endpoint_property\":{\"description\":\"Set endpoint prop"
+ "erty value\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permi"
+ "ssions/streamcontrol\"},\"parameters\":[{\"in\":\"query\",\"name\":\"end"
+ "point_type\",\"required\":true,\"schema\":{\"type\":\"enum\"}},{\"in\":\""
+ "query\",\"name\":\"endpoint_id\",\"required\":false,\"schema\":{\"type\""
+ ":\"int\"}},{\"in\":\"query\",\"name\":\"property_name\",\"required\":tru"
+ "e,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\",\"name\":\"value\""
+ ",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\",\""
+ "name\":\"ramp_time_ms\",\"required\":false,\"schema\":{\"type\":\"int\"}"
+ "}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"},\"40"
+ "0\":{\"$ref\":\"#/components/responses/400\"}}}},\"/get_endpoint_propert"
+ "y\":{\"description\":\"Get endpoint property value\",\"get\":{\"paramete"
+ "rs\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\"required\":true,\"s"
+ "chema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\","
+ "\"required\":false,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"na"
+ "me\":\"property_name\",\"required\":true,\"schema\":{\"type\":\"string\""
+ "}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\"re"
+ "sponse\":{\"description\":\"Property value\",\"type\":\"double\"}},\"400"
+ "\":{\"$ref\":\"#/components/responses/400\"}}}},\"/set_endpoint_state\":"
+ "{\"description\":\"Set endpoint state\",\"get\":{\"x-permissions\":{\"$r"
+ "ef\":\"#/components/x-permissions/streamcontrol\"},\"parameters\":[{\"in"
+ "\":\"query\",\"name\":\"endpoint_type\",\"required\":true,\"schema\":{\""
+ "type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\",\"required\""
+ ":true,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"name\":\"state_"
+ "name\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"in\":\"que"
+ "ry\",\"name\":\"state_value\",\"required\":true,\"schema\":{\"type\":\"s"
+ "tring\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200"
+ "\"},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/get_endpoint"
+ "_state\":{\"description\":\"Get endpoint state value\",\"get\":{\"parame"
+ "ters\":[{\"in\":\"query\",\"name\":\"endpoint_type\",\"required\":true,\""
+ "schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"endpoint_id\""
+ ",\"required\":true,\"schema\":{\"type\":\"int\"}},{\"in\":\"query\",\"na"
+ "me\":\"state_name\",\"required\":true,\"schema\":{\"type\":\"string\"}}]"
+ ",\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\",\"respo"
+ "nse\":{\"description\":\"Endpoint state value\",\"type\":\"string\"}},\""
+ "400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/post_sound_event\""
+ ":{\"description\":\"Post sound event\",\"get\":{\"x-permissions\":{\"$re"
+ "f\":\"#/components/x-permissions/soundevent\"},\"parameters\":[{\"in\":\""
+ "query\",\"name\":\"event_name\",\"required\":true,\"schema\":{\"type\":\""
+ "string\"}},{\"in\":\"query\",\"name\":\"audio_role\",\"required\":false,"
+ "\"schema\":{\"type\":\"enum\"}},{\"in\":\"query\",\"name\":\"media_name\""
+ ",\"required\":false,\"schema\":{\"type\":\"string\"}},{\"in\":\"query\","
+ "\"name\":\"audio_context\",\"required\":false,\"schema\":{\"type\":\"obj"
+ "ect\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\""
+ "},\"400\":{\"$ref\":\"#/components/responses/400\"}}}},\"/subscribe\":{\""
+ "description\":\"Subscribe to audio high level events\",\"get\":{\"parame"
+ "ters\":[{\"in\":\"query\",\"name\":\"events\",\"required\":true,\"schema"
+ "\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}],\"responses\":"
+ "{\"200\":{\"$ref\":\"#/components/responses/200\"},\"400\":{\"$ref\":\"#"
+ "/components/responses/400\"}}}}}}"
+;
+
+static const struct afb_auth _afb_auths_v2_audiohl[] = {
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:streamcontrol" },
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:routingcontrol" },
+ { .type = afb_auth_Permission, .text = "urn:AGL:permission:audio:public:soundevent" }
+};
+
+ void audiohlapi_get_sources(struct afb_req req);
+ void audiohlapi_get_sinks(struct afb_req req);
+ void audiohlapi_stream_open(struct afb_req req);
+ void audiohlapi_stream_close(struct afb_req req);
+ void audiohlapi_get_available_routings(struct afb_req req);
+ void audiohlapi_add_routing(struct afb_req req);
+ void audiohlapi_remove_routing(struct afb_req req);
+ void audiohlapi_set_endpoint_volume(struct afb_req req);
+ void audiohlapi_get_endpoint_volume(struct afb_req req);
+ void audiohlapi_set_endpoint_property(struct afb_req req);
+ void audiohlapi_get_endpoint_property(struct afb_req req);
+ void audiohlapi_set_endpoint_state(struct afb_req req);
+ void audiohlapi_get_endpoint_state(struct afb_req req);
+ void audiohlapi_post_sound_event(struct afb_req req);
+ void audiohlapi_subscribe(struct afb_req req);
+
+static const struct afb_verb_v2 _afb_verbs_v2_audiohl[] = {
+ {
+ .verb = "get_sources",
+ .callback = audiohlapi_get_sources,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_sinks",
+ .callback = audiohlapi_get_sinks,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "stream_open",
+ .callback = audiohlapi_stream_open,
+ .auth = &_afb_auths_v2_audiohl[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "stream_close",
+ .callback = audiohlapi_stream_close,
+ .auth = &_afb_auths_v2_audiohl[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_available_routings",
+ .callback = audiohlapi_get_available_routings,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "add_routing",
+ .callback = audiohlapi_add_routing,
+ .auth = &_afb_auths_v2_audiohl[1],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "remove_routing",
+ .callback = audiohlapi_remove_routing,
+ .auth = &_afb_auths_v2_audiohl[1],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "set_endpoint_volume",
+ .callback = audiohlapi_set_endpoint_volume,
+ .auth = &_afb_auths_v2_audiohl[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_endpoint_volume",
+ .callback = audiohlapi_get_endpoint_volume,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "set_endpoint_property",
+ .callback = audiohlapi_set_endpoint_property,
+ .auth = &_afb_auths_v2_audiohl[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_endpoint_property",
+ .callback = audiohlapi_get_endpoint_property,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "set_endpoint_state",
+ .callback = audiohlapi_set_endpoint_state,
+ .auth = &_afb_auths_v2_audiohl[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "get_endpoint_state",
+ .callback = audiohlapi_get_endpoint_state,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "post_sound_event",
+ .callback = audiohlapi_post_sound_event,
+ .auth = &_afb_auths_v2_audiohl[2],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ {
+ .verb = "subscribe",
+ .callback = audiohlapi_subscribe,
+ .auth = NULL,
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
+ { .verb = NULL }
+};
+
+const struct afb_binding_v2 afbBindingV2 = {
+ .api = "audiohl",
+ .specification = _afb_description_v2_audiohl,
+ .info = NULL,
+ .verbs = _afb_verbs_v2_audiohl,
+ .preinit = NULL,
+ .init = AhlBindingInit,
+ .onevent = NULL,
+ .noconcurrency = 0
+};
+