Skip to content

Commit

Permalink
use Manager::SceneGetAsXYZ to get back the stored scene values in sce…
Browse files Browse the repository at this point in the history
…neGetValues
  • Loading branch information
ekarak committed Feb 5, 2017
1 parent 0422afc commit a8d2a72
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 11 deletions.
2 changes: 1 addition & 1 deletion lib/ozwpaths.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ function getConfigItem(item) {
var fp = configs[item].findpattern;
for (var i in configs[item].locations) {
var loc = configs[item].locations[i];
if (!fs.existsSync(loc)) continue;
if (!(loc && fs.existsSync(loc))) continue;
var cmd = util.format(cmdfmt, loc, fp);
var dir = doScript(cmd, true);
if (!dir) continue;
Expand Down
2 changes: 1 addition & 1 deletion src/openzwave-config.cc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2013 Jonathan Perkin <[email protected]>
* Copyright (c) 2015-1016 Elias Karakoulakis <[email protected]>
* Copyright (c) 2015-1017 Elias Karakoulakis <[email protected]>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
Expand Down
3 changes: 0 additions & 3 deletions src/openzwave-scenes.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ namespace OZW {
for (unsigned i = 0; i < numscenes; i++) {
scene = new SceneInfo();
scene->sceneid = sceneids[i];

scene->label = OpenZWave::Manager::Get()->GetSceneLabel(sceneids[i]);
mutex::scoped_lock sl(zscenes_mutex);
zscenes.push_back(scene);
Expand Down Expand Up @@ -221,11 +220,9 @@ namespace OZW {
Local<Array> v8values = Nan::New<Array>(scene->values.size());

unsigned j = 0;

for (vit = values.begin(); vit != values.end(); ++vit) {
mutex::scoped_lock sl(zscenes_mutex);
scene->values.push_back(*vit);

v8values->Set(Nan::New<Integer>(j++), zwaveSceneValue2v8Value(sceneid, *vit));
}
info.GetReturnValue().Set(v8values);
Expand Down
69 changes: 63 additions & 6 deletions src/utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ namespace OZW {
}

// populate a v8 object with an attribute called 'value' whose value is the
// ZWave value, as returned from its proper typed call
// ZWave value, as returned from its proper typed call.
void setValObj(Local<Object>&valobj, OpenZWave::ValueID &value) {
/*
* The value itself is type-specific.
Expand Down Expand Up @@ -137,10 +137,67 @@ namespace OZW {
}
}

// populate a v8 object with an attribute called 'value' whose value is the
// SCENE value (not the current one!) - as returned from its proper typed call
// (using Manager::SceneGetValueAsXXX calls)
void setSceneValObj(uint8 sceneid, Local<Object>&valobj, OpenZWave::ValueID &value) {
/*
* The value itself is type-specific.
*/
switch (value.GetType()) {
case OpenZWave::ValueID::ValueType_Bool: {
bool val;
OpenZWave::Manager::Get()->SceneGetValueAsBool(sceneid, value, &val);
AddBooleanProp(valobj, value, val);
break;
}
case OpenZWave::ValueID::ValueType_Byte: {
uint8 val;
OpenZWave::Manager::Get()->SceneGetValueAsByte(sceneid, value, &val);
AddIntegerProp(valobj, value, val);
break;
}
case OpenZWave::ValueID::ValueType_Decimal: {
std::string val;
OpenZWave::Manager::Get()->SceneGetValueAsString(sceneid, value, &val);
AddStringProp(valobj, value, val);
break;
}
case OpenZWave::ValueID::ValueType_Int: {
int32 val;
OpenZWave::Manager::Get()->SceneGetValueAsInt(sceneid, value, &val);
AddIntegerProp(valobj, value, val);
break;
}
case OpenZWave::ValueID::ValueType_Short: {
int16 val;
OpenZWave::Manager::Get()->SceneGetValueAsShort(sceneid, value, &val);
AddIntegerProp(valobj, value, val);
break;
}
case OpenZWave::ValueID::ValueType_String: {
std::string val;
OpenZWave::Manager::Get()->SceneGetValueAsString(sceneid, value, &val);
AddStringProp(valobj, value, val.c_str())
break;
}
/*
* Buttons, Schedules, Lists and Raw do not have a SceneGetValue extractor.
*/
case OpenZWave::ValueID::ValueType_Button:
case OpenZWave::ValueID::ValueType_Schedule:
case OpenZWave::ValueID::ValueType_List:
case OpenZWave::ValueID::ValueType_Raw: {
fprintf(stderr, "unsupported scene value type: 0x%x\n", value.GetType());
break;
}
}
}

// populate a v8 Object with useful information about a ZWave node
void populateNode(
v8::Local<v8::Object>& nodeobj,
uint32 homeid, uint8 nodeid
v8::Local<v8::Object>& nodeobj,
uint32 homeid, uint8 nodeid
) {
OpenZWave::Manager *mgr = OpenZWave::Manager::Get();
AddStringProp(nodeobj, manufacturer, mgr->GetNodeManufacturerName(homeid, nodeid).c_str());
Expand Down Expand Up @@ -188,19 +245,19 @@ namespace OZW {
Local <Object> valobj = Nan::New<Object>();
populateValueId(valobj, value);
setValObj(valobj, value);
return handle_scope.Escape(valobj);
return handle_scope.Escape(valobj);
}

// create a V8 object from a ZWave scene value
Local<Object> zwaveSceneValue2v8Value(uint8 sceneId, OpenZWave::ValueID value) {
Nan::EscapableHandleScope handle_scope;
Local <Object> valobj = Nan::New<Object>();
populateValueId(valobj, value);
setValObj(valobj, value);
setSceneValObj(sceneId, valobj, value);
return handle_scope.Escape(valobj);
}

bool isOzwValue(Local<Object>& o) {
bool isOzwValue(Local<Object>& o) {
return (!Nan::HasOwnProperty(o, Nan::New<String>("node_id").ToLocalChecked()).IsNothing()
&& !Nan::HasOwnProperty(o, Nan::New<String>("class_id").ToLocalChecked()).IsNothing()
&& !Nan::HasOwnProperty(o, Nan::New<String>("instance").ToLocalChecked()).IsNothing()
Expand Down

0 comments on commit a8d2a72

Please sign in to comment.