-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevDrivers.js
108 lines (94 loc) · 2.99 KB
/
devDrivers.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
'use strict';
var _ = require('busyman'),
helper = require('../helper.js');
function read(permAddr, attrName, callback) {
// callback(err, result),
// result: value read (Type denpends, ex: 'hello', 12, false)
var realAddr = helper.parsePermAddr(permAddr),
qnode = this.find(realAddr.clientId);
// Be careful! read device attr, not gadget attr
if (!qnode)
return callback(new Error('Device not found.'));
qnode.readReq('device/0', function (err, rsp) {
var val,
readData;
if (err)
return callback(err);
readData = _.isObject(rsp) ? rsp.data : {};
if (!helper.isGoodResponse(rsp.status))
return callback(new Error('Bad response: ' + rsp.status));
else if (!_.isObject(readData))
return callback(new Error('Bad data read'));
switch (attrName) {
case 'manufacturer':
val = readData.manuf;
break;
case 'model':
val = readData.model;
break;
case 'serial':
val = '';
break;
case 'version':
val = {
hw: readData.hwVer,
sw: readData.swVer,
fw: ''
};
break;
case 'power':
val = {
type: readData.availPwrSrc,
voltage: readData.pwrSrcVoltage.toString()
};
break;
// case 'devType':
// val = readData.devType;
// break;
// case 'clientId':
// val = qnode.clientId;
// break;
// case 'lifetime':
// val = qnode.lifetime;
// break;
// case 'lwmqnVersion':
// val = qnode.version;
// break;
}
callback(null, val);
});
}
function write(permAddr, attrName, val, callback) {
// callback(err, result)
// result: value written (optional, Type denpends, ex: 'hello', 12, false)
var realAddr = helper.parsePermAddr(permAddr),
qnode = this.find(realAddr.clientId),
resrcPath;
if (qnode)
callback(new Error('Device attribute ' + attrName + ' is read-only.'));
else
callback(new Error('Device not found.'));
}
function identify(permAddr, callback) {
// callback(err)
var realAddr = helper.parsePermAddr(permAddr),
qnode = this.find(realAddr.clientId),
resrcPath;
if (!qnode) {
callback(new Error('Device not found.'));
} else {
qnode.identifyReq(function (err, rsp) {
if (err)
callback(err);
else if (!helper.isGoodResponse(rsp.status))
callback(new Error('Bad response: ' + rsp.status));
else
callback();
});
}
}
module.exports = {
read: read,
write: write,
identify: identify
};