-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgadDrivers.js
137 lines (125 loc) · 5.01 KB
/
gadDrivers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
'use strict';
var _ = require('busyman'),
helper = require('../helper.js');
var gadDrivers = {
read: function (permAddr, auxId, attrName, callback) {
// callback(err, result), result: value read (Type denpends, ex: 'hello', 12, false)
var shepherd = this,
realAddr = helper.parsePermAddr(permAddr),
reqPath = helper.reqPath(auxId, attrName),
qnode = shepherd.find(realAddr.clientId);
if (qnode) {
qnode.readReq(reqPath, function (rspErr, rsp) {
if (rspErr)
callback(rspErr);
else if (!helper.isGoodResponse(rsp.status))
callback(new Error('Bad response: ' + rsp.status));
else
callback(null, rsp.data);
});
} else {
callback(new Error('Device not found.'));
}
},
write: function (permAddr, auxId, attrName, val, callback) {
// callback(err, result), result: value written (optional, Type denpends, ex: 'hello', 12, false)
var shepherd = this,
realAddr = helper.parsePermAddr(permAddr),
reqPath = helper.reqPath(auxId, attrName),
qnode = shepherd.find(realAddr.clientId);
if (qnode) {
qnode.writeReq(reqPath, val, function (rspErr, rsp) {
if (rspErr)
callback(rspErr);
else if (!helper.isGoodResponse(rsp.status))
callback(new Error('Bad response: ' + rsp.status));
else
callback(null, rsp.data);
});
} else {
callback(new Error('Device not found.'));
}
},
exec: function (permAddr, auxId, attrName, args, callback) {
// callback(err, result), result: can be anything, depends on firmware implementation
var shepherd = this,
realAddr = helper.parsePermAddr(permAddr),
reqPath = helper.reqPath(auxId, attrName),
qnode = shepherd.find(realAddr.clientId);
if (typeof args === 'function') {
callback = args;
args = undefined;
}
if (qnode) {
args = args || [];
qnode.executeReq(reqPath, args, function (rspErr, rsp) {
if (rspErr)
callback(rspErr);
else if (!helper.isGoodResponse(rsp.status))
callback(new Error('Bad response: ' + rsp.status));
else
callback(null, rsp.data);
});
} else {
callback(new Error('Device not found.'));
}
},
readReportCfg: function (permAddr, auxId, attrName, callback) {
// callback(err, result), result: config object (Object, ex: { pmin: 10, pmax: 60, gt: 200 })
var shepherd = this,
realAddr = helper.parsePermAddr(permAddr),
reqPath = helper.reqPath(auxId, attrName),
qnode = shepherd.find(realAddr.clientId);
if (qnode) {
qnode.discoverReq(reqPath, function (rspErr, rsp) {
if (rspErr) {
callback(rspErr);
} else if (!helper.isGoodResponse(rsp.status)) {
callback(new Error('Bad response: ' + rsp.status));
} else {
if (rsp.data.resrcList)
delete rsp.data.resrcList;
callback(null, rsp.data);
}
});
} else {
callback(new Error('Device not found.'));
}
},
writeReportCfg: function (permAddr, auxId, attrName, cfg, callback) {
// function(permAddr, auxId, attrName, cfg, callback) {}
// callback(err, result), result: set succeeds (Boolean, true or false)
var shepherd = this,
realAddr = helper.parsePermAddr(permAddr),
qnode = shepherd.find(realAddr.clientId),
shouldEnable = true, // default is enabled when set successfully
reqPath = helper.reqPath(auxId, attrName);
cfg = cfg || {};
if (cfg.hasOwnProperty('enable')) {
shouldEnable = !!cfg.enable;
delete cfg.enable;
}
if (qnode) {
cfg.cancel = !shouldEnable;
qnode.writeAttrsReq(reqPath, cfg, function (rspErr, rsp) {
if (rspErr) {
callback(rspErr);
} else if (!helper.isGoodResponse(rsp.status)) {
callback(new Error('Bad response: ' + rsp.status));
} else if (!shouldEnable) {
callback(null, rsp.status);
} else {
qnode.observeReq(reqPath, function (err, rsp) {
if (err)
callback(err);
else
callback(null, rsp.status);
});
}
});
} else {
callback(new Error('Device not found.'));
}
}
};
module.exports = gadDrivers;