4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the License);
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 #include "core/common.h"
23 #include "core/edbus-handler.h"
25 #define LOWBAT_WARNING "warning"
26 #define LOWBAT_CRITICAL "critical"
27 #define LOWBAT_POWEROFF "poweroff"
29 #define DBUS_POPUP_PATH_LOWBAT POPUP_OBJECT_PATH"/Battery"
30 #define DBUS_POPUP_INTERFACE_LOWBAT POPUP_INTERFACE_NAME".Battery"
32 #define METHOD_LOWBAT_POPUP "BatteryLow"
33 #define METHOD_LOWBAT_POPUP_DISABLE "LowBatteryDisable"
34 #define METHOD_LOWBAT_POPUP_ENABLE "LowBatteryEnable"
42 static int lowbat_pid = 0;
43 static int lowbat_popup = APPS_ENABLE;
45 static void lowbat_cb(void *data, DBusMessage *msg, DBusError *unused)
53 dbus_error_init(&err);
54 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &id, DBUS_TYPE_INVALID);
56 _E("no message [%s:%s]", err.name, err.message);
57 dbus_error_free(&err);
62 _I("Created popup : %d", lowbat_pid);
65 static int lowbat_launch(void *data)
68 char *dest, *path, *iface, *method;
69 struct popup_data * key_data = (struct popup_data *)data;
72 if (lowbat_popup == APPS_DISABLE) {
73 _D("skip lowbat popup control");
77 param[0] = key_data->key;
78 param[1] = key_data->value;
79 if (strncmp(key_data->value, "lowbattery_warning", 18) == 0 ||
80 strncmp(key_data->value, "lowbattery_critical", 19) == 0) {
81 dest = POPUP_BUS_NAME;
82 path = DBUS_POPUP_PATH_LOWBAT;
83 iface = DBUS_POPUP_INTERFACE_LOWBAT;
84 method = METHOD_LOWBAT_POPUP;
86 dest = POPUP_BUS_NAME;
87 path = POPUP_PATH_LOWBAT;
88 iface = POPUP_INTERFACE_LOWBAT;
89 method = POPUP_METHOD_LAUNCH;
91 ret = dbus_method_async_with_reply(dest, path, iface, method,
92 "ss", param, lowbat_cb, -1, NULL);
94 if (strncmp(key_data->value, LOWBAT_WARNING, strlen(LOWBAT_WARNING)) &&
95 strncmp(key_data->value, LOWBAT_CRITICAL, strlen(LOWBAT_CRITICAL)) &&
96 strncmp(key_data->value, LOWBAT_POWEROFF, strlen(LOWBAT_POWEROFF)))
97 _I("%s(%d)",key_data->name, ret);
102 static int lowbat_terminate(void *data)
114 snprintf(buf, sizeof(buf), "%d", lowbat_pid);
117 ret = dbus_method_sync(POPUP_BUS_NAME,
120 POPUP_METHOD_TERMINATE, "i", param);
122 _E("FAIL: dbus_method_sync(): %d %d", ret, param);
127 static DBusMessage *dbus_disable_popup(E_DBus_Object *obj, DBusMessage *msg)
129 DBusMessageIter iter;
132 lowbat_popup = APPS_DISABLE;
133 reply = dbus_message_new_method_return(msg);
134 dbus_message_iter_init_append(reply, &iter);
135 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &lowbat_popup);
139 static DBusMessage *dbus_enable_popup(E_DBus_Object *obj, DBusMessage *msg)
141 DBusMessageIter iter;
144 lowbat_popup = APPS_ENABLE;
145 reply = dbus_message_new_method_return(msg);
146 dbus_message_iter_init_append(reply, &iter);
147 dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &lowbat_popup);
151 static const struct edbus_method edbus_methods[] = {
152 { METHOD_LOWBAT_POPUP_DISABLE, NULL, "i", dbus_disable_popup },
153 { METHOD_LOWBAT_POPUP_ENABLE, NULL, "i", dbus_enable_popup },
156 static void lowbat_init(void)
160 ret = register_edbus_method(DEVICED_PATH_APPS, edbus_methods, ARRAY_SIZE(edbus_methods));
162 _E("fail to init edbus method(%d)", ret);
165 static const struct apps_ops lowbat_ops = {
166 .name = "lowbat-syspopup",
168 .launch = lowbat_launch,
169 .terminate = lowbat_terminate,
172 APPS_OPS_REGISTER(&lowbat_ops)