X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=plugins%2Faudio%2Faudio-api.c;h=1ba9126c672a1d2782e89546aef235a8e7547620;hb=e6d40a8447eff5e1be00ea35715092876e0520fa;hp=f8c51cca926cdbfadd59f10f19e98722a237a2cf;hpb=a4c89089944e8b101ec39ce19dacf400c16aeabf;p=src%2Fapp-framework-binder.git diff --git a/plugins/audio/audio-api.c b/plugins/audio/audio-api.c index f8c51cca..1ba9126c 100644 --- a/plugins/audio/audio-api.c +++ b/plugins/audio/audio-api.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 "IoT.bzh" + * Copyright (C) 2015, 2016 "IoT.bzh" * Author "Manuel Bachmann" * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,8 +25,8 @@ #include "audio-pulse.h" #endif -#include "afb-plugin.h" -#include "afb-req-itf.h" +#include +#include /* ------ BACKEND FUNCTIONS ------- */ @@ -161,7 +161,7 @@ static void releaseAudioCtx (void *context) { static void init (struct afb_req request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*) afb_req_context_get(request); + audioCtxHandleT *ctx = afb_req_context_get (request); json_object *jresp; /* create a private client context */ @@ -170,9 +170,8 @@ static void init (struct afb_req request) { /* AFB_SESSION_CHECK */ afb_req_context_set (request, ctx, releaseAudioCtx); } - if (!_backend_init ("default", ctx)) { + if (!_backend_init ("default", ctx)) afb_req_fail (request, "failed", "backend initialization failed"); - } jresp = json_object_new_object(); json_object_object_add (jresp, "init", json_object_new_string ("success")); @@ -181,24 +180,30 @@ static void init (struct afb_req request) { /* AFB_SESSION_CHECK */ static void volume (struct afb_req request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*) afb_req_context_get(request); - struct afb_arg arg = afb_req_get (request, "value"); - const char *value = arg.value; + audioCtxHandleT *ctx = afb_req_context_get (request); + const char *value = afb_req_value (request, "value"); json_object *jresp; unsigned int volume[8], i; char *volume_i; char volume_str[256]; size_t len_str = 0; + if (!ctx) { + afb_req_fail (request, "failed", "you must call 'init' first"); + return; + } + jresp = json_object_new_object(); + /* no "?value=" parameter : return current state */ if (!value) { for (i = 0; i < 8; i++) { ctx->volume[i] = _backend_get_volume (ctx, i); snprintf (volume_str+len_str, sizeof(volume_str)-len_str, "%d,", ctx->volume[i]); - len_str = strlen(volume_str); + len_str = strlen (volume_str); } - jresp = json_object_new_object(); json_object_object_add (jresp, "volume", json_object_new_string(volume_str)); + afb_req_success (request, jresp, "Audio - Volume obtained"); + return; } /* "?value=" parameter, set volume */ @@ -221,16 +226,16 @@ static void volume (struct afb_req request) { /* AFB_SESSION_CHECK */ /* if there is only one value, set all channels to this one */ if (!volume_i && i == 1) _backend_set_volume_all (ctx, ctx->volume[0]); - if (!volume_i || 100 < atoi(volume_i) || atoi(volume_i) < 0) { + if (!volume_i || 100 < atoi(volume_i) || atoi(volume_i) < 0) ctx->volume[i] = _backend_get_volume (ctx, i); - } else { + else { ctx->volume[i] = (unsigned int) atoi(volume_i); _backend_set_volume (ctx, i, ctx->volume[i]); } len_str = strlen(volume_str); snprintf (volume_str+len_str, sizeof(volume_str)-len_str, "%d,", ctx->volume[i]); } - jresp = json_object_new_object(); + free (volume_i); json_object_object_add (jresp, "volume", json_object_new_string(volume_str)); } @@ -239,24 +244,33 @@ static void volume (struct afb_req request) { /* AFB_SESSION_CHECK */ static void channels (struct afb_req request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*) afb_req_context_get(request); - struct afb_arg arg = afb_req_get (request, "value"); - const char *value = arg.value; - json_object *jresp = json_object_new_object(); + audioCtxHandleT *ctx = afb_req_context_get (request); + const char *value = afb_req_value (request, "value"); + json_object *jresp; char channels_str[256]; + if (!ctx) { + afb_req_fail (request, "failed", "you must call 'init' first"); + return; + } + jresp = json_object_new_object(); + /* no "?value=" parameter : return current state */ if (!value) { snprintf (channels_str, sizeof(channels_str), "%d", ctx->channels); + json_object_object_add (jresp, "channels", json_object_new_string (channels_str)); + afb_req_success (request, jresp, "Audio - Channels obtained"); + return; } /* "?value=" parameter, set channels */ else { ctx->channels = (unsigned int) atoi (value); _backend_set_channels (ctx, ctx->channels); - snprintf (channels_str, sizeof(channels_str), "%d", ctx->channels); + + jresp = json_object_new_object(); json_object_object_add (jresp, "channels", json_object_new_string (channels_str)); } @@ -265,10 +279,15 @@ static void channels (struct afb_req request) { /* AFB_SESSION_CHECK */ static void mute (struct afb_req request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*) afb_req_context_get(request); - struct afb_arg arg = afb_req_get (request, "value"); - const char *value = arg.value; - json_object *jresp = json_object_new_object(); + audioCtxHandleT *ctx = afb_req_context_get (request); + const char *value = afb_req_value (request, "value"); + json_object *jresp; + + if (!ctx) { + afb_req_fail (request, "failed", "you must call 'init' first"); + return; + } + jresp = json_object_new_object(); /* no "?value=" parameter : return current state */ if (!value) { @@ -276,13 +295,14 @@ static void mute (struct afb_req request) { /* AFB_SESSION_CHECK */ ctx->mute ? json_object_object_add (jresp, "mute", json_object_new_string ("on")) : json_object_object_add (jresp, "mute", json_object_new_string ("off")); + afb_req_success (request, jresp, "Audio - Mute status obtained"); + return; } /* "?value=" parameter is "1" or "true" */ else if ( atoi(value) == 1 || !strcasecmp(value, "true") ) { ctx->mute = 1; _backend_set_mute (ctx, ctx->mute); - json_object_object_add (jresp, "mute", json_object_new_string ("on")); } @@ -290,7 +310,6 @@ static void mute (struct afb_req request) { /* AFB_SESSION_CHECK */ else if ( atoi(value) == 0 || !strcasecmp(value, "false") ) { ctx->mute = 0; _backend_set_mute (ctx, ctx->mute); - json_object_object_add (jresp, "mute", json_object_new_string ("off")); } @@ -299,23 +318,29 @@ static void mute (struct afb_req request) { /* AFB_SESSION_CHECK */ static void play (struct afb_req request) { /* AFB_SESSION_CHECK */ - audioCtxHandleT *ctx = (audioCtxHandleT*) afb_req_context_get(request); - struct afb_arg arg = afb_req_get (request, "value"); - const char *value = arg.value; - json_object *jresp = json_object_new_object(); + audioCtxHandleT *ctx = afb_req_context_get (request); + const char *value = afb_req_value (request, "value"); + json_object *jresp; + + if (!ctx) { + afb_req_fail (request, "failed", "you must call 'init' first"); + return; + } + jresp = json_object_new_object(); /* no "?value=" parameter : return current state */ if (!value) { ctx->is_playing ? json_object_object_add (jresp, "play", json_object_new_string ("on")) : json_object_object_add (jresp, "play", json_object_new_string ("off")); + afb_req_success (request, jresp, "Audio - Playing status obtained"); + return; } /* "?value=" parameter is "1" or "true" */ else if ( atoi(value) == 1 || !strcasecmp(value, "true") ) { ctx->is_playing = 1; _backend_play (ctx); - json_object_object_add (jresp, "play", json_object_new_string ("on")); } @@ -323,7 +348,6 @@ static void play (struct afb_req request) { /* AFB_SESSION_CHECK */ else if ( atoi(value) == 0 || !strcasecmp(value, "false") ) { ctx->is_playing = 0; _backend_stop (ctx); - json_object_object_add (jresp, "play", json_object_new_string ("off")); } @@ -334,7 +358,7 @@ static void ping (struct afb_req request) { /* AFB_SESSION_NONE */ afb_req_success (request, NULL, "Audio - Ping success"); } -static const struct AFB_restapi pluginApis[]= { +static const struct AFB_verb_desc_v1 verbs[] = { {"init" , AFB_SESSION_CHECK, init , "Audio API - init"}, {"volume" , AFB_SESSION_CHECK, volume , "Audio API - volume"}, {"channels", AFB_SESSION_CHECK, channels , "Audio API - channels"}, @@ -345,13 +369,15 @@ static const struct AFB_restapi pluginApis[]= { }; static const struct AFB_plugin pluginDesc = { - .type = AFB_PLUGIN_JSON, - .info = "Application Framework Binder - Audio plugin", - .prefix = "audio", - .apis = pluginApis + .type = AFB_PLUGIN_VERSION_1, + .v1 = { + .info = "Application Framework Binder - Audio plugin", + .prefix = "audio", + .verbs = verbs + } }; -const struct AFB_plugin *pluginRegister (const struct AFB_interface *itf) +const struct AFB_plugin *pluginAfbV1Register (const struct AFB_interface *itf) { return &pluginDesc; }