From d19874bb7a8254384b49682db28c488d90c44a58 Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Thu, 2 Mar 2017 15:35:14 -0800 Subject: [PATCH 1/3] [sensor] Added default state "unconnected" The default state is no longer "idle" and should be "unconnected", also it should be a readonly property, and readings should also be readonly as well Signed-off-by: Jimmy Huang --- modules/GenericSensor.js | 2 +- src/zjs_sensor.c | 103 ++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/modules/GenericSensor.js b/modules/GenericSensor.js index 3f379ba36..73880cebb 100644 --- a/modules/GenericSensor.js +++ b/modules/GenericSensor.js @@ -153,7 +153,7 @@ function GenericSensor() { setTimeout(function() { startState = sensor.state; assert(defaultState !== startState && - defaultState === "idle" && + defaultState === "unconnected" && startState === "activated", "sensor: be started"); }, 1000); diff --git a/src/zjs_sensor.c b/src/zjs_sensor.c index b3cf6465f..d3ddee141 100644 --- a/src/zjs_sensor.c +++ b/src/zjs_sensor.c @@ -22,6 +22,7 @@ static struct k_sem sensor_sem; static jerry_value_t zjs_sensor_prototype; enum sensor_state { + SENSOR_STATE_UNCONNECTED, SENSOR_STATE_IDLE, SENSOR_STATE_ACTIVATING, SENSOR_STATE_ACTIVATED, @@ -120,6 +121,8 @@ static enum sensor_state zjs_sensor_get_state(jerry_value_t obj) const int BUFLEN = 20; char buffer[BUFLEN]; if (zjs_obj_get_string(obj, "state", buffer, BUFLEN)) { + if (!strcmp(buffer, "unconnected")) + return SENSOR_STATE_UNCONNECTED; if (!strcmp(buffer, "idle")) return SENSOR_STATE_IDLE; if (!strcmp(buffer, "activating")) @@ -128,12 +131,13 @@ static enum sensor_state zjs_sensor_get_state(jerry_value_t obj) return SENSOR_STATE_ACTIVATED; if (!strcmp(buffer, "errored")) return SENSOR_STATE_ERRORED; + else + ERR_PRINT("invalid state set %s\n", buffer); + } else { + ERR_PRINT("state is undefined\n"); } - ERR_PRINT("state not set\n"); - jerry_value_t state = jerry_create_string("errored"); - zjs_set_property(obj, "state", state); - jerry_release_value(state); + zjs_obj_add_readonly_string(obj, "errored", "state"); return SENSOR_STATE_ERRORED; } @@ -145,26 +149,35 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state) } // update state property and trigger onstatechange event - jerry_value_t new_state; + const char* state_str = NULL; switch(state) { + case SENSOR_STATE_UNCONNECTED: + state_str = "unconnected"; + break; case SENSOR_STATE_IDLE: - new_state = jerry_create_string("idle"); + state_str = "idle"; break; case SENSOR_STATE_ACTIVATING: - new_state = jerry_create_string("activating"); + state_str = "activating"; break; case SENSOR_STATE_ACTIVATED: - new_state = jerry_create_string("activated"); + state_str = "activated"; break; case SENSOR_STATE_ERRORED: - new_state = jerry_create_string("errored"); + state_str = "errored"; break; + + default: + // should never get here + ERR_PRINT("invalid state\n"); + return; } - zjs_set_property(obj, "state", new_state); + zjs_obj_add_readonly_string(obj, state_str, "state"); jerry_value_t func = zjs_get_property(obj, "onstatechange"); if (jerry_value_is_function(func)) { // if onstatechange exists, call it + jerry_value_t new_state = jerry_create_string(state_str); jerry_value_t rval = jerry_call_function(func, obj, &new_state, 1); if (jerry_value_has_error_flag(rval)) { ERR_PRINT("calling onstatechange\n"); @@ -186,7 +199,6 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state) } jerry_release_value(func); } - jerry_release_value(new_state); } static void zjs_sensor_update_reading(jerry_value_t obj, @@ -196,35 +208,26 @@ static void zjs_sensor_update_reading(jerry_value_t obj, // update reading property and trigger onchange event jerry_value_t reading_obj = jerry_create_object(); switch(channel) { - case SENSOR_CHAN_ACCEL_XYZ: - case SENSOR_CHAN_GYRO_XYZ: ; - // reading is a ptr to an array of 3 double values - double x = ((double*)reading)[0]; - double y = ((double*)reading)[1]; - double z = ((double*)reading)[2]; - jerry_value_t x_val = jerry_create_number(x); - jerry_value_t y_val = jerry_create_number(y); - jerry_value_t z_val = jerry_create_number(z); - zjs_set_property(reading_obj, "x", x_val); - zjs_set_property(reading_obj, "y", y_val); - zjs_set_property(reading_obj, "z", z_val); - jerry_release_value(x_val); - jerry_release_value(y_val); - jerry_release_value(z_val); - break; - case SENSOR_CHAN_LIGHT: ; - // reading is a ptr to double - double d = *((double*)reading); - jerry_value_t d_val = jerry_create_number(d); - zjs_set_property(reading_obj, "illuminance", d_val); - jerry_release_value(d_val); - break; - - default: - ERR_PRINT("unsupported sensor type\n"); - jerry_release_value(reading_obj); - return; + case SENSOR_CHAN_ACCEL_XYZ: + case SENSOR_CHAN_GYRO_XYZ: ; + // reading is a ptr to an array of 3 double values + double x = ((double*)reading)[0]; + double y = ((double*)reading)[1]; + double z = ((double*)reading)[2]; + zjs_obj_add_readonly_number(reading_obj, x, "x"); + zjs_obj_add_readonly_number(reading_obj, y, "y"); + zjs_obj_add_readonly_number(reading_obj, z, "z"); + break; + case SENSOR_CHAN_LIGHT: ; + // reading is a ptr to double + double d = *((double*)reading); + zjs_obj_add_readonly_number(reading_obj, d, "illuminance"); + break; + default: + ERR_PRINT("unsupported sensor type\n"); + jerry_release_value(reading_obj); + return; } zjs_set_property(obj, "reading", reading_obj); @@ -361,6 +364,11 @@ static jerry_value_t zjs_sensor_start(const jerry_value_t function_obj, { // requires: this is a Sensor object from takes no args // effects: activates the sensor and start monitoring changes + enum sensor_state state = zjs_sensor_get_state(this); + if (state == SENSOR_STATE_ACTIVATING || state == SENSOR_STATE_ACTIVATED) { + return ZJS_UNDEFINED; + } + uintptr_t ptr; sensor_handle_t *handle = NULL; if (jerry_get_object_native_handle(this, &ptr)) { @@ -370,11 +378,6 @@ static jerry_value_t zjs_sensor_start(const jerry_value_t function_obj, } } - enum sensor_state state = zjs_sensor_get_state(this); - if (state != SENSOR_STATE_IDLE && state != SENSOR_STATE_ERRORED) { - return zjs_error("zjs_sensor_start: invalid state"); - } - zjs_sensor_set_state(this, SENSOR_STATE_ACTIVATING); zjs_ipm_message_t send; send.type = TYPE_SENSOR_START; @@ -411,6 +414,11 @@ static jerry_value_t zjs_sensor_stop(const jerry_value_t function_obj, { // requires: this is a Sensor object from takes no args // effects: de-activates the sensor and stop monitoring changes + enum sensor_state state = zjs_sensor_get_state(this); + if (state != SENSOR_STATE_ACTIVATING && state != SENSOR_STATE_ACTIVATED) { + return ZJS_UNDEFINED; + } + uintptr_t ptr; sensor_handle_t *handle = NULL; if (jerry_get_object_native_handle(this, &ptr)) { @@ -420,11 +428,6 @@ static jerry_value_t zjs_sensor_stop(const jerry_value_t function_obj, } } - enum sensor_state state = zjs_sensor_get_state(this); - if (state == SENSOR_STATE_IDLE || state == SENSOR_STATE_ERRORED) { - return zjs_error("zjs_sensor_stop: invalid state"); - } - zjs_ipm_message_t send; send.type = TYPE_SENSOR_STOP; send.data.sensor.channel = handle->channel; @@ -501,7 +504,7 @@ static jerry_value_t zjs_sensor_create(const jerry_value_t function_obj, jerry_value_t sensor_obj = jerry_create_object(); jerry_value_t reading_val = jerry_create_null(); zjs_obj_add_number(sensor_obj, frequency, "frequency"); - zjs_obj_add_string(sensor_obj, "idle", "state"); + zjs_obj_add_readonly_string(sensor_obj, "unconnected", "state"); zjs_set_property(sensor_obj, "reading", reading_val); jerry_release_value(reading_val); From fb5c8043870f69c732d8bbd2d33fd57b9a7a005c Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Fri, 3 Mar 2017 10:15:23 -0800 Subject: [PATCH 2/3] removed const Signed-off-by: Jimmy Huang --- deps/iotivity-constrained | 2 +- src/zjs_sensor.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/iotivity-constrained b/deps/iotivity-constrained index 057b083a7..d7f9cd7cc 160000 --- a/deps/iotivity-constrained +++ b/deps/iotivity-constrained @@ -1 +1 @@ -Subproject commit 057b083a7afa4cb759e4d8b5bcd79fb62bc8dac3 +Subproject commit d7f9cd7cc452118b0e7f99780626d1edff9d3a8e diff --git a/src/zjs_sensor.c b/src/zjs_sensor.c index d3ddee141..d8571152d 100644 --- a/src/zjs_sensor.c +++ b/src/zjs_sensor.c @@ -149,7 +149,7 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state) } // update state property and trigger onstatechange event - const char* state_str = NULL; + char* state_str = NULL; switch(state) { case SENSOR_STATE_UNCONNECTED: state_str = "unconnected"; From 1dac921913269af31c82138753c5439f5d5449ab Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Fri, 3 Mar 2017 14:25:59 -0800 Subject: [PATCH 3/3] fixed const Signed-off-by: Jimmy Huang --- deps/iotivity-constrained | 2 +- src/zjs_sensor.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/iotivity-constrained b/deps/iotivity-constrained index d7f9cd7cc..057b083a7 160000 --- a/deps/iotivity-constrained +++ b/deps/iotivity-constrained @@ -1 +1 @@ -Subproject commit d7f9cd7cc452118b0e7f99780626d1edff9d3a8e +Subproject commit 057b083a7afa4cb759e4d8b5bcd79fb62bc8dac3 diff --git a/src/zjs_sensor.c b/src/zjs_sensor.c index d8571152d..4ccbfa7e0 100644 --- a/src/zjs_sensor.c +++ b/src/zjs_sensor.c @@ -149,7 +149,7 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state) } // update state property and trigger onstatechange event - char* state_str = NULL; + const char *state_str = NULL; switch(state) { case SENSOR_STATE_UNCONNECTED: state_str = "unconnected";