ecordova: dlsym for sensor

This commit is contained in:
Felipe Magno de Almeida 2015-11-05 16:00:40 -02:00
parent 6726a527fb
commit f60f359514
12 changed files with 217 additions and 57 deletions

View File

@ -5,7 +5,7 @@
#include <errno.h>
#include <stdlib.h>
#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 */

View File

@ -3,9 +3,7 @@
#endif
#include "ecordova_device_private.h"
#ifdef HAVE_TIZEN_INFO
#include <system/system_info.h>
#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

View File

@ -2,7 +2,6 @@
# include <config.h>
#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

View File

@ -2,8 +2,7 @@
#define _ECORDOVA_DEVICEMOTION_PRIVATE_H
#include "ecordova_private.h"
#include <sensor.h>
#include "ecordova_sensor.h"
typedef struct _Ecordova_DeviceMotion_Data Ecordova_DeviceMotion_Data;

View File

@ -2,7 +2,6 @@
# include <config.h>
#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

View File

@ -2,8 +2,7 @@
#define _ECORDOVA_DEVICEORIENTATION_PRIVATE_H
#include "ecordova_private.h"
#include <sensor.h>
#include "ecordova_sensor.h"
typedef struct _Ecordova_DeviceOrientation_Data Ecordova_DeviceOrientation_Data;

View File

@ -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();
}

View File

@ -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

View File

@ -3,17 +3,17 @@
#endif
#include <Ecore.h>
#include <dlfcn.h>
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;
}

View File

@ -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

View File

@ -8,7 +8,6 @@
#include <check.h>
#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

View File

@ -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)
{