Day mask helper functions / Refactor of time functions (#31)
* added helper methods for decode/encode dayMask * moved isBitSet to SLMessage.js as this method is needed for several message types * Refactored reusable functions to SLMessage
This commit is contained in:
@ -14,7 +14,6 @@ exports.SLGetScheduleData = class SLGetScheduleData extends SLMessage {
|
||||
|
||||
|
||||
if (!buf) {
|
||||
// console.log('Requested Schedule type = ', scheduleType);
|
||||
this.writeInt32LE(0);
|
||||
this.writeInt32LE(scheduleType);
|
||||
} else {
|
||||
@ -37,26 +36,16 @@ exports.SLGetScheduleData = class SLGetScheduleData extends SLMessage {
|
||||
|
||||
this.events[i].scheduleId = this.readUInt32LE();
|
||||
this.events[i].circuitId = this.readUInt32LE();
|
||||
this.events[i].startTime = this.readTime(this.readUInt32LE());
|
||||
this.events[i].stopTime = this.readTime(this.readUInt32LE());
|
||||
this.events[i].startTime = this.decodeTime(this.readUInt32LE());
|
||||
this.events[i].stopTime = this.decodeTime(this.readUInt32LE());
|
||||
this.events[i].dayMask = this.readUInt32LE();
|
||||
this.events[i].flags = this.readUInt32LE();
|
||||
this.events[i].heatCmd = this.readUInt32LE();
|
||||
this.events[i].heatSetPoint = this.readUInt32LE();
|
||||
|
||||
this.events[i].days = this.decodeDayMask(this.events[i].dayMask);
|
||||
}
|
||||
}
|
||||
|
||||
readTime(rawTime) {
|
||||
var retVal;
|
||||
|
||||
retVal = Math.floor(rawTime / 60) * 100 + rawTime % 60;
|
||||
|
||||
retVal = String(retVal).padStart(4, '0');
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
static getResponseId() {
|
||||
return MSG_ID + 1;
|
||||
}
|
||||
|
@ -2,6 +2,16 @@
|
||||
|
||||
const SmartBuffer = require('smart-buffer').SmartBuffer;
|
||||
|
||||
const DAY_VALUES = [
|
||||
['Mon', 0x1 ],
|
||||
['Tue', 0x2 ],
|
||||
['Wed', 0x4 ],
|
||||
['Thu', 0x8 ],
|
||||
['Fri', 0x10 ],
|
||||
['Sat', 0x20 ],
|
||||
['Sun', 0x40 ],
|
||||
];
|
||||
|
||||
exports.SLMessage = class SLMessage extends SmartBuffer {
|
||||
constructor(senderId, messageId, size) {
|
||||
var options;
|
||||
@ -93,6 +103,53 @@ exports.SLMessage = class SLMessage extends SmartBuffer {
|
||||
this.dataLength = this.readInt32LE();
|
||||
}
|
||||
|
||||
isBitSet(value, bit) {
|
||||
return ((value >> bit) & 0x1) === 1;
|
||||
}
|
||||
|
||||
decodeTime(rawTime) { // Takes 'rawTime' in mins past midnight and returns military time as a string
|
||||
var retVal;
|
||||
|
||||
retVal = Math.floor(rawTime / 60) * 100 + rawTime % 60;
|
||||
|
||||
retVal = String(retVal).padStart(4, '0');
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
encodeTime(stringTime) { // Takes 'stringTime' as military time and returns mins past midnight
|
||||
return Number(stringTime.substr(0, 2) * 60) + Number(stringTime.substr(2, 2));
|
||||
}
|
||||
|
||||
decodeDayMask(dayMask) {
|
||||
var days = [];
|
||||
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if (this.isBitSet(dayMask, i)) {
|
||||
days.push(DAY_VALUES[i][0]);
|
||||
}
|
||||
}
|
||||
return days;
|
||||
}
|
||||
|
||||
encodeDayMask(daysArray) {
|
||||
var dayMask = 0;
|
||||
|
||||
for (var i = 0; i < daysArray.length; i++) {
|
||||
dayMask += this.getDayValue(daysArray[i]);
|
||||
}
|
||||
return dayMask;
|
||||
}
|
||||
|
||||
getDayValue(dayName) {
|
||||
for (var i = 0; i < DAY_VALUES.length; i++) {
|
||||
if (DAY_VALUES[i][0] === dayName) {
|
||||
return DAY_VALUES[i][1];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static slackForAlignment(val) {
|
||||
return (4 - val % 4) % 4;
|
||||
}
|
||||
|
Reference in New Issue
Block a user