2 * Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
4 * This file is a modified version of BSD licensed file and
5 * licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * Please, see the LICENSE file for the original copyright owner and
21 #include "dbus_gesture_adapter.h"
26 #define E_A11Y_SERVICE_BUS_NAME "com.samsung.EModule"
27 #define E_A11Y_SERVICE_NAVI_IFC_NAME "com.samsung.GestureNavigation"
28 #define E_A11Y_SERVICE_NAVI_OBJ_PATH "/com/samsung/GestureNavigation"
30 static Eldbus_Connection *conn;
31 static Eldbus_Service_Interface *service;
38 static const Eldbus_Signal _signals[] = {
39 [GESTURE_DETECTED] = {"GestureDetected", ELDBUS_ARGS({"siiiiu", NULL}), 0},
40 {NULL, ELDBUS_ARGS({NULL, NULL}), 0}
43 static const Eldbus_Service_Interface_Desc desc = {
44 E_A11Y_SERVICE_NAVI_IFC_NAME, NULL, _signals, NULL, NULL, NULL
47 void _on_get_a11y_address(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
49 const char *sock_addr;
50 const char *errname, *errmsg;
51 Eldbus_Connection *session = data;
53 if (eldbus_message_error_get(msg, &errname, &errmsg))
55 ERROR("GetAddress failed: %s %s", errname, errmsg);
59 if (!eldbus_message_arguments_get(msg, "s", &sock_addr) || !sock_addr)
61 ERROR("Could not get A11Y Bus socket address.");
65 if (!(conn = eldbus_address_connection_get(sock_addr)))
67 ERROR("Failed to connect to %s", sock_addr);
71 if (!(service = eldbus_service_interface_register(conn, E_A11Y_SERVICE_NAVI_OBJ_PATH, &desc)))
73 ERROR("Failed to register %s interface", E_A11Y_SERVICE_NAVI_IFC_NAME);
74 eldbus_connection_unref(conn);
79 eldbus_name_request(conn, E_A11Y_SERVICE_BUS_NAME, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, NULL, NULL);
82 eldbus_connection_unref(session);
85 void dbus_gesture_adapter_init(void)
87 Eldbus_Connection *session;
92 if (!(session = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION)))
94 ERROR("Unable to get session bus");
98 if (!(msg = eldbus_message_method_call_new("org.a11y.Bus", "/org/a11y/bus",
99 "org.a11y.Bus", "GetAddress")))
101 ERROR("DBus message allocation failed");
105 if (!eldbus_connection_send(session, msg, _on_get_a11y_address, session, -1))
107 ERROR("Message send failed");
114 eldbus_message_unref(msg);
116 eldbus_connection_unref(session);
119 void dbus_gesture_adapter_shutdown(void)
121 if (service) eldbus_service_object_unregister(service);
122 if (conn) eldbus_connection_unref(conn);
130 static const char *_gesture_enum_to_string(Gesture g)
134 case ONE_FINGER_HOVER:
135 return "OneFingerHover";
136 case TWO_FINGERS_HOVER:
137 return "TwoFingersHover";
138 case THREE_FINGERS_HOVER:
139 return "ThreeFingersHover";
140 case ONE_FINGER_FLICK_LEFT:
141 return "OneFingerFlickLeft";
142 case ONE_FINGER_FLICK_RIGHT:
143 return "OneFingerFlickRight";
144 case ONE_FINGER_FLICK_UP:
145 return "OneFingerFlickUp";
146 case ONE_FINGER_FLICK_DOWN:
147 return "OneFingerFlickDown";
148 case TWO_FINGERS_FLICK_UP:
149 return "TwoFingersFlickUp";
150 case TWO_FINGERS_FLICK_DOWN:
151 return "TwoFingersFlickDown";
152 case TWO_FINGERS_FLICK_LEFT:
153 return "TwoFingersFlickLeft";
154 case TWO_FINGERS_FLICK_RIGHT:
155 return "TwoFingersFlickRight";
156 case THREE_FINGERS_FLICK_LEFT:
157 return "ThreeFingersFlickLeft";
158 case THREE_FINGERS_FLICK_RIGHT:
159 return "ThreeFingersFlickRight";
160 case THREE_FINGERS_FLICK_UP:
161 return "ThreeFingersFlickUp";
162 case THREE_FINGERS_FLICK_DOWN:
163 return "ThreeFingersFlickDown";
164 case ONE_FINGER_SINGLE_TAP:
165 return "OneFingerSingleTap";
166 case ONE_FINGER_DOUBLE_TAP:
167 return "OneFingerDoubleTap";
168 case ONE_FINGER_TRIPLE_TAP:
169 return "OneFingerTripleTap";
170 case TWO_FINGERS_SINGLE_TAP:
171 return "TwoFingersSingleTap";
172 case TWO_FINGERS_DOUBLE_TAP:
173 return "TwoFingersDoubleTap";
174 case TWO_FINGERS_TRIPLE_TAP:
175 return "TwoFingersTripleTap";
176 case THREE_FINGERS_SINGLE_TAP:
177 return "ThreeFingersSingleTap";
178 case THREE_FINGERS_DOUBLE_TAP:
179 return "ThreeFingersDoubleTap";
180 case THREE_FINGERS_TRIPLE_TAP:
181 return "ThreeFingersTripleTap";
182 case ONE_FINGER_FLICK_LEFT_RETURN:
183 return "OneFingerFlickLeftReturn";
184 case ONE_FINGER_FLICK_RIGHT_RETURN:
185 return "OneFingerFlickRightReturn";
186 case ONE_FINGER_FLICK_UP_RETURN:
187 return "OneFingerFlickUpReturn";
188 case ONE_FINGER_FLICK_DOWN_RETURN:
189 return "OneFingerFlickDownReturn";
190 case TWO_FINGERS_FLICK_LEFT_RETURN:
191 return "TwoFingersFlickLeftReturn";
192 case TWO_FINGERS_FLICK_RIGHT_RETURN:
193 return "TwoFingersFlickRightReturn";
194 case TWO_FINGERS_FLICK_UP_RETURN:
195 return "TwoFingersFlickUpReturn";
196 case TWO_FINGERS_FLICK_DOWN_RETURN:
197 return "TwoFingersFlickDownReturn";
198 case THREE_FINGERS_FLICK_LEFT_RETURN:
199 return "ThreeFingersFlickLeftReturn";
200 case THREE_FINGERS_FLICK_RIGHT_RETURN:
201 return "ThreeFingersFlickRightReturn";
202 case THREE_FINGERS_FLICK_UP_RETURN:
203 return "ThreeFingersFlickUpReturn";
204 case THREE_FINGERS_FLICK_DOWN_RETURN:
205 return "ThreeFingersFlickDownReturn";
207 ERROR("unhandled gesture enum");
212 void dbus_gesture_adapter_emit(const Gesture_Info *info)
219 name = _gesture_enum_to_string(info->type);
223 if (!eldbus_service_signal_emit(service, GESTURE_DETECTED, name, info->x_beg, info->y_beg,
224 info->x_end, info->y_end, info->state))
226 ERROR("Unable to send GestureDetected signal");
229 DEBUG("Successfullt send GestureDetected singal");