X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fappcore-rotation.c;h=5d905260a7213d3d2b890a859e2ccde54ec34fd3;hb=d7c2b92cd7efbeee7d8f019585cf48c2f4664bb6;hp=bfb33af5f6bdf4438c2fb27e72302474368e8e0c;hpb=58b4a5a46100477fe7164a02ba9afe05eec0599d;p=platform%2Fcore%2Fappfw%2Fapp-core.git diff --git a/src/appcore-rotation.c b/src/appcore-rotation.c index bfb33af..5d90526 100644 --- a/src/appcore-rotation.c +++ b/src/appcore-rotation.c @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include #include "appcore-internal.h" @@ -33,15 +33,15 @@ #include #include -/*Fixme: to be added for wayland works*/ -#define _MAKE_ATOM(a, s) \ - do { \ - a = ecore_x_atom_get(s); \ - if (!a) \ - _ERR("##s creation failed.\n"); \ - } while(0) +/* Fixme: to be added for wayland works */ +#define _MAKE_ATOM(a, s) \ + do { \ + a = ecore_x_atom_get(s); \ + if (!a) \ + _ERR("##s creation failed.\n"); \ + } while (0) -#define STR_ATOM_ROTATION_LOCK "_E_ROTATION_LOCK" +#define STR_ATOM_ROTATION_LOCK "_E_ROTATION_LOCK" static Ecore_X_Atom ATOM_ROTATION_LOCK = 0; static Ecore_X_Window root; @@ -49,50 +49,57 @@ static Ecore_X_Window root; struct rot_s { int handle; - int (*callback) (enum appcore_rm, void *); + int (*callback) (void *event_info, enum appcore_rm, void *); enum appcore_rm mode; int lock; void *cbdata; int cb_set; - int sf_started; + int sensord_started; struct ui_wm_rotate* wm_rotate; }; static struct rot_s rot; struct rot_evt { - enum accelerometer_rotate_state re; + enum auto_rotation_state re; enum appcore_rm rm; }; static struct rot_evt re_to_rm[] = { { - ROTATION_EVENT_0, - APPCORE_RM_PORTRAIT_NORMAL, + AUTO_ROTATION_DEGREE_0, + APPCORE_RM_PORTRAIT_NORMAL, }, { - ROTATION_EVENT_90, - APPCORE_RM_LANDSCAPE_NORMAL, + AUTO_ROTATION_DEGREE_90, + APPCORE_RM_LANDSCAPE_NORMAL, }, { - ROTATION_EVENT_180, - APPCORE_RM_PORTRAIT_REVERSE, + AUTO_ROTATION_DEGREE_180, + APPCORE_RM_PORTRAIT_REVERSE, }, { - ROTATION_EVENT_270, - APPCORE_RM_LANDSCAPE_REVERSE, + AUTO_ROTATION_DEGREE_270, + APPCORE_RM_LANDSCAPE_REVERSE, }, }; -static enum appcore_rm __get_mode(int event_data) +static enum appcore_rm __get_mode(sensor_data_t data) { int i; + int event; enum appcore_rm m; m = APPCORE_RM_UNKNOWN; + if (data.value_count > 0) { + event = (int)data.values[0]; + } else { + _ERR("Failed to get sensor data"); + return -1; + } for (i = 0; i < sizeof(re_to_rm) / sizeof(re_to_rm[0]); i++) { - if (re_to_rm[i].re == event_data) { + if (re_to_rm[i].re == event) { m = re_to_rm[i].rm; break; } @@ -101,31 +108,27 @@ static enum appcore_rm __get_mode(int event_data) return m; } -static void __changed_cb(unsigned int event_type, sensor_event_data_t *event, - void *data) +static void __changed_cb(sensor_t sensor, unsigned int event_type, + sensor_data_t *data, void *user_data) { - int *cb_event_data; enum appcore_rm m; - int ret; if (rot.lock) return; - if (event_type != ACCELEROMETER_EVENT_ROTATION_CHECK) { + if (event_type != AUTO_ROTATION_CHANGE_STATE_EVENT) { errno = EINVAL; return; } - cb_event_data = (int *)(event->event_data); - - m = __get_mode(*cb_event_data); + m = __get_mode(*data); _DBG("[APP %d] Rotation: %d -> %d", getpid(), rot.mode, m); if (rot.callback) { if (rot.cb_set && rot.mode != m) { _DBG("[APP %d] Rotation: %d -> %d", getpid(), rot.mode, m); - rot.callback(m, data); + rot.callback((void *)&m, m, user_data); rot.mode = m; } } @@ -135,14 +138,13 @@ static void __lock_cb(keynode_t *node, void *data) { int r; enum appcore_rm m; - int ret; rot.lock = !vconf_keynode_get_bool(node); if (rot.lock) { m = APPCORE_RM_PORTRAIT_NORMAL; if (rot.mode != m) { - rot.callback(m, data); + rot.callback((void *)&m, m, data); rot.mode = m; } _DBG("[APP %d] Rotation locked", getpid()); @@ -156,7 +158,7 @@ static void __lock_cb(keynode_t *node, void *data) _DBG("[APP %d] Rotmode prev %d -> curr %d", getpid(), rot.mode, m); if (!r && rot.mode != m) { - rot.callback(m, data); + rot.callback((void *)&m, m, data); rot.mode = m; } } @@ -170,9 +172,8 @@ static void __add_rotlock(void *data) lock = 0; r = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &lock); - if (r) { + if (r) _DBG("[APP %d] Rotation vconf get bool failed", getpid()); - } rot.lock = !lock; @@ -186,15 +187,15 @@ static void __del_rotlock(void) rot.lock = 0; } -EXPORT_API int appcore_set_rotation_cb(int (*cb) (enum appcore_rm, void *), +EXPORT_API int appcore_set_rotation_cb(int (*cb) (void *evnet_info, enum appcore_rm, void *), void *data) { - if (rot.wm_rotate) { + if (rot.wm_rotate) return rot.wm_rotate->set_rotation_cb(cb, data); - } else { - int r; + bool r; int handle; + sensor_t sensor = sensord_get_sensor(AUTO_ROTATION_SENSOR); if (cb == NULL) { errno = EINVAL; @@ -206,17 +207,17 @@ EXPORT_API int appcore_set_rotation_cb(int (*cb) (enum appcore_rm, void *), return -1; } - handle = sf_connect(ACCELEROMETER_SENSOR); + handle = sensord_connect(sensor); if (handle < 0) { - _ERR("sf_connect failed: %d", handle); + _ERR("sensord_connect failed: %d", handle); return -1; } - r = sf_register_event(handle, ACCELEROMETER_EVENT_ROTATION_CHECK, - NULL, __changed_cb, data); - if (r < 0) { - _ERR("sf_register_event failed: %d", r); - sf_disconnect(handle); + r = sensord_register_event(handle, AUTO_ROTATION_CHANGE_STATE_EVENT, + SENSOR_INTERVAL_NORMAL, 0, __changed_cb, data); + if (!r) { + _ERR("sensord_register_event failed"); + sensord_disconnect(handle); return -1; } @@ -224,27 +225,27 @@ EXPORT_API int appcore_set_rotation_cb(int (*cb) (enum appcore_rm, void *), rot.callback = cb; rot.cbdata = data; - r = sf_start(handle, 0); - if (r < 0) { - _ERR("sf_start failed: %d", r); - r = sf_unregister_event(handle, ACCELEROMETER_EVENT_ROTATION_CHECK); - if (r < 0) { - _ERR("sf_unregister_event failed: %d", r); - } + r = sensord_start(handle, 0); + if (!r) { + _ERR("sensord_start failed"); + r = sensord_unregister_event(handle, AUTO_ROTATION_CHANGE_STATE_EVENT); + if (!r) + _ERR("sensord_unregister_event failed"); + rot.callback = NULL; rot.cbdata = NULL; rot.cb_set = 0; - rot.sf_started = 0; - sf_disconnect(handle); + rot.sensord_started = 0; + sensord_disconnect(handle); return -1; } - rot.sf_started = 1; + rot.sensord_started = 1; rot.handle = handle; __add_rotlock(data); #ifdef X11 - _MAKE_ATOM(ATOM_ROTATION_LOCK, STR_ATOM_ROTATION_LOCK ); + _MAKE_ATOM(ATOM_ROTATION_LOCK, STR_ATOM_ROTATION_LOCK); root = ecore_x_window_root_first_get(); XSelectInput(ecore_x_display_get(), root, PropertyChangeMask); #endif @@ -254,21 +255,20 @@ EXPORT_API int appcore_set_rotation_cb(int (*cb) (enum appcore_rm, void *), EXPORT_API int appcore_unset_rotation_cb(void) { - if (rot.wm_rotate) { + if (rot.wm_rotate) return rot.wm_rotate->unset_rotation_cb(); - } else { - int r; + bool r; _retv_if(rot.callback == NULL, 0); __del_rotlock(); if (rot.cb_set) { - r = sf_unregister_event(rot.handle, - ACCELEROMETER_EVENT_ROTATION_CHECK); - if (r < 0) { - _ERR("sf_unregister_event failed: %d", r); + r = sensord_unregister_event(rot.handle, + AUTO_ROTATION_CHANGE_STATE_EVENT); + if (!r) { + _ERR("sensord_unregister_event failed"); return -1; } rot.cb_set = 0; @@ -276,18 +276,18 @@ EXPORT_API int appcore_unset_rotation_cb(void) rot.callback = NULL; rot.cbdata = NULL; - if (rot.sf_started == 1) { - r = sf_stop(rot.handle); - if (r < 0) { - _ERR("sf_stop failed: %d", r); + if (rot.sensord_started == 1) { + r = sensord_stop(rot.handle); + if (!r) { + _ERR("sensord_stop failed"); return -1; } - rot.sf_started = 0; + rot.sensord_started = 0; } - r = sf_disconnect(rot.handle); - if (r < 0) { - _ERR("sf_disconnect failed: %d", r); + r = sensord_disconnect(rot.handle); + if (!r) { + _ERR("sensord_disconnect failed"); return -1; } rot.handle = -1; @@ -297,37 +297,35 @@ EXPORT_API int appcore_unset_rotation_cb(void) EXPORT_API int appcore_get_rotation_state(enum appcore_rm *curr) { - if (rot.wm_rotate) { + if (rot.wm_rotate) return rot.wm_rotate->get_rotation_state(curr); - } else { - int r; - unsigned long event; + bool r; + sensor_data_t data; if (curr == NULL) { errno = EINVAL; return -1; } - r = sf_check_rotation(&event); - if (r < 0) { - _ERR("sf_check_rotation failed: %d", r); + r = sensord_get_data(rot.handle, AUTO_ROTATION_SENSOR, &data); + if (!r) { + _ERR("sensord_get_data failed"); *curr = APPCORE_RM_UNKNOWN; return -1; } - *curr = __get_mode(event); + *curr = __get_mode(data); } return 0; } EXPORT_API int appcore_pause_rotation_cb(void) { - if (rot.wm_rotate) { + if (rot.wm_rotate) return rot.wm_rotate->pause_rotation_cb(); - } else { - int r; + bool r; _retv_if(rot.callback == NULL, 0); _DBG("[APP %d] appcore_pause_rotation_cb is called", getpid()); @@ -335,23 +333,22 @@ EXPORT_API int appcore_pause_rotation_cb(void) __del_rotlock(); if (rot.cb_set) { - r = sf_unregister_event(rot.handle, - ACCELEROMETER_EVENT_ROTATION_CHECK); - if (r < 0) { - _ERR("sf_unregister_event in appcore_internal_sf_stop failed: %d", r); + r = sensord_unregister_event(rot.handle, + AUTO_ROTATION_CHANGE_STATE_EVENT); + if (!r) { + _ERR("sensord_unregister_event failed"); return -1; } rot.cb_set = 0; } - if (rot.sf_started == 1) { - r = sf_stop(rot.handle); - if (r < 0) { - _ERR("sf_stop in appcore_internal_sf_stop failed: %d", - r); + if (rot.sensord_started == 1) { + r = sensord_stop(rot.handle); + if (!r) { + _ERR("sensord_stop failed"); return -1; } - rot.sf_started = 0; + rot.sensord_started = 0; } } @@ -360,40 +357,38 @@ EXPORT_API int appcore_pause_rotation_cb(void) EXPORT_API int appcore_resume_rotation_cb(void) { - if (rot.wm_rotate) { + if (rot.wm_rotate) return rot.wm_rotate->resume_rotation_cb(); - } else { - int r,ret; + bool r; enum appcore_rm m; _retv_if(rot.callback == NULL, 0); _DBG("[APP %d] appcore_resume_rotation_cb is called", getpid()); if (rot.cb_set == 0) { - r = sf_register_event(rot.handle, - ACCELEROMETER_EVENT_ROTATION_CHECK, NULL, - __changed_cb, rot.cbdata); - if (r < 0) { - _ERR("sf_register_event in appcore_internal_sf_start failed: %d", r); + r = sensord_register_event(rot.handle, + AUTO_ROTATION_CHANGE_STATE_EVENT, + SENSOR_INTERVAL_NORMAL, 0, __changed_cb, rot.cbdata); + if (!r) { + _ERR("sensord_register_event failed"); return -1; } rot.cb_set = 1; } - if (rot.sf_started == 0) { - r = sf_start(rot.handle, 0); - if (r < 0) { - _ERR("sf_start in appcore_internal_sf_start failed: %d", - r); - ret = sf_unregister_event(rot.handle, - ACCELEROMETER_EVENT_ROTATION_CHECK); - if (ret < 0) - _ERR("sf_unregister_event failed: %d", ret); + if (rot.sensord_started == 0) { + r = sensord_start(rot.handle, 0); + if (!r) { + _ERR("sensord_start failed"); + r = sensord_unregister_event(rot.handle, + AUTO_ROTATION_CHANGE_STATE_EVENT); + if (!r) + _ERR("sensord_unregister_event failed"); rot.cb_set = 0; return -1; } - rot.sf_started = 1; + rot.sensord_started = 1; } __add_rotlock(rot.cbdata); @@ -401,7 +396,7 @@ EXPORT_API int appcore_resume_rotation_cb(void) r = appcore_get_rotation_state(&m); _DBG("[APP %d] Rotmode prev %d -> curr %d", getpid(), rot.mode, m); if (!r && rot.mode != m && rot.lock == 0) { - rot.callback(m, rot.cbdata); + rot.callback((void *)&m, m, rot.cbdata); rot.mode = m; } }