summaryrefslogtreecommitdiffstats
path: root/meta-ivi-common/conf/layer.conf
blob: e19cacc4fbf9017fc249844e429a452f72e7b1ec (plain)
1
2
3
4
5
6
7
8
9
10
# We have a conf and classes directory, add to BBPATH
BBPATH =. "${LAYERDIR}:"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "ivi-common"
BBFILE_PATTERN_ivi-common = "^${LAYERDIR}/"
BBFILE_PRIORITY_ivi-common = "7"
226' href='#n226'>226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
/*
 * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
 *
 * 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 _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include "hs-helper.h"
#include "hmi-debug.h"

#define COMMAND_EVENT_NUM 4
#define EVENT_SUBSCRIBE_ERROR_CODE 100

/* To Do hash table is better */
struct event{
    const char* name;
    struct afb_event* event;
    };

static struct event event_list[COMMAND_EVENT_NUM];

static struct afb_event ev_tap_shortcut;
static struct afb_event ev_on_screen_message;
static struct afb_event ev_on_screen_reply;
static struct afb_event ev_reserved;

static const char _error[] = "error";

static const char _application_name[] = "application_name";
static const char _display_message[] = "display_message";
static const char _reply_message[] = "reply_message";

/*
********** Method of HomeScreen Service (API) **********
*/

static void pingSample(struct afb_req request)
{
   static int pingcount = 0;
   afb_req_success_f(request, json_object_new_int(pingcount), "Ping count = %d", pingcount);
   HMI_NOTICE("homescreen-service","Verbosity macro at level notice invoked at ping invocation count = %d", pingcount);
   pingcount++;
}

/**
 * tap_shortcut notify for homescreen
 * When Shortcut area is tapped,  notify these applciations
  *
 * #### Parameters
 * Request key
 * - application_name   : application name
 *
 * #### Return
 * Nothing
 *
 */
static void tap_shortcut (struct afb_req request)
{
    HMI_NOTICE("homescreen-service","called.");

    int ret = 0;
    const char* value = afb_req_value(request, _application_name);
    if (value) {

      HMI_NOTICE("homescreen-service","request params = %s.", value);

      struct json_object* push_obj = json_object_new_object();
      hs_add_object_to_json_object_str( push_obj, 2,
      _application_name, value);
      afb_event_push(ev_tap_shortcut, push_obj);
    } else {
      afb_req_fail_f(request, "failed", "called %s, Unknown palameter", __FUNCTION__);
      return;
    }

  // response to HomeScreen
    struct json_object *res = json_object_new_object();
    hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
      _error,  ret);
    afb_req_success(request, res, "afb_event_push event [tap_shortcut]");
}

/**
 * HomeScreen OnScreen message
 *
 * #### Parameters
 * Request key
 * - display_message   : message for display
 *
 * #### Return
 * Nothing
 *
 */
static void on_screen_message (struct afb_req request)
{
    HMI_NOTICE("homescreen-service","called.");

    int ret = 0;
    const char* value = afb_req_value(request, _display_message);
    if (value) {

      HMI_NOTICE("homescreen-service","request params = %s.", value);

      struct json_object* push_obj = json_object_new_object();
      hs_add_object_to_json_object_str( push_obj, 2,
      _display_message, value);
      afb_event_push(ev_on_screen_message, push_obj);
    } else {
      afb_req_fail_f(request, "failed", "called %s, Unknown palameter", __FUNCTION__);
      return;
    }

  // response to HomeScreen
    struct json_object *res = json_object_new_object();
    hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
      _error,  ret);
    afb_req_success(request, res, "afb_event_push event [on_screen_message]");
}

/**
 * HomeScreen OnScreen Reply
 *
 * #### Parameters
 * Request key
 * - reply_message   : message for reply
 *
 * #### Return
 * Nothing
 *
 */
static void on_screen_reply (struct afb_req request)
{
    HMI_NOTICE("homescreen-service","called.");

    int ret = 0;
    const char* value = afb_req_value(request, _reply_message);
    if (value) {

      HMI_NOTICE("homescreen-service","request params = %s.", value);

      struct json_object* push_obj = json_object_new_object();
      hs_add_object_to_json_object_str( push_obj, 2,
      _reply_message, value);
      afb_event_push(ev_on_screen_reply, push_obj);
    } else {
      afb_req_fail_f(request, "failed", "called %s, Unknown palameter", __FUNCTION__);
      return;
    }

  // response to HomeScreen
    struct json_object *res = json_object_new_object();
    hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
      _error,  ret);
    afb_req_success(request, res, "afb_event_push event [on_screen_reply]");
}

/**
 * Subscribe event
 *
 * #### Parameters
 *  - event  : Event name. Event list is written in libhomescreen.cpp
 *
 * #### Return
 * Nothing
 *
 * #### Note
 *
 */
static void subscribe(struct afb_req request)
{
    const char *value = afb_req_value(request, "event");
    HMI_NOTICE("homescreen-service","value is %s", value);
    int ret = 0;
    if(value) {
        int index = hs_search_event_name_index(value);
        if(index < 0)
        {
            HMI_NOTICE("homescreen-service","dedicated event doesn't exist");
            ret = EVENT_SUBSCRIBE_ERROR_CODE;
        }
        else
        {
            afb_req_subscribe(request, *event_list[index].event);
        }
    }
    else{
        HMI_NOTICE("homescreen-service","Please input event name");
        ret = EVENT_SUBSCRIBE_ERROR_CODE;
    }
    /*create response json object*/
    struct json_object *res = json_object_new_object();
    hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
        _error, ret);
    afb_req_success_f(request, res, "homescreen binder subscribe event name [%s]", value);
}

/**
 * Unsubscribe event
 *
 * #### Parameters
 *  - event  : Event name. Event list is written in libhomescreen.cpp
 *
 * #### Return
 * Nothing
 *
 * #### Note
 *
 */
static void unsubscribe(struct afb_req request)
{
    const char *value = afb_req_value(request, "event");
    HMI_NOTICE("homescreen-service","value is %s", value);
    int ret = 0;
    if(value) {
        int index = hs_search_event_name_index(value);
        if(index < 0)
        {
            HMI_NOTICE("homescreen-service","dedicated event doesn't exist");
            ret = EVENT_SUBSCRIBE_ERROR_CODE;
        }
        else
        {
            afb_req_unsubscribe(request, *event_list[index].event);
        }
    }
    else{
        HMI_NOTICE("homescreen-service","Please input event name");
        ret = EVENT_SUBSCRIBE_ERROR_CODE;
    }
    /*create response json object*/
    struct json_object *res = json_object_new_object();
    hs_add_object_to_json_object_func(res, __FUNCTION__, 2,
        _error, ret);
    afb_req_success_f(request, res, "homescreen binder unsubscribe event name [%s]", value);
}

/*
 * array of the verbs exported to afb-daemon
 */
static const struct afb_verb_v2 verbs[]= {
    /* VERB'S NAME                 FUNCTION TO CALL               authorisation     some info         SESSION MANAGEMENT                                    */
    { .verb = "ping",              .callback = pingSample,        .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    { .verb = "tap_shortcut",      .callback = tap_shortcut,      .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    { .verb = "on_screen_message", .callback = on_screen_message, .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    { .verb = "on_screen_reply",   .callback = on_screen_reply,   .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    { .verb = "subscribe",         .callback = subscribe,         .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    { .verb = "unsubscribe",       .callback = unsubscribe,       .auth = NULL,     .info = NULL,     .session = AFB_SESSION_NONE     },
    {NULL } /* marker for end of the array */
};

static int preinit()
{
   HMI_NOTICE("homescreen-service","binding preinit (was register)");
   return 0;
}

static int init()
{
   HMI_NOTICE("homescreen-service","binding init");

   ev_tap_shortcut = afb_daemon_make_event(evlist[0]);
   ev_on_screen_message = afb_daemon_make_event(evlist[1]);
   ev_on_screen_reply = afb_daemon_make_event(evlist[2]);
   ev_reserved = afb_daemon_make_event(evlist[3]);

   event_list[0].name = evlist[0];
   event_list[0].event = &ev_tap_shortcut;

   event_list[1].name = evlist[1];
   event_list[1].event = &ev_on_screen_message;

   event_list[2].name = evlist[2];
   event_list[2].event = &ev_on_screen_reply;

   event_list[3].name = evlist[3];
   event_list[3].event = &ev_reserved;

   return 0;
}

static void onevent(const char *event, struct json_object *object)
{
   HMI_NOTICE("homescreen-service","on_event %s", event);
}

const struct afb_binding_v2 afbBindingV2 = {
    .api = "homescreen",
    .specification = NULL,
    .info = NULL,
    .verbs = verbs,
    .preinit = preinit,
    .init = init,
    .onevent = onevent
};