mirror of
https://github.com/mtan93/homebridge.git
synced 2026-03-08 05:31:55 +00:00
96 lines
3.0 KiB
JavaScript
96 lines
3.0 KiB
JavaScript
var inherits = require('util').inherits;
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var Service = require("hap-nodejs").Service;
|
|
var Characteristic = require("hap-nodejs").Characteristic;
|
|
var SetupSession = require("./bridgeSetupSession").SetupSession;
|
|
|
|
'use strict';
|
|
|
|
module.exports = {
|
|
BridgeSetupManager: BridgeSetupManager
|
|
}
|
|
|
|
function BridgeSetupManager() {
|
|
this.session;
|
|
|
|
this.service = new Service(null, "49FB9D4D-0FEA-4BF1-8FA6-E7B18AB86DCE");
|
|
|
|
this.stateCharacteristic = new Characteristic("State", "77474A2F-FA98-485E-97BE-4762458774D8", {
|
|
format: Characteristic.Formats.UINT8,
|
|
minValue: 0,
|
|
maxValue: 1,
|
|
minStep: 1,
|
|
perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY]
|
|
});
|
|
this.stateCharacteristic.value = 0;
|
|
this.service.addCharacteristic(this.stateCharacteristic);
|
|
|
|
this.versionCharacteristic = new Characteristic("Version", "FD9FE4CC-D06F-4FFE-96C6-595D464E1026", {
|
|
format: Characteristic.Formats.STRING,
|
|
perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY]
|
|
});
|
|
this.versionCharacteristic.value = "1.0";
|
|
this.service.addCharacteristic(this.versionCharacteristic);
|
|
|
|
this.controlPointCharacteristic = new Characteristic("Control Point", "5819A4C2-E1B0-4C9D-B761-3EB1AFF43073", {
|
|
format: Characteristic.Formats.DATA,
|
|
perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY]
|
|
})
|
|
this.controlPointCharacteristic.on('get', function(callback, context) {
|
|
this.handleReadRequest(callback, context);
|
|
}.bind(this));
|
|
this.controlPointCharacteristic.on('set', function(newValue, callback, context) {
|
|
this.handleWriteRequest(newValue, callback, context);
|
|
}.bind(this));
|
|
|
|
this.controlPointCharacteristic.value = null;
|
|
this.service.addCharacteristic(this.controlPointCharacteristic);
|
|
}
|
|
|
|
inherits(BridgeSetupManager, EventEmitter);
|
|
|
|
BridgeSetupManager.prototype.handleReadRequest = function(callback, context) {
|
|
if (!context) {
|
|
return;
|
|
}
|
|
|
|
if (!this.session) {
|
|
callback(null, null);
|
|
} else {
|
|
this.session.handleReadRequest(callback);
|
|
}
|
|
}
|
|
|
|
BridgeSetupManager.prototype.handleWriteRequest = function(value, callback, context) {
|
|
if (!context) {
|
|
callback();
|
|
return;
|
|
}
|
|
|
|
var data = new Buffer(value, 'base64');
|
|
var request = JSON.parse(data.toString());
|
|
callback();
|
|
|
|
if (!this.session || this.session.sessionUUID !== request.sid) {
|
|
if (this.session) {
|
|
this.session.removeAllListeners();
|
|
this.session.validSession = false;
|
|
}
|
|
|
|
this.session = new SetupSession(this.stateCharacteristic, this.controlPointCharacteristic);
|
|
this.session.configurablePlatformPlugins = this.configurablePlatformPlugins;
|
|
this.session.on('newConfig', function(type, name, replace, config) {
|
|
this.emit('newConfig', type, name, replace, config);
|
|
}.bind(this));
|
|
|
|
this.session.on('requestCurrentConfig', function(callback) {
|
|
this.emit('requestCurrentConfig', callback);
|
|
}.bind(this));
|
|
|
|
this.session.on('end', function() {
|
|
this.session = null;
|
|
}.bind(this));
|
|
}
|
|
|
|
this.session.handleWriteRequest(request);
|
|
} |