4 * Copyright (c) 2011 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jae-young Hwang <j-zero.hwang@samsung.com>
8 * PROPRIETARY/CONFIDENTIAL
10 * This software is the confidential and proprietary information of
11 * SAMSUNG ELECTRONICS ("Confidential Information"). You agree and acknowledge
12 * that this software is owned by Samsung and you shall not disclose
13 * such Confidential Information and shall use it only in accordance with the
14 * terms of the license agreement you entered into with SAMSUNG ELECTRONICS.
15 * SAMSUNG make no representations or warranties about the suitability
16 * of the software, either express or implied, including but not limited
17 * to the implied warranties of merchantability, fitness for a particular
19 * by licensee arising out of or releated to this software.
26 #include <sys/types.h>
30 #include <haptic_plugin_intf.h>
31 #include "haptic_module_log.h"
34 #define EXTAPI __attribute__ ((visibility("default")))
37 #define DEFAULT_MOTOR_COUNT 1
38 #define DEFAULT_DEVICE_HANDLE 0x01
39 #define DEFAULT_EFFECT_HANDLE 0x02
41 static int _get_device_count(int *count)
44 return HAPTIC_MODULE_INVALID_ARGUMENT;
46 *count = DEFAULT_MOTOR_COUNT;
47 return HAPTIC_MODULE_ERROR_NONE;
50 static int _open_device(int device_index, int *device_handle)
52 if (device_index < HAPTIC_MODULE_DEVICE_0 || device_index > HAPTIC_MODULE_DEVICE_ALL)
53 return HAPTIC_MODULE_INVALID_ARGUMENT;
55 if (device_handle == NULL)
56 return HAPTIC_MODULE_INVALID_ARGUMENT;
58 *device_handle = DEFAULT_DEVICE_HANDLE;
59 return HAPTIC_MODULE_ERROR_NONE;
62 static int _close_device(int device_handle)
64 if (device_handle < 0)
65 return HAPTIC_MODULE_INVALID_ARGUMENT;
67 return HAPTIC_MODULE_ERROR_NONE;
70 static int _vibrate_monotone(int device_handle, int duration, int feedback, int priority, int *effect_handle)
72 if (device_handle < 0)
73 return HAPTIC_MODULE_INVALID_ARGUMENT;
76 return HAPTIC_MODULE_INVALID_ARGUMENT;
78 if (feedback < HAPTIC_MODULE_FEEDBACK_MIN || feedback > HAPTIC_MODULE_FEEDBACK_MAX)
79 return HAPTIC_MODULE_INVALID_ARGUMENT;
81 if (priority < HAPTIC_MODULE_PRIORITY_MIN || priority > HAPTIC_MODULE_PRIORITY_HIGH)
82 return HAPTIC_MODULE_INVALID_ARGUMENT;
84 if (effect_handle == NULL)
85 return HAPTIC_MODULE_INVALID_ARGUMENT;
87 if (feedback == HAPTIC_MODULE_FEEDBACK_MIN)
88 return HAPTIC_MODULE_ERROR_NONE;
90 MODULE_LOG("call %s function", __func__);
92 *effect_handle = DEFAULT_EFFECT_HANDLE;
93 return HAPTIC_MODULE_ERROR_NONE;
96 static int _vibrate_file(int device_handle, const char *file_path, int iteration, int feedback, int priority, int *effect_handle)
98 if (device_handle < 0)
99 return HAPTIC_MODULE_INVALID_ARGUMENT;
101 if (file_path == NULL)
102 return HAPTIC_MODULE_INVALID_ARGUMENT;
104 if (iteration < HAPTIC_MODULE_ITERATION_ONCE || iteration > HAPTIC_MODULE_ITERATION_INFINITE)
105 return HAPTIC_MODULE_INVALID_ARGUMENT;
107 if (feedback < HAPTIC_MODULE_FEEDBACK_MIN || feedback > HAPTIC_MODULE_FEEDBACK_MAX)
108 return HAPTIC_MODULE_INVALID_ARGUMENT;
110 if (priority < HAPTIC_MODULE_PRIORITY_MIN || priority > HAPTIC_MODULE_PRIORITY_HIGH)
111 return HAPTIC_MODULE_INVALID_ARGUMENT;
113 if (effect_handle == NULL)
114 return HAPTIC_MODULE_INVALID_ARGUMENT;
116 if (feedback == HAPTIC_MODULE_FEEDBACK_MIN)
117 return HAPTIC_MODULE_ERROR_NONE;
119 MODULE_LOG("call %s function", __func__);
121 *effect_handle = DEFAULT_EFFECT_HANDLE;
122 return HAPTIC_MODULE_ERROR_NONE;
125 static int _vibrate_buffer(int device_handle, const unsigned char *vibe_buffer, int iteration, int feedback, int priority, int *effect_handle)
127 if (device_handle < 0)
128 return HAPTIC_MODULE_INVALID_ARGUMENT;
130 if (vibe_buffer == NULL)
131 return HAPTIC_MODULE_INVALID_ARGUMENT;
133 if (iteration < HAPTIC_MODULE_ITERATION_ONCE || iteration > HAPTIC_MODULE_ITERATION_INFINITE)
134 return HAPTIC_MODULE_INVALID_ARGUMENT;
136 if (feedback < HAPTIC_MODULE_FEEDBACK_MIN || feedback > HAPTIC_MODULE_FEEDBACK_MAX)
137 return HAPTIC_MODULE_INVALID_ARGUMENT;
139 if (priority < HAPTIC_MODULE_PRIORITY_MIN || priority > HAPTIC_MODULE_PRIORITY_HIGH)
140 return HAPTIC_MODULE_INVALID_ARGUMENT;
142 if (effect_handle == NULL)
143 return HAPTIC_MODULE_INVALID_ARGUMENT;
145 if (feedback == HAPTIC_MODULE_FEEDBACK_MIN)
146 return HAPTIC_MODULE_ERROR_NONE;
148 MODULE_LOG("call %s function", __func__);
150 *effect_handle = DEFAULT_EFFECT_HANDLE;
151 return HAPTIC_MODULE_ERROR_NONE;
154 static int _stop_effect(int device_handle, int effect_handle)
156 if (device_handle < 0)
157 return HAPTIC_MODULE_INVALID_ARGUMENT;
159 if (effect_handle < 0)
160 return HAPTIC_MODULE_INVALID_ARGUMENT;
162 MODULE_LOG("call %s function", __func__);
164 return HAPTIC_MODULE_ERROR_NONE;
167 static int _stop_all_effects(int device_handle)
169 if (device_handle < 0)
170 return HAPTIC_MODULE_INVALID_ARGUMENT;
172 MODULE_LOG("call %s function", __func__);
174 return HAPTIC_MODULE_ERROR_NONE;
177 static int _pause_effect(int device_handle, int effect_handle)
179 if (device_handle < 0)
180 return HAPTIC_MODULE_INVALID_ARGUMENT;
182 if (effect_handle < 0)
183 return HAPTIC_MODULE_INVALID_ARGUMENT;
185 MODULE_LOG("call %s function", __func__);
187 return HAPTIC_MODULE_ERROR_NONE;
190 static int _resume_effect(int device_handle, int effect_handle)
192 if (device_handle < 0)
193 return HAPTIC_MODULE_INVALID_ARGUMENT;
195 if (effect_handle < 0)
196 return HAPTIC_MODULE_INVALID_ARGUMENT;
198 MODULE_LOG("call %s function", __func__);
200 return HAPTIC_MODULE_ERROR_NONE;
203 static int _get_effect_state(int device_handle, int effect_handle, int *effect_state)
205 if (device_handle < 0)
206 return HAPTIC_MODULE_INVALID_ARGUMENT;
208 if (effect_handle < 0)
209 return HAPTIC_MODULE_INVALID_ARGUMENT;
211 if (effect_state == NULL)
212 return HAPTIC_MODULE_INVALID_ARGUMENT;
214 MODULE_LOG("call %s function", __func__);
216 return HAPTIC_MODULE_ERROR_NONE;
219 static int _create_effect(const unsigned char *vibe_buffer, int max_bufsize, haptic_module_effect_element *elem_arr, int max_elemcnt)
221 if (vibe_buffer == NULL)
222 return HAPTIC_MODULE_INVALID_ARGUMENT;
225 return HAPTIC_MODULE_INVALID_ARGUMENT;
227 if (elem_arr == NULL)
228 return HAPTIC_MODULE_INVALID_ARGUMENT;
231 return HAPTIC_MODULE_INVALID_ARGUMENT;
233 MODULE_LOG("call %s function", __func__);
235 return HAPTIC_MODULE_ERROR_NONE;
238 static int _save_effect(const unsigned char *vibe_buffer, int max_bufsize, const char *file_path)
240 if (vibe_buffer == NULL)
241 return HAPTIC_MODULE_INVALID_ARGUMENT;
244 return HAPTIC_MODULE_INVALID_ARGUMENT;
246 if (file_path == NULL)
247 return HAPTIC_MODULE_INVALID_ARGUMENT;
249 MODULE_LOG("call %s function", __func__);
251 return HAPTIC_MODULE_ERROR_NONE;
254 static int _get_file_duration(int device_handle, const char *file_path, int *file_duration)
256 if (device_handle < 0)
257 return HAPTIC_MODULE_INVALID_ARGUMENT;
259 if (file_path == NULL)
260 return HAPTIC_MODULE_INVALID_ARGUMENT;
262 if (file_duration == NULL)
263 return HAPTIC_MODULE_INVALID_ARGUMENT;
265 MODULE_LOG("call %s function", __func__);
267 return HAPTIC_MODULE_ERROR_NONE;
270 static int _get_buffer_duration(int device_handle, const unsigned char *vibe_buffer, int *buffer_duration)
272 if (device_handle < 0)
273 return HAPTIC_MODULE_INVALID_ARGUMENT;
275 if (vibe_buffer == NULL)
276 return HAPTIC_MODULE_INVALID_ARGUMENT;
278 if (buffer_duration == NULL)
279 return HAPTIC_MODULE_INVALID_ARGUMENT;
281 MODULE_LOG("call %s function", __func__);
283 return HAPTIC_MODULE_ERROR_NONE;
286 static int _convert_binary (void)
288 MODULE_ERROR("This device is not supported this function(%s)", __func__);
289 return HAPTIC_MODULE_NOT_SUPPORTED;
292 static haptic_plugin_interface haptic_plugin_emul = {
293 .haptic_internal_get_device_count = _get_device_count,
294 .haptic_internal_open_device = _open_device,
295 .haptic_internal_close_device = _close_device,
296 .haptic_internal_vibrate_monotone = _vibrate_monotone,
297 .haptic_internal_vibrate_file = _vibrate_file,
298 .haptic_internal_vibrate_buffer = _vibrate_buffer,
299 .haptic_internal_stop_effect = _stop_effect,
300 .haptic_internal_stop_all_effects = _stop_all_effects,
301 .haptic_internal_pause_effect = _pause_effect,
302 .haptic_internal_resume_effect = _resume_effect,
303 .haptic_internal_get_effect_state = _get_effect_state,
304 .haptic_internal_create_effect = _create_effect,
305 .haptic_internal_save_effect = _save_effect,
306 .haptic_internal_get_file_duration = _get_file_duration,
307 .haptic_internal_get_buffer_duration = _get_buffer_duration,
308 .haptic_internal_convert_binary = _convert_binary,
312 const haptic_plugin_interface *get_haptic_plugin_interface()
314 return &haptic_plugin_emul;