diff --git a/src/modules/ecordova/tizen/ecordova_contacts_service.h b/src/modules/ecordova/tizen/ecordova_contacts_service.h index 524615836e..e4274698b0 100644 --- a/src/modules/ecordova/tizen/ecordova_contacts_service.h +++ b/src/modules/ecordova/tizen/ecordova_contacts_service.h @@ -5,7 +5,7 @@ #include #include -#define CONTACTS_API +#include "ecordova_tizen.h" struct __contacts_record_h; typedef struct __contacts_record_h* contacts_record_h; @@ -42,7 +42,7 @@ typedef struct __contacts_query_h* contacts_query_h; #define _CONTACTS_PROPERTY_PROJECTION_LLI(property_id_name) unsigned int property_id_name; #define _CONTACTS_END_VIEW(name) \ } name##_property_ids; \ - extern CONTACTS_API const name##_property_ids* name; + extern const name##_property_ids* name; #define _CONTACTS_END_READ_ONLY_VIEW(name) _CONTACTS_END_VIEW(name) _CONTACTS_BEGIN_VIEW() @@ -339,36 +339,6 @@ extern int (*contacts_query_destroy)(contacts_query_h query); typedef struct _Ecordova_Contact_Data Ecordova_Contact_Data; -/* Check if slp error or not */ -#define TIZEN_ERROR_MIN_PLATFORM_ERROR (-1073741824LL) /* = -2147483648 / 2 */ -/* Tizen Contacts Error */ -#define TIZEN_ERROR_CONTACTS -0x02010000 - -/** - * @brief Enumeration for tizen errors. - * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif - * -*/ -typedef enum -{ - TIZEN_ERROR_NONE = 0, /**< Successful */ - TIZEN_ERROR_OUT_OF_MEMORY = -ENOMEM, /**< Out of memory */ - TIZEN_ERROR_INVALID_PARAMETER = -EINVAL, /**< Invalid function parameter */ - TIZEN_ERROR_FILE_NO_SPACE_ON_DEVICE = -ENOSPC, /**< No space left on device */ - TIZEN_ERROR_PERMISSION_DENIED = -EACCES, /**< Permission denied */ - TIZEN_ERROR_NO_DATA = -ENODATA, /**< No data available */ - - TIZEN_ERROR_UNKNOWN = TIZEN_ERROR_MIN_PLATFORM_ERROR, /**< Unknown error */ - - /* This is a place to add new errors here. - * Do not assign integer values explicitly. Values are auto-assigned. - */ - TIZEN_ERROR_TIMED_OUT, /**< Time out */ - TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ - TIZEN_ERROR_USER_NOT_CONSENTED, /**< Not Consented */ - TIZEN_ERROR_END_OF_COLLECTION, -} tizen_error_e; - typedef enum { /* GENERAL */ diff --git a/src/modules/ecordova/tizen/ecordova_device.c b/src/modules/ecordova/tizen/ecordova_device.c index f60a9aa5ac..90a2f5ec16 100644 --- a/src/modules/ecordova/tizen/ecordova_device.c +++ b/src/modules/ecordova/tizen/ecordova_device.c @@ -3,9 +3,7 @@ #endif #include "ecordova_device_private.h" - -#ifdef HAVE_TIZEN_INFO -#include +#include "ecordova_tizen.h" #define MY_CLASS ECORDOVA_DEVICE_CLASS #define MY_CLASS_NAME "Ecordova_Device" @@ -99,4 +97,3 @@ _ecordova_device_version_get(Eo *obj EINA_UNUSED, Ecordova_Device_Data *pd) } #include "ecordova_device.eo.c" -#endif diff --git a/src/modules/ecordova/tizen/ecordova_devicemotion.c b/src/modules/ecordova/tizen/ecordova_devicemotion.c index a5344c04b6..99e4afa461 100644 --- a/src/modules/ecordova/tizen/ecordova_devicemotion.c +++ b/src/modules/ecordova/tizen/ecordova_devicemotion.c @@ -2,7 +2,6 @@ # include #endif -#ifdef HAVE_TIZEN_SENSOR #include "ecordova_devicemotion_private.h" #define MY_CLASS ECORDOVA_DEVICEMOTION_CLASS @@ -168,4 +167,4 @@ _hash_data_free(sensor_listener_h listener) } #include "ecordova_devicemotion.eo.c" -#endif + diff --git a/src/modules/ecordova/tizen/ecordova_devicemotion_private.h b/src/modules/ecordova/tizen/ecordova_devicemotion_private.h index fb75f4d810..36d4574191 100644 --- a/src/modules/ecordova/tizen/ecordova_devicemotion_private.h +++ b/src/modules/ecordova/tizen/ecordova_devicemotion_private.h @@ -2,8 +2,7 @@ #define _ECORDOVA_DEVICEMOTION_PRIVATE_H #include "ecordova_private.h" - -#include +#include "ecordova_sensor.h" typedef struct _Ecordova_DeviceMotion_Data Ecordova_DeviceMotion_Data; diff --git a/src/modules/ecordova/tizen/ecordova_deviceorientation.c b/src/modules/ecordova/tizen/ecordova_deviceorientation.c index b3592f2589..8ba7f51acd 100644 --- a/src/modules/ecordova/tizen/ecordova_deviceorientation.c +++ b/src/modules/ecordova/tizen/ecordova_deviceorientation.c @@ -2,7 +2,6 @@ # include #endif -#ifdef HAVE_TIZEN_SENSOR #include "ecordova_deviceorientation_private.h" #define MY_CLASS ECORDOVA_DEVICEORIENTATION_CLASS @@ -172,4 +171,3 @@ _hash_data_free(sensor_listener_h listener) } #include "ecordova_deviceorientation.eo.c" -#endif diff --git a/src/modules/ecordova/tizen/ecordova_deviceorientation_private.h b/src/modules/ecordova/tizen/ecordova_deviceorientation_private.h index a2f1c6dfea..055f538459 100644 --- a/src/modules/ecordova/tizen/ecordova_deviceorientation_private.h +++ b/src/modules/ecordova/tizen/ecordova_deviceorientation_private.h @@ -2,8 +2,7 @@ #define _ECORDOVA_DEVICEORIENTATION_PRIVATE_H #include "ecordova_private.h" - -#include +#include "ecordova_sensor.h" typedef struct _Ecordova_DeviceOrientation_Data Ecordova_DeviceOrientation_Data; diff --git a/src/modules/ecordova/tizen/ecordova_sensor.c b/src/modules/ecordova/tizen/ecordova_sensor.c new file mode 100644 index 0000000000..acc38f65f6 --- /dev/null +++ b/src/modules/ecordova/tizen/ecordova_sensor.c @@ -0,0 +1,57 @@ + +#include "ecordova_sensor.h" + +int (*sensor_listener_start)(sensor_listener_h listener) = 0; +int (*sensor_listener_read_data)(sensor_listener_h listener, sensor_event_s *event) = 0; +int (*sensor_destroy_listener)(sensor_listener_h listener) = 0; +int (*sensor_listener_set_event_cb)(sensor_listener_h listener, unsigned int interval_ms, sensor_event_cb callback, void *data) = 0; +int (*sensor_get_default_sensor)(sensor_type_e type, sensor_h *sensor) = 0; +int (*sensor_create_listener)(sensor_h sensor, sensor_listener_h *listener) = 0; + +static void* system_sensor_lib = 0; + +void ecordova_sensor_shutdown() +{ + if(sensor_lib) + dlclose(sensor_lib); + sensor_listener_start = NULL; + sensor_listener_read_data = NULL; + sensor_destroy_listener = NULL; + sensor_listener_set_event_cb = NULL; + sensor_get_default_sensor = NULL; + sensor_create_listener = NULL; +} + +void ecordova_sensor_init() +{ + if(!sensor_lib) + { + sensor_lib = dlopen("capi-system-sensor.so", RTLD_NOW); + if(!sensor_lib) + goto on_error; + sensor_listener_start = dlsym(sensor_lib, "sensor_listener_start"); + if(!sensor_listener_start) + goto on_error; + sensor_listener_read_data = dlsym(sensor_lib, "sensor_listener_read_data"); + if(!sensor_listener_read_data) + goto on_error; + sensor_destroy_listener = dlsym(sensor_lib, "sensor_destroy_listener"); + if(!sensor_destroy_listener) + goto on_error; + sensor_listener_set_event_cb = dlsym(sensor_lib, "sensor_listener_set_event_cb"); + if(!sensor_listener_set_event_cb) + goto on_error; + sensor_get_default_sensor = dlsym(sensor_lib, "sensor_get_default_sensor"); + if(!sensor_get_default_sensor) + goto on_error; + sensor_create_listener = dlsym(sensor_lib, "sensor_create_listener"); + if(!sensor_create_listener) + goto on_error; + } + + return; +on_error: + ecordova_sensor_shutdown(); +} + + diff --git a/src/modules/ecordova/tizen/ecordova_sensor.h b/src/modules/ecordova/tizen/ecordova_sensor.h new file mode 100644 index 0000000000..1d39a05c37 --- /dev/null +++ b/src/modules/ecordova/tizen/ecordova_sensor.h @@ -0,0 +1,69 @@ +#ifndef ECORDOVA_SENSOR_H +#define ECORDOVA_SENSOR_H + +#include "ecordova_tizen.h" + +#define MAX_VALUE_SIZE 16 + +typedef void* sensor_h; +typedef void* sensor_listener_h; + +typedef struct +{ + int accuracy; /**< Accuracy */ + unsigned long long timestamp; /**< Timestamp */ + int value_count; /**< Count of values */ + float values[MAX_VALUE_SIZE]; /**< Sensor values */ +} sensor_event_s; + +typedef enum +{ + SENSOR_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ + SENSOR_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR, /**< I/O error */ + SENSOR_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + SENSOR_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Unsupported sensor in the current device */ + SENSOR_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ + SENSOR_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ + SENSOR_ERROR_NOT_NEED_CALIBRATION = TIZEN_ERROR_SENSOR | 0x03, /**< Sensor doesn't need calibration */ + SENSOR_ERROR_OPERATION_FAILED = TIZEN_ERROR_SENSOR | 0x06, /**< Operation failed */ +} sensor_error_e; + +typedef enum +{ + SENSOR_ALL = -1, /**< All sensors */ + SENSOR_ACCELEROMETER, /**< Accelerometer */ + SENSOR_GRAVITY, /**< Gravity sensor */ + SENSOR_LINEAR_ACCELERATION, /**< Linear acceleration sensor */ + SENSOR_MAGNETIC, /**< Magnetic sensor */ + SENSOR_ROTATION_VECTOR, /**< Rotation Vector sensor */ + SENSOR_ORIENTATION, /**< Orientation sensor */ + SENSOR_GYROSCOPE, /**< Gyroscope sensor */ + SENSOR_LIGHT, /**< Light sensor */ + SENSOR_PROXIMITY, /**< Proximity sensor */ + SENSOR_PRESSURE, /**< Pressure sensor */ + SENSOR_ULTRAVIOLET, /**< Ultraviolet sensor */ + SENSOR_TEMPERATURE, /**< Temperature sensor */ + SENSOR_HUMIDITY, /**< Humidity sensor */ + SENSOR_HRM, /**< Heart Rate Monitor sensor @if MOBILE (Since Tizen 2.3.1) @endif */ + SENSOR_HRM_LED_GREEN, /**< HRM (LED Green) sensor @if MOBILE (Since Tizen 2.3.1) @endif */ + SENSOR_HRM_LED_IR, /**< HRM (LED IR) sensor @if MOBILE (Since Tizen 2.3.1) @endif */ + SENSOR_HRM_LED_RED, /**< HRM (LED RED) sensor @if MOBILE (Since Tizen 2.3.1) @endif */ + SENSOR_GYROSCOPE_UNCALIBRATED, /**< Uncalibrated Gyroscope sensor (Since Tizen 2.4) */ + SENSOR_GEOMAGNETIC_UNCALIBRATED, /**< Uncalibrated Geomagnetic sensor (Since Tizen 2.4) */ + SENSOR_GYROSCOPE_ROTATION_VECTOR, /**< Gyroscope-based rotation vector sensor (Since Tizen 2.4) */ + SENSOR_GEOMAGNETIC_ROTATION_VECTOR, /**< Geomagnetic-based rotation vector sensor (Since Tizen 2.4) */ + SENSOR_LAST, /**< End of sensor enum values */ + SENSOR_CUSTOM = 10000 /**< Custom sensor */ +} sensor_type_e; + +typedef void (*sensor_event_cb)(sensor_h sensor, sensor_event_s *event, void *data); + +extern int (*sensor_listener_start)(sensor_listener_h listener); +extern int (*sensor_listener_read_data)(sensor_listener_h listener, sensor_event_s *event); +extern int (*sensor_destroy_listener)(sensor_listener_h listener); +extern int (*sensor_listener_set_event_cb)(sensor_listener_h listener, unsigned int interval_ms, sensor_event_cb callback, void *data); +extern int (*sensor_get_default_sensor)(sensor_type_e type, sensor_h *sensor); +extern int (*sensor_create_listener)(sensor_h sensor, sensor_listener_h *listener); + + +#endif diff --git a/src/modules/ecordova/tizen/ecordova_tizen.c b/src/modules/ecordova/tizen/ecordova_tizen.c index f496580119..e3de602f2a 100644 --- a/src/modules/ecordova/tizen/ecordova_tizen.c +++ b/src/modules/ecordova/tizen/ecordova_tizen.c @@ -3,17 +3,17 @@ #endif #include +#include int _ecordova_log_dom; -#define CRI(...) EINA_LOG_DOM_CRIT(_ecordova_log_dom, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(_ecordova_log_dom, __VA_ARGS__) -#define WRN(...) EINA_LOG_DOM_WARN(_ecordova_log_dom, __VA_ARGS__) -#define INF(...) EINA_LOG_DOM_INFO(_ecordova_log_dom, __VA_ARGS__) -#define DBG(...) EINA_LOG_DOM_DBG(_ecordova_log_dom, __VA_ARGS__) +int (*system_info_get_platform_string)(const char *key, char **value); +static void* system_info_lib = 0; void ecordova_contacts_service_init(); void ecordova_contacts_service_shutdown(); +void ecordova_sensor_init(); +void ecordova_sensor_shutdown(); static Eina_Bool _ecordova_tizen_init(void) @@ -26,6 +26,19 @@ _ecordova_tizen_init(void) } ecordova_contacts_service_init(); + + if(!system_info_lib) + { + system_info_lib = dlopen("capi-system-info", RTLD_NOW); + if(system_info_lib) + { + system_info_get_platform_string = dlsym(system_info_lib, "system_info_get_platform_string"); + if(!system_info_get_platform_string) + dlclose(system_info_lib); + } + } + + ecordova_sensor_init(); return EINA_TRUE; } @@ -33,9 +46,16 @@ _ecordova_tizen_init(void) static void _ecordova_tizen_shutdown(void) { - ecordova_contacts_service_shutdown(); + ecordova_sensor_shutdown(); + + if(system_info_lib) + dlclose(system_info_lib); + + system_info_get_platform_string = 0; + + ecordova_contacts_service_shutdown(); - eina_log_domain_unregister(_ecordova_log_dom); + eina_log_domain_unregister(_ecordova_log_dom); _ecordova_log_dom = -1; } diff --git a/src/modules/ecordova/tizen/ecordova_tizen.h b/src/modules/ecordova/tizen/ecordova_tizen.h new file mode 100644 index 0000000000..f2fa676a77 --- /dev/null +++ b/src/modules/ecordova/tizen/ecordova_tizen.h @@ -0,0 +1,55 @@ +#ifndef ECORDOVA_TIZEN_H +#define ECORDOVA_TIZEN_H + +extern int _ecordova_log_dom; + +#define CRI(...) EINA_LOG_DOM_CRIT(_ecordova_log_dom, __VA_ARGS__) +#define ERR(...) EINA_LOG_DOM_ERR(_ecordova_log_dom, __VA_ARGS__) +#define WRN(...) EINA_LOG_DOM_WARN(_ecordova_log_dom, __VA_ARGS__) +#define INF(...) EINA_LOG_DOM_INFO(_ecordova_log_dom, __VA_ARGS__) +#define DBG(...) EINA_LOG_DOM_DBG(_ecordova_log_dom, __VA_ARGS__) + +extern int (*system_info_get_platform_string)(const char *key, char **value); + +/* Check if slp error or not */ +#define TIZEN_ERROR_MIN_PLATFORM_ERROR (-1073741824LL) /* = -2147483648 / 2 */ +/* Tizen Contacts Error */ +#define TIZEN_ERROR_CONTACTS -0x02010000 +/* Tizen Sensor Error */ +#define TIZEN_ERROR_SENSOR -0x02440000 + +/** + * @brief Enumeration for tizen errors. + * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif + * +*/ +typedef enum +{ + TIZEN_ERROR_NONE = 0, /**< Successful */ + TIZEN_ERROR_OUT_OF_MEMORY = -ENOMEM, /**< Out of memory */ + TIZEN_ERROR_INVALID_PARAMETER = -EINVAL, /**< Invalid function parameter */ + TIZEN_ERROR_FILE_NO_SPACE_ON_DEVICE = -ENOSPC, /**< No space left on device */ + TIZEN_ERROR_PERMISSION_DENIED = -EACCES, /**< Permission denied */ + TIZEN_ERROR_NO_DATA = -ENODATA, /**< No data available */ + TIZEN_ERROR_IO_ERROR = -EIO, /**< I/O error */ + + TIZEN_ERROR_UNKNOWN = TIZEN_ERROR_MIN_PLATFORM_ERROR, /**< Unknown error */ + + /* This is a place to add new errors here. + * Do not assign integer values explicitly. Values are auto-assigned. + */ + TIZEN_ERROR_TIMED_OUT, /**< Time out */ + TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ + TIZEN_ERROR_USER_NOT_CONSENTED, /**< Not Consented */ + TIZEN_ERROR_END_OF_COLLECTION, +} tizen_error_e; + +typedef enum { + SYSTEM_INFO_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ + SYSTEM_INFO_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + SYSTEM_INFO_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ + SYSTEM_INFO_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR, /**< An input/output error occurred when reading value from system */ + SYSTEM_INFO_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< No permission to use the API */ +} system_info_error_e; + +#endif diff --git a/src/tests/ecordova/ecordova_devicemotion_test.c b/src/tests/ecordova/ecordova_devicemotion_test.c index c0a2179480..a63ab12848 100644 --- a/src/tests/ecordova/ecordova_devicemotion_test.c +++ b/src/tests/ecordova/ecordova_devicemotion_test.c @@ -8,7 +8,6 @@ #include -#ifdef HAVE_TIZEN_CONFIGURATION_MANAGER static void _setup(void) { @@ -23,6 +22,7 @@ _teardown(void) ck_assert_int_eq(ret, 0); } +#ifdef HAVE_TIZEN_SENSOR static Ecordova_Device * _devicemotion_new(void) { @@ -92,20 +92,17 @@ ecordova_devicemotion_test(TCase *tc) #else START_TEST(devicemotion_fail_load) { - ecordova_init(); - Ecordova_Device *devicemotion = eo_add(ECORDOVA_DEVICEMOTION_CLASS, NULL); ck_assert_ptr_eq(devicemotion, NULL); - - ecordova_shutdown(); } END_TEST void ecordova_devicemotion_test(TCase *tc) { + tcase_add_checked_fixture(tc, _setup, _teardown); tcase_add_test(tc, devicemotion_fail_load); } #endif diff --git a/src/tests/ecordova/ecordova_deviceorientation_test.c b/src/tests/ecordova/ecordova_deviceorientation_test.c index 4e3d4059e0..1c41b708ce 100644 --- a/src/tests/ecordova/ecordova_deviceorientation_test.c +++ b/src/tests/ecordova/ecordova_deviceorientation_test.c @@ -22,7 +22,7 @@ _teardown(void) ck_assert_int_eq(ret, 0); } -#ifdef HAVE_TIZEN_CONFIGURATION_MANAGER +#ifdef HAVE_TIZEN_SENSOR static Ecordova_Device * _deviceorientation_new(void) {