diff options
Diffstat (limited to 'binding/binding.c')
-rw-r--r-- | binding/binding.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/binding/binding.c b/binding/binding.c new file mode 100644 index 0000000..cebc54a --- /dev/null +++ b/binding/binding.c @@ -0,0 +1,81 @@ +/* + * Copyright 2019 Microchip Technology Inc. and its subsidiaries + * + * 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 +#ifndef AFB_BINDING_VERSION +# define AFB_BINDING_VERSION 3 +#endif + +#include <stdio.h> +#include <string.h> +#include <wrap-json.h> +#include <afb/afb-binding.h> +#include "wrap-unicens.h" +#include "slimamp.h" +#include "amplifier.h" +#include "microphone.h" + +/* callback at load of the binding */ +static int preinit(afb_api_t api) { + AFB_API_NOTICE(afbBindingRoot, "UNICENS-CONTROLLER: PREINIT"); + return 0; +} + +/* callback for starting the service */ +static int init(afb_api_t api) { + AFB_API_NOTICE(afbBindingRoot, "UNICENS-CONTROLLER: INIT"); + wrap_ucs_init(api); + wrap_ucs_subscribe_sync(); + return 0; +} + +static void on_availability_cb(uint16_t node, bool available) { + amplifier_availablility_changed(node, available); + slimamp_availablility_changed(node, available); + microphone_availablility_changed(node, available); +} + +/* callback for handling events */ +static void onevent(afb_api_t api, const char *event, struct json_object *object) { + AFB_API_NOTICE(afbBindingRoot, "UNICENS-CONTROLLER: Event: %s object: %s", event, json_object_get_string(object)); + wrap_ucs_interpret_event(event, object, &on_availability_cb); +} + +static void ping(afb_req_t request) { + AFB_API_NOTICE(afbBindingRoot, "UNICENS-CONTROLLER: Ping successful"); + afb_req_success(request, 0, NULL); +} + +static const afb_verb_t verbs[] = { + {.verb = "ping", .session = AFB_SESSION_NONE, .callback = ping, .auth = NULL}, + {.verb = "slimamp_master_volume_set", .session = AFB_SESSION_NONE, .callback = slimamp_master_vol_set_api, .auth = NULL}, + {.verb = "amplifier_master_volume_set", .session = AFB_SESSION_NONE, .callback = amplifier_master_vol_set_api, .auth = NULL}, + {.verb = "microphone_mode_set", .session = AFB_SESSION_NONE, .callback = microphone_mode_set_api, .auth = NULL}, + {NULL} +}; + +const afb_binding_t afbBindingExport = { + .api = "unicens-controller", + .specification = NULL, + .verbs = verbs, + .preinit = preinit, + .init = init, + .onevent = onevent, + .userdata = NULL, + .provide_class = NULL, + .require_class = NULL, + .require_api = NULL, + .noconcurrency = 0 +}; |