Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.

Commit b29dbbc

Browse files
Jimmy Huanggrgustaf
authored andcommitted
[sensor] Added default state "unconnected" (#789)
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 <[email protected]>
1 parent debcb1d commit b29dbbc

File tree

2 files changed

+54
-51
lines changed

2 files changed

+54
-51
lines changed

modules/GenericSensor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ function GenericSensor() {
153153
setTimeout(function() {
154154
startState = sensor.state;
155155
assert(defaultState !== startState &&
156-
defaultState === "idle" &&
156+
defaultState === "unconnected" &&
157157
startState === "activated",
158158
"sensor: be started");
159159
}, 1000);

src/zjs_sensor.c

Lines changed: 53 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ static struct k_sem sensor_sem;
2222
static jerry_value_t zjs_sensor_prototype;
2323

2424
enum sensor_state {
25+
SENSOR_STATE_UNCONNECTED,
2526
SENSOR_STATE_IDLE,
2627
SENSOR_STATE_ACTIVATING,
2728
SENSOR_STATE_ACTIVATED,
@@ -120,6 +121,8 @@ static enum sensor_state zjs_sensor_get_state(jerry_value_t obj)
120121
const int BUFLEN = 20;
121122
char buffer[BUFLEN];
122123
if (zjs_obj_get_string(obj, "state", buffer, BUFLEN)) {
124+
if (!strcmp(buffer, "unconnected"))
125+
return SENSOR_STATE_UNCONNECTED;
123126
if (!strcmp(buffer, "idle"))
124127
return SENSOR_STATE_IDLE;
125128
if (!strcmp(buffer, "activating"))
@@ -128,12 +131,13 @@ static enum sensor_state zjs_sensor_get_state(jerry_value_t obj)
128131
return SENSOR_STATE_ACTIVATED;
129132
if (!strcmp(buffer, "errored"))
130133
return SENSOR_STATE_ERRORED;
134+
else
135+
ERR_PRINT("invalid state set %s\n", buffer);
136+
} else {
137+
ERR_PRINT("state is undefined\n");
131138
}
132139

133-
ERR_PRINT("state not set\n");
134-
jerry_value_t state = jerry_create_string("errored");
135-
zjs_set_property(obj, "state", state);
136-
jerry_release_value(state);
140+
zjs_obj_add_readonly_string(obj, "errored", "state");
137141
return SENSOR_STATE_ERRORED;
138142
}
139143

@@ -145,26 +149,35 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state)
145149
}
146150

147151
// update state property and trigger onstatechange event
148-
jerry_value_t new_state;
152+
const char *state_str = NULL;
149153
switch(state) {
154+
case SENSOR_STATE_UNCONNECTED:
155+
state_str = "unconnected";
156+
break;
150157
case SENSOR_STATE_IDLE:
151-
new_state = jerry_create_string("idle");
158+
state_str = "idle";
152159
break;
153160
case SENSOR_STATE_ACTIVATING:
154-
new_state = jerry_create_string("activating");
161+
state_str = "activating";
155162
break;
156163
case SENSOR_STATE_ACTIVATED:
157-
new_state = jerry_create_string("activated");
164+
state_str = "activated";
158165
break;
159166
case SENSOR_STATE_ERRORED:
160-
new_state = jerry_create_string("errored");
167+
state_str = "errored";
161168
break;
169+
170+
default:
171+
// should never get here
172+
ERR_PRINT("invalid state\n");
173+
return;
162174
}
163-
zjs_set_property(obj, "state", new_state);
175+
zjs_obj_add_readonly_string(obj, state_str, "state");
164176

165177
jerry_value_t func = zjs_get_property(obj, "onstatechange");
166178
if (jerry_value_is_function(func)) {
167179
// if onstatechange exists, call it
180+
jerry_value_t new_state = jerry_create_string(state_str);
168181
jerry_value_t rval = jerry_call_function(func, obj, &new_state, 1);
169182
if (jerry_value_has_error_flag(rval)) {
170183
ERR_PRINT("calling onstatechange\n");
@@ -186,7 +199,6 @@ static void zjs_sensor_set_state(jerry_value_t obj, enum sensor_state state)
186199
}
187200
jerry_release_value(func);
188201
}
189-
jerry_release_value(new_state);
190202
}
191203

192204
static void zjs_sensor_update_reading(jerry_value_t obj,
@@ -196,35 +208,26 @@ static void zjs_sensor_update_reading(jerry_value_t obj,
196208
// update reading property and trigger onchange event
197209
jerry_value_t reading_obj = jerry_create_object();
198210
switch(channel) {
199-
case SENSOR_CHAN_ACCEL_XYZ:
200-
case SENSOR_CHAN_GYRO_XYZ: ;
201-
// reading is a ptr to an array of 3 double values
202-
double x = ((double*)reading)[0];
203-
double y = ((double*)reading)[1];
204-
double z = ((double*)reading)[2];
205-
jerry_value_t x_val = jerry_create_number(x);
206-
jerry_value_t y_val = jerry_create_number(y);
207-
jerry_value_t z_val = jerry_create_number(z);
208-
zjs_set_property(reading_obj, "x", x_val);
209-
zjs_set_property(reading_obj, "y", y_val);
210-
zjs_set_property(reading_obj, "z", z_val);
211-
jerry_release_value(x_val);
212-
jerry_release_value(y_val);
213-
jerry_release_value(z_val);
214-
break;
215-
case SENSOR_CHAN_LIGHT: ;
216-
// reading is a ptr to double
217-
double d = *((double*)reading);
218-
jerry_value_t d_val = jerry_create_number(d);
219-
zjs_set_property(reading_obj, "illuminance", d_val);
220-
jerry_release_value(d_val);
221-
break;
222-
223-
default:
224-
ERR_PRINT("unsupported sensor type\n");
225-
jerry_release_value(reading_obj);
226-
return;
211+
case SENSOR_CHAN_ACCEL_XYZ:
212+
case SENSOR_CHAN_GYRO_XYZ: ;
213+
// reading is a ptr to an array of 3 double values
214+
double x = ((double*)reading)[0];
215+
double y = ((double*)reading)[1];
216+
double z = ((double*)reading)[2];
217+
zjs_obj_add_readonly_number(reading_obj, x, "x");
218+
zjs_obj_add_readonly_number(reading_obj, y, "y");
219+
zjs_obj_add_readonly_number(reading_obj, z, "z");
220+
break;
221+
case SENSOR_CHAN_LIGHT: ;
222+
// reading is a ptr to double
223+
double d = *((double*)reading);
224+
zjs_obj_add_readonly_number(reading_obj, d, "illuminance");
225+
break;
227226

227+
default:
228+
ERR_PRINT("unsupported sensor type\n");
229+
jerry_release_value(reading_obj);
230+
return;
228231
}
229232

230233
zjs_set_property(obj, "reading", reading_obj);
@@ -361,6 +364,11 @@ static jerry_value_t zjs_sensor_start(const jerry_value_t function_obj,
361364
{
362365
// requires: this is a Sensor object from takes no args
363366
// effects: activates the sensor and start monitoring changes
367+
enum sensor_state state = zjs_sensor_get_state(this);
368+
if (state == SENSOR_STATE_ACTIVATING || state == SENSOR_STATE_ACTIVATED) {
369+
return ZJS_UNDEFINED;
370+
}
371+
364372
uintptr_t ptr;
365373
sensor_handle_t *handle = NULL;
366374
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,
370378
}
371379
}
372380

373-
enum sensor_state state = zjs_sensor_get_state(this);
374-
if (state != SENSOR_STATE_IDLE && state != SENSOR_STATE_ERRORED) {
375-
return zjs_error("zjs_sensor_start: invalid state");
376-
}
377-
378381
zjs_sensor_set_state(this, SENSOR_STATE_ACTIVATING);
379382
zjs_ipm_message_t send;
380383
send.type = TYPE_SENSOR_START;
@@ -411,6 +414,11 @@ static jerry_value_t zjs_sensor_stop(const jerry_value_t function_obj,
411414
{
412415
// requires: this is a Sensor object from takes no args
413416
// effects: de-activates the sensor and stop monitoring changes
417+
enum sensor_state state = zjs_sensor_get_state(this);
418+
if (state != SENSOR_STATE_ACTIVATING && state != SENSOR_STATE_ACTIVATED) {
419+
return ZJS_UNDEFINED;
420+
}
421+
414422
uintptr_t ptr;
415423
sensor_handle_t *handle = NULL;
416424
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,
420428
}
421429
}
422430

423-
enum sensor_state state = zjs_sensor_get_state(this);
424-
if (state == SENSOR_STATE_IDLE || state == SENSOR_STATE_ERRORED) {
425-
return zjs_error("zjs_sensor_stop: invalid state");
426-
}
427-
428431
zjs_ipm_message_t send;
429432
send.type = TYPE_SENSOR_STOP;
430433
send.data.sensor.channel = handle->channel;
@@ -501,7 +504,7 @@ static jerry_value_t zjs_sensor_create(const jerry_value_t function_obj,
501504
jerry_value_t sensor_obj = jerry_create_object();
502505
jerry_value_t reading_val = jerry_create_null();
503506
zjs_obj_add_number(sensor_obj, frequency, "frequency");
504-
zjs_obj_add_string(sensor_obj, "idle", "state");
507+
zjs_obj_add_readonly_string(sensor_obj, "unconnected", "state");
505508
zjs_set_property(sensor_obj, "reading", reading_val);
506509
jerry_release_value(reading_val);
507510

0 commit comments

Comments
 (0)