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

Commit

Permalink
Fixed error handling based on feedback
Browse files Browse the repository at this point in the history
Also fixed a bug where we still report change events
after error is reported

Signed-off-by: Jimmy Huang <[email protected]>
  • Loading branch information
jimmy-huang committed Nov 7, 2016
1 parent 3f27772 commit 968b8ac
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 12 deletions.
5 changes: 3 additions & 2 deletions samples/Accelerometer.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ sensor.onstatechange = function(event) {
console.log("state: " + event);
};

sensor.onerrorchange = function(error) {
console.log("error: " + error);
sensor.onerror = function(event) {
console.log("error: " + event.error.name +
" - " + event.error.message);
};

sensor.start();
5 changes: 3 additions & 2 deletions samples/Gyroscope.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ sensor.onstatechange = function(event) {
console.log("state: " + event);
};

sensor.onerrorchange = function(error) {
console.log("error: " + error);
sensor.onerror = function(event) {
console.log("error: " + event.error.name +
" - " + event.error.message);
};

sensor.start();
2 changes: 1 addition & 1 deletion src/zjs_ipm.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ enum {
#define ERROR_IPM_NOT_SUPPORTED 0x0001
#define ERROR_IPM_INVALID_PARAMETER 0x0002
#define ERROR_IPM_OPERATION_FAILED 0x0003
#define ERROR_IPM_OPERATION_DENIED 0x0004
#define ERROR_IPM_OPERATION_NOT_ALLOWED 0x0004

// Message Types

Expand Down
29 changes: 22 additions & 7 deletions src/zjs_sensor.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,18 +224,28 @@ static void zjs_sensor_update_reading(jerry_value_t obj,
}

static void zjs_sensor_trigger_error(jerry_value_t obj,
const char *error_type)
const char *error_name,
const char *error_message)
{
zjs_sensor_set_state(obj, SENSOR_STATE_ERRORED);
jerry_value_t func = zjs_get_property(obj, "onerror");
if (jerry_value_is_function(func)) {
// if onerror exists, call it
jerry_value_t event = jerry_create_string(error_type);
jerry_value_t event = jerry_create_object();
jerry_value_t error_obj = jerry_create_object();
jerry_value_t name_val = jerry_create_string(error_name);
jerry_value_t message_val = jerry_create_string(error_message);
zjs_set_property(error_obj, "name", name_val);
zjs_set_property(error_obj, "message", message_val);
zjs_set_property(event, "error", error_obj);
jerry_value_t rval = jerry_call_function(func, obj, &event, 1);
if (jerry_value_has_error_flag(rval)) {
PRINT("zjs_sensor_trigger_error: error calling onerrorhange\n");
}
jerry_release_value(rval);
jerry_release_value(name_val);
jerry_release_value(message_val);
jerry_release_value(error_obj);
jerry_release_value(event);
}
jerry_release_value(func);
Expand All @@ -248,9 +258,12 @@ static void zjs_sensor_onchange_c_callback(void *h)
PRINT("zjs_sensor_onchange_c_callback: handle not found\n");
return;
}
zjs_sensor_update_reading(handle->sensor_obj,
handle->channel,
handle->reading);

if (zjs_sensor_get_state(handle->sensor_obj) == SENSOR_STATE_ACTIVATED) {
zjs_sensor_update_reading(handle->sensor_obj,
handle->channel,
handle->reading);
}
}

static void zjs_sensor_signal_callbacks(sensor_handle_t *handle,
Expand Down Expand Up @@ -327,8 +340,10 @@ static jerry_value_t zjs_sensor_start(const jerry_value_t function_obj,
send.data.sensor.channel = handle->channel;
int error = zjs_sensor_call_remote_function(&send);
if (error != ERROR_IPM_NONE) {
if (error == ERROR_IPM_OPERATION_DENIED) {
zjs_sensor_trigger_error(this, "NotAllowedError");
if (error == ERROR_IPM_OPERATION_NOT_ALLOWED) {
zjs_sensor_trigger_error(this, "NotAllowedError",
"permission denied");
return ZJS_UNDEFINED;
}
else {
// throw exception for all other errors
Expand Down

0 comments on commit 968b8ac

Please sign in to comment.