2 * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include "hs-helper.h"
23 #include "hmi-debug.h"
24 #include "hs-clientmanager.h"
27 const char _error[] = "error";
28 const char _application_id[] = "application_id";
29 const char _display_message[] = "display_message";
30 const char _reply_message[] = "reply_message";
32 static HS_ClientManager* g_client_manager = HS_ClientManager::instance();
35 ********** Method of HomeScreen Service (API) **********
38 static void pingSample(afb_req_t request)
40 static int pingcount = 0;
41 afb_req_success_f(request, json_object_new_int(pingcount), "Ping count = %d", pingcount);
42 HMI_NOTICE("homescreen-service","Verbosity macro at level notice invoked at ping invocation count = %d", pingcount);
47 * tap_shortcut notify for homescreen
48 * When Shortcut area is tapped, notify these applciations
52 * - application_id : application id
58 static void tap_shortcut (afb_req_t request)
60 HMI_NOTICE("homescreen-service","called.");
62 const char* value = afb_req_value(request, _application_id);
64 HMI_NOTICE("homescreen-service","request appid = %s.", value);
65 ret = g_client_manager->handleRequest(request, __FUNCTION__, value);
68 ret = AFB_EVENT_BAD_REQUEST;
72 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
75 struct json_object *res = json_object_new_object();
76 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
78 afb_req_success(request, res, "afb_event_push event [tap_shortcut]");
83 * HomeScreen OnScreen message
87 * - display_message : message for display
93 static void on_screen_message (afb_req_t request)
95 HMI_NOTICE("homescreen-service","called.");
96 int ret = g_client_manager->handleRequest(request, __FUNCTION__);
98 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
101 struct json_object *res = json_object_new_object();
102 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
104 afb_req_success(request, res, "afb_event_push event [on_screen_message]");
109 * HomeScreen OnScreen Reply
113 * - reply_message : message for reply
119 static void on_screen_reply (afb_req_t request)
121 HMI_NOTICE("homescreen-service","called.");
122 int ret = g_client_manager->handleRequest(request, __FUNCTION__);
124 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
127 struct json_object *res = json_object_new_object();
128 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
130 afb_req_success(request, res, "afb_event_push event [on_screen_reply]");
138 * - event : Event name. Event list is written in libhomescreen.cpp
144 static void subscribe(afb_req_t request)
146 HMI_NOTICE("homescreen-service","called.");
148 std::string req_appid = std::move(get_application_id(request));
149 if(!req_appid.empty()) {
150 ret = g_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str());
153 ret = AFB_EVENT_BAD_REQUEST;
157 afb_req_fail_f(request, "afb_req_subscribe failed", "called %s.", __FUNCTION__);
160 struct json_object *res = json_object_new_object();
161 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
163 afb_req_success_f(request, res, "homescreen binder subscribe.");
171 * - event : Event name. Event list is written in libhomescreen.cpp
177 static void unsubscribe(afb_req_t request)
179 HMI_NOTICE("homescreen-service","called.");
181 std::string req_appid = std::move(get_application_id(request));
182 if(!req_appid.empty()) {
183 ret = g_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str());
186 ret = AFB_EVENT_BAD_REQUEST;
190 afb_req_fail_f(request, "afb_req_unsubscribe failed", "called %s.", __FUNCTION__);
193 struct json_object *res = json_object_new_object();
194 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
196 afb_req_success_f(request, res, "homescreen binder unsubscribe success.");
204 * - request : the request
210 static void showWindow(afb_req_t request)
212 HMI_NOTICE("homescreen-service","called.");
214 const char* value = afb_req_value(request, _application_id);
216 ret = g_client_manager->handleRequest(request, __FUNCTION__, value);
219 ret = AFB_EVENT_BAD_REQUEST;
223 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
226 struct json_object *res = json_object_new_object();
227 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
229 afb_req_success(request, res, "afb_event_push event [showWindow]");
237 * - request : the request
243 static void hideWindow(afb_req_t request)
245 HMI_NOTICE("homescreen-service","called.");
247 const char* value = afb_req_value(request, _application_id);
249 ret = g_client_manager->handleRequest(request, __FUNCTION__, value);
252 ret = AFB_EVENT_BAD_REQUEST;
256 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
259 struct json_object *res = json_object_new_object();
260 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
262 afb_req_success(request, res, "afb_event_push event [hideWindow]");
267 * replyShowWindow event
270 * - request : the request
276 static void replyShowWindow(afb_req_t request)
278 HMI_NOTICE("homescreen-service","called.");
280 const char* value = afb_req_value(request, _application_id);
282 ret = g_client_manager->handleRequest(request, __FUNCTION__, value);
285 ret = AFB_EVENT_BAD_REQUEST;
289 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
292 struct json_object *res = json_object_new_object();
293 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
295 afb_req_success(request, res, "afb_event_push event [replyShowWindow]");
300 * showNotification event
302 * the contents to homescreen which display at top area.
305 * - request : the request
311 static void showNotification(afb_req_t request)
313 HMI_NOTICE("homescreen-service","called.");
314 int ret = g_client_manager->handleRequest(request, __FUNCTION__, "homescreen");
316 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
319 struct json_object *res = json_object_new_object();
320 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
322 afb_req_success(request, res, "afb_event_push event [showNotification]");
327 * showInformation event
329 * the contents to homescreen which display at bottom area.
332 * - request : the request
338 static void showInformation(afb_req_t request)
340 HMI_NOTICE("homescreen-service","called.");
341 int ret = g_client_manager->handleRequest(request, __FUNCTION__, "homescreen");
343 afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__);
346 struct json_object *res = json_object_new_object();
347 hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
349 afb_req_success(request, res, "afb_event_push event [showInformation]");
354 * array of the verbs exported to afb-daemon
356 static const afb_verb_t verbs[]= {
357 /* VERB'S NAME FUNCTION TO CALL */
358 { .verb="ping", .callback=pingSample },
359 { .verb="tap_shortcut", .callback=tap_shortcut },
360 { .verb="showWindow", .callback=showWindow },
361 { .verb="hideWindow", .callback=hideWindow },
362 { .verb="replyShowWindow", .callback=replyShowWindow },
363 { .verb="on_screen_message", .callback=on_screen_message },
364 { .verb="on_screen_reply", .callback=on_screen_reply },
365 { .verb="subscribe", .callback=subscribe },
366 { .verb="unsubscribe", .callback=unsubscribe },
367 { .verb="showNotification", .callback=showNotification },
368 { .verb="showInformation", .callback=showInformation },
369 {NULL } /* marker for end of the array */
373 * homescreen binding preinit function
376 * - api : the api serving the request
382 static int preinit(afb_api_t api)
384 HMI_NOTICE("homescreen-service","binding preinit (was register)");
389 * homescreen binding init function
392 * - api : the api serving the request
398 static int init(afb_api_t api)
400 HMI_NOTICE("homescreen-service","binding init");
402 g_client_manager->init();
408 * homescreen binding event function
411 * - api : the api serving the request
412 * - event : event name
413 * - object : event json object
419 static void onevent(afb_api_t api, const char *event, struct json_object *object)
421 HMI_NOTICE("homescreen-service","on_event %s", event);
424 const afb_binding_t afbBindingExport = {
426 .specification = NULL,