aboutsummaryrefslogtreecommitdiff
path: root/src/zjs_sensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/zjs_sensor.c')
-rw-r--r--src/zjs_sensor.c51
1 files changed, 16 insertions, 35 deletions
diff --git a/src/zjs_sensor.c b/src/zjs_sensor.c
index 7d6f22d..9799d0d 100644
--- a/src/zjs_sensor.c
+++ b/src/zjs_sensor.c
@@ -30,16 +30,6 @@
#define ZJS_SENSOR_TIMEOUT_TICKS 5000
-#define SENSOR_GET_HANDLE(obj, type, var) \
- type *var; \
- { \
- uintptr_t native; \
- if (!jerry_get_object_native_handle(obj, &native)) { \
- return zjs_error("native handle not found"); \
- } \
- var = (type *)native; \
- }
-
static struct k_sem sensor_sem;
static jerry_value_t zjs_sensor_prototype;
@@ -69,6 +59,15 @@ sensor_module_t sensor_modules[] = {
#endif
};
+static void free_handle(void *native_p)
+{
+}
+
+static const jerry_object_native_info_t sensor_type_info =
+{
+ .free_cb = free_handle
+};
+
sensor_instance_t *zjs_sensor_create_instance(const char *name, void *func)
{
ZVAL global_obj = jerry_get_global_object();
@@ -218,12 +217,7 @@ void zjs_sensor_set_state(jerry_value_t obj, sensor_state_t state)
}
}
- uintptr_t ptr;
- sensor_handle_t *handle = NULL;
- if (!jerry_get_object_native_handle(obj, &ptr)) {
- ERR_PRINT("native handle not found");
- return;
- }
+ ZJS_GET_HANDLE(obj, sensor_handle_t, handle, sensor_type_info);
handle = (sensor_handle_t *)ptr;
handle->state = state;
}
@@ -311,22 +305,9 @@ static void ipm_msg_receive_callback(void *context, uint32_t id, volatile void *
}
}
-static void zjs_sensor_callback_free(uintptr_t handle)
-{
- sensor_handle_t *tmp = (sensor_handle_t *)handle;
- if (tmp->controller) {
- zjs_free(tmp->controller);
- }
- zjs_remove_callback(tmp->onchange_cb_id);
- zjs_remove_callback(tmp->onstart_cb_id);
- zjs_remove_callback(tmp->onstop_cb_id);
- zjs_free(tmp);
- DBG_PRINT("sensor handle %p freed\n", (void *)handle);
-}
-
jerry_value_t zjs_sensor_start_sensor(jerry_value_t obj)
{
- SENSOR_GET_HANDLE(obj, sensor_handle_t, handle);
+ ZJS_GET_HANDLE(obj, sensor_handle_t, handle, sensor_type_info);
zjs_ipm_message_t send;
send.type = TYPE_SENSOR_START;
@@ -353,7 +334,7 @@ jerry_value_t zjs_sensor_start_sensor(jerry_value_t obj)
jerry_value_t zjs_sensor_stop_sensor(jerry_value_t obj)
{
- SENSOR_GET_HANDLE(obj, sensor_handle_t, handle);
+ ZJS_GET_HANDLE(obj, sensor_handle_t, handle, sensor_type_info);
zjs_ipm_message_t send;
send.type = TYPE_SENSOR_STOP;
@@ -386,7 +367,7 @@ static ZJS_DECL_FUNC(zjs_sensor_start)
return ZJS_UNDEFINED;
}
- SENSOR_GET_HANDLE(this, sensor_handle_t, handle);
+ ZJS_GET_HANDLE(this, sensor_handle_t, handle, sensor_type_info);
zjs_sensor_set_state(this, SENSOR_STATE_ACTIVATING);
if (jerry_value_has_error_flag(zjs_sensor_start_sensor(this))) {
@@ -406,7 +387,7 @@ static ZJS_DECL_FUNC(zjs_sensor_stop)
return ZJS_UNDEFINED;
}
- SENSOR_GET_HANDLE(this, sensor_handle_t, handle);
+ ZJS_GET_HANDLE(this, sensor_handle_t, handle, sensor_type_info);
if (jerry_value_has_error_flag(zjs_sensor_start_sensor(this))) {
zjs_sensor_trigger_error(this, "SensorError", "start failed");
@@ -508,8 +489,8 @@ ZJS_DECL_FUNC_ARGS(zjs_sensor_create,
instance->handles = handle;
// watch for the object getting garbage collected, and clean up
- jerry_set_object_native_handle(sensor_obj, (uintptr_t)handle,
- zjs_sensor_callback_free);
+ jerry_set_object_native_pointer(sensor_obj, (void *)handle,
+ &sensor_type_info);
DBG_PRINT("sensor driver %s initialized\n", handle->controller->name);
DBG_PRINT("sensor frequency %u\n", handle->frequency);