mirror of
https://github.com/hak5/nano-tetra-modules.git
synced 2025-10-29 16:58:09 +00:00
Add modules to repository
This commit is contained in:
2
LEDController/.gitignore
vendored
Normal file
2
LEDController/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
sftp-config.json
|
||||
deployment-config.json
|
||||
21
LEDController/LICENSE
Normal file
21
LEDController/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Marc
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
361
LEDController/api/module.php
Normal file
361
LEDController/api/module.php
Normal file
@@ -0,0 +1,361 @@
|
||||
<?php namespace pineapple;
|
||||
|
||||
class LEDController extends Module
|
||||
{
|
||||
public function route()
|
||||
{
|
||||
switch ($this->request->action) {
|
||||
case 'getDeviceType':
|
||||
$this->getDeviceType();
|
||||
break;
|
||||
case 'resetLEDs':
|
||||
$this->resetLEDs();
|
||||
break;
|
||||
case 'getTetraYellow':
|
||||
$this->getTetraYellow();
|
||||
break;
|
||||
case 'setTetraYellow':
|
||||
$this->setTetraYellow();
|
||||
break;
|
||||
case 'getTetraBlue':
|
||||
$this->getTetraBlue();
|
||||
break;
|
||||
case 'setTetraBlue':
|
||||
$this->setTetraBlue();
|
||||
break;
|
||||
case 'getTetraRed':
|
||||
$this->getTetraRed();
|
||||
break;
|
||||
case 'setTetraRed':
|
||||
$this->setTetraRed();
|
||||
break;
|
||||
case 'getNanoBlue':
|
||||
$this->getNanoBlue();
|
||||
break;
|
||||
case 'setNanoBlue':
|
||||
$this->setNanoBlue();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function restartLEDs()
|
||||
{
|
||||
exec('/etc/init.d/led restart');
|
||||
}
|
||||
|
||||
private function getDeviceType()
|
||||
{
|
||||
$device = $this->getDevice();
|
||||
|
||||
if ($device == 'tetra') {
|
||||
$this->response = 'tetra';
|
||||
} else {
|
||||
$this->response = 'nano';
|
||||
}
|
||||
}
|
||||
|
||||
private function getTetraYellow()
|
||||
{
|
||||
$trigger = $this->uciGet('system.@led[2].trigger');
|
||||
|
||||
if ($trigger == 'none') {
|
||||
$default = $this->uciGet('system.@led[2].default');
|
||||
if ($default == 0) {
|
||||
$this->response = array('enabled' => false, 'trigger' => $trigger);
|
||||
} elseif ($default == 1) {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$mode = $this->uciGet('system.@led[2].mode');
|
||||
$interface = $this->uciGet('system.@led[2].dev');
|
||||
if ($mode == 'link tx rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx rx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link tx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link rx', 'interface' => $interface);
|
||||
}
|
||||
} elseif ($trigger == 'timer') {
|
||||
$delayOn = $this->uciGet('system.@led[2].delayon');
|
||||
$delayOff = $this->uciGet('system.@led[2].delayoff');
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'delayOn' => $delayOn, 'delayOff' => $delayOff);
|
||||
} else {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
}
|
||||
|
||||
private function setTetraYellow()
|
||||
{
|
||||
$enabled = $this->request->enabled;
|
||||
$trigger = $this->request->trigger;
|
||||
$mode = $this->request->mode;
|
||||
$delayOn = $this->request->delayOn;
|
||||
$delayOff = $this->request->delayOff;
|
||||
$interface = $this->request->interface;
|
||||
|
||||
if ($enabled == true) {
|
||||
if ($trigger == 'none') {
|
||||
$this->uciSet('system.@led[2].trigger', 'none');
|
||||
$this->uciSet('system.@led[2].default', '1');
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$this->uciSet('system.@led[2].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[2].mode', "$mode");
|
||||
$this->uciSet('system.@led[2].dev', "$interface");
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'timer') {
|
||||
$this->uciSet('system.@led[2].trigger', 'timer');
|
||||
$this->uciSet('system.@led[2].delayon', "$delayOn");
|
||||
$this->uciSet('system.@led[2].delayoff', "$delayOff");
|
||||
$this->restartLEDs();
|
||||
}
|
||||
} elseif ($enabled == false) {
|
||||
$this->uciSet('system.@led[2].trigger', 'none');
|
||||
$this->uciSet('system.@led[2].default', '0');
|
||||
$this->restartLEDs();
|
||||
}
|
||||
|
||||
$this->response = array('enabled' => $enabled, 'trigger' => $trigger,
|
||||
'mode' => $mode, 'delayOn' => $delayOn,
|
||||
'delayOff' => $delayOff, 'interface' => $interface, 'success' => true);
|
||||
}
|
||||
|
||||
private function getTetraBlue()
|
||||
{
|
||||
$trigger = $this->uciGet('system.@led[0].trigger');
|
||||
|
||||
if ($trigger == 'none') {
|
||||
$default = $this->uciGet('system.@led[0].default');
|
||||
if ($default == 0) {
|
||||
$this->response = array('enabled' => false, 'trigger' => $trigger);
|
||||
} elseif ($default == 1) {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$mode = $this->uciGet('system.@led[0].mode');
|
||||
$interface = $this->uciGet('system.@led[0].dev');
|
||||
if ($mode == 'link tx rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx rx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link tx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link rx', 'interface' => $interface);
|
||||
}
|
||||
} elseif ($trigger == 'timer') {
|
||||
$delayOn = $this->uciGet('system.@led[0].delayon');
|
||||
$delayOff = $this->uciGet('system.@led[0].delayoff');
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'delayOn' => $delayOn, 'delayOff' => $delayOff);
|
||||
} else {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
}
|
||||
|
||||
private function setTetraBlue()
|
||||
{
|
||||
$enabled = $this->request->enabled;
|
||||
$trigger = $this->request->trigger;
|
||||
$mode = $this->request->mode;
|
||||
$delayOn = $this->request->delayOn;
|
||||
$delayOff = $this->request->delayOff;
|
||||
$interface = $this->request->interface;
|
||||
|
||||
if ($enabled == true) {
|
||||
if ($trigger == 'none') {
|
||||
$this->uciSet('system.@led[0].trigger', 'none');
|
||||
$this->uciSet('system.@led[0].default', '1');
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$this->uciSet('system.@led[0].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[0].mode', "$mode");
|
||||
$this->uciSet('system.@led[0].dev', "$interface");
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'timer') {
|
||||
$this->uciSet('system.@led[0].trigger', 'timer');
|
||||
$this->uciSet('system.@led[0].delayon', "$delayOn");
|
||||
$this->uciSet('system.@led[0].delayoff', "$delayOff");
|
||||
$this->restartLEDs();
|
||||
}
|
||||
} elseif ($enabled == false) {
|
||||
$this->uciSet('system.@led[0].trigger', 'none');
|
||||
$this->uciSet('system.@led[0].default', '0');
|
||||
$this->restartLEDs();
|
||||
}
|
||||
|
||||
$this->response = array('enabled' => $enabled, 'trigger' => $trigger,
|
||||
'mode' => $mode, 'delayOn' => $delayOn,
|
||||
'delayOff' => $delayOff, 'interface' => $interface, 'success' => true);
|
||||
}
|
||||
|
||||
private function getTetraRed()
|
||||
{
|
||||
$trigger = $this->uciGet('system.@led[1].trigger');
|
||||
|
||||
if ($trigger == 'none') {
|
||||
$default = $this->uciGet('system.@led[1].default');
|
||||
if ($default == 0) {
|
||||
$this->response = array('enabled' => false, 'trigger' => $trigger);
|
||||
} elseif ($default == 1) {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$mode = $this->uciGet('system.@led[1].mode');
|
||||
$interface = $this->uciGet('system.@led[1].dev');
|
||||
if ($mode == 'link tx rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx rx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link tx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link rx', 'interface' => $interface);
|
||||
}
|
||||
} elseif ($trigger == 'timer') {
|
||||
$delayOn = $this->uciGet('system.@led[1].delayon');
|
||||
$delayOff = $this->uciGet('system.@led[1].delayoff');
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'delayOn' => $delayOn, 'delayOff' => $delayOff);
|
||||
} else {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
}
|
||||
|
||||
private function setTetraRed()
|
||||
{
|
||||
$enabled = $this->request->enabled;
|
||||
$trigger = $this->request->trigger;
|
||||
$mode = $this->request->mode;
|
||||
$delayOn = $this->request->delayOn;
|
||||
$delayOff = $this->request->delayOff;
|
||||
$interface = $this->request->interface;
|
||||
|
||||
if ($enabled == true) {
|
||||
if ($trigger == 'none') {
|
||||
$this->uciSet('system.@led[1].trigger', 'none');
|
||||
$this->uciSet('system.@led[1].default', '1');
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$this->uciSet('system.@led[1].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[1].mode', "$mode");
|
||||
$this->uciSet('system.@led[1].dev', "$interface");
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'timer') {
|
||||
$this->uciSet('system.@led[1].trigger', 'timer');
|
||||
$this->uciSet('system.@led[1].delayon', "$delayOn");
|
||||
$this->uciSet('system.@led[1].delayoff', "$delayOff");
|
||||
$this->restartLEDs();
|
||||
}
|
||||
} elseif ($enabled == false) {
|
||||
$this->uciSet('system.@led[1].trigger', 'none');
|
||||
$this->uciSet('system.@led[1].default', '0');
|
||||
$this->restartLEDs();
|
||||
}
|
||||
|
||||
$this->response = array('enabled' => $enabled, 'trigger' => $trigger,
|
||||
'mode' => $mode, 'delayOn' => $delayOn,
|
||||
'delayOff' => $delayOff, 'interface' => $interface, 'success' => true);
|
||||
}
|
||||
|
||||
private function getNanoBlue()
|
||||
{
|
||||
$trigger = $this->uciGet('system.@led[0].trigger');
|
||||
|
||||
if ($trigger == 'none') {
|
||||
$default = $this->uciGet('system.@led[0].default');
|
||||
if ($default == 0) {
|
||||
$this->response = array('enabled' => false, 'trigger' => $trigger);
|
||||
} elseif ($default == 1) {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$mode = $this->uciGet('system.@led[0].mode');
|
||||
$interface = $this->uciGet('system.@led[0].dev');
|
||||
if ($mode == 'link tx rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx rx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link tx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link tx', 'interface' => $interface);
|
||||
} elseif ($mode == 'link rx') {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'mode' => 'link rx', 'interface' => $interface);
|
||||
}
|
||||
} elseif ($trigger == 'timer') {
|
||||
$delayOn = $this->uciGet('system.@led[0].delayon');
|
||||
$delayOff = $this->uciGet('system.@led[0].delayoff');
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger,
|
||||
'delayOn' => $delayOn, 'delayOff' => $delayOff);
|
||||
} else {
|
||||
$this->response = array('enabled' => true, 'trigger' => $trigger);
|
||||
}
|
||||
}
|
||||
|
||||
private function setNanoBlue()
|
||||
{
|
||||
$enabled = $this->request->enabled;
|
||||
$trigger = $this->request->trigger;
|
||||
$mode = $this->request->mode;
|
||||
$delayOn = $this->request->delayOn;
|
||||
$delayOff = $this->request->delayOff;
|
||||
$interface = $this->request->interface;
|
||||
|
||||
if ($enabled == true) {
|
||||
if ($trigger == 'none') {
|
||||
$this->uciSet('system.@led[0].trigger', 'none');
|
||||
$this->uciSet('system.@led[0].default', '1');
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'netdev') {
|
||||
$this->uciSet('system.@led[0].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[0].mode', "$mode");
|
||||
$this->uciSet('system.@led[0].dev', "$interface");
|
||||
$this->restartLEDs();
|
||||
} elseif ($trigger == 'timer') {
|
||||
$this->uciSet('system.@led[0].trigger', 'timer');
|
||||
$this->uciSet('system.@led[0].delayon', "$delayOn");
|
||||
$this->uciSet('system.@led[0].delayoff', "$delayOff");
|
||||
$this->restartLEDs();
|
||||
}
|
||||
} elseif ($enabled == false) {
|
||||
$this->uciSet('system.@led[0].trigger', 'none');
|
||||
$this->uciSet('system.@led[0].default', '0');
|
||||
$this->restartLEDs();
|
||||
}
|
||||
|
||||
$this->response = array('enabled' => $enabled, 'trigger' => $trigger,
|
||||
'mode' => $mode, 'delayOn' => $delayOn,
|
||||
'delayOff' => $delayOff, 'interface' => $interface, 'success' => true);
|
||||
}
|
||||
|
||||
private function resetLEDs()
|
||||
{
|
||||
$device = $this->getDevice();
|
||||
|
||||
if ($device == 'tetra') {
|
||||
$this->uciSet('system.@led[0].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[0].mode', 'link tx rx');
|
||||
$this->uciSet('system.@led[0].dev', 'wlan0');
|
||||
$this->uciSet('system.@led[1].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[1].mode', 'link tx rx');
|
||||
$this->uciSet('system.@led[1].dev', 'wlan1mon');
|
||||
$this->uciSet('system.@led[2].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[2].mode', 'link tx rx');
|
||||
$this->uciSet('system.@led[2].dev', 'eth0');
|
||||
$this->restartLEDs();
|
||||
$this->response = array('success' => true);
|
||||
} else {
|
||||
$this->uciSet('system.@led[0].trigger', 'netdev');
|
||||
$this->uciSet('system.@led[0].mode', 'link tx rx');
|
||||
$this->uciSet('system.@led[0].dev', 'wlan0');
|
||||
$this->restartLEDs();
|
||||
$this->response = array('success' => true);
|
||||
}
|
||||
}
|
||||
}
|
||||
210
LEDController/js/module.js
Normal file
210
LEDController/js/module.js
Normal file
@@ -0,0 +1,210 @@
|
||||
registerController('LEDController', ['$api', '$scope', '$timeout', function($api, $scope, $timeout) {
|
||||
$scope.device = '';
|
||||
$scope.resetConfig = false;
|
||||
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'getDeviceType'
|
||||
}, function(response) {
|
||||
$scope.device = response;
|
||||
});
|
||||
|
||||
$scope.resetLEDs = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'resetLEDs'
|
||||
}, function(response) {
|
||||
$scope.resetConfig = response.success;
|
||||
$timeout(function(){
|
||||
$scope.resetConfig = false;
|
||||
}, 2000);
|
||||
});
|
||||
});
|
||||
}]);
|
||||
|
||||
registerController('TetraYellow', ['$api', '$scope', '$timeout', function($api, $scope, $timeout) {
|
||||
$scope.enabled = false;
|
||||
$scope.trigger = 'link tx rx';
|
||||
$scope.mode = '';
|
||||
$scope.delayOn = '';
|
||||
$scope.delayOff = '';
|
||||
$scope.interface = '';
|
||||
$scope.savedConfig = false;
|
||||
|
||||
$scope.getTetraYellow = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'getTetraYellow'
|
||||
}, function(response) {
|
||||
$scope.enabled = response.enabled;
|
||||
$scope.trigger = response.trigger;
|
||||
$scope.mode = response.mode;
|
||||
$scope.delayOn = response.delayOn;
|
||||
$scope.delayOff = response.delayOff;
|
||||
$scope.interface = response.interface;
|
||||
});
|
||||
});
|
||||
|
||||
$scope.setTetraYellow = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'setTetraYellow',
|
||||
enabled: $scope.enabled,
|
||||
trigger: $scope.trigger,
|
||||
mode: $scope.mode,
|
||||
delayOn: $scope.delayOn,
|
||||
delayOff: $scope.delayOff,
|
||||
interface: $scope.interface
|
||||
}, function(response) {
|
||||
if (response.success == true) {
|
||||
$scope.savedConfig = true;
|
||||
$timeout(function(){
|
||||
$scope.savedConfig = false;
|
||||
}, 2000);
|
||||
}
|
||||
$scope.getTetraYellow();
|
||||
});
|
||||
});
|
||||
|
||||
$scope.getTetraYellow();
|
||||
}]);
|
||||
|
||||
registerController('TetraBlue', ['$api', '$scope', '$timeout', function($api, $scope, $timeout) {
|
||||
$scope.enabled = false;
|
||||
$scope.trigger = '';
|
||||
$scope.mode = 'link tx rx';
|
||||
$scope.delayOn = '';
|
||||
$scope.delayOff = '';
|
||||
$scope.interface = '';
|
||||
$scope.savedConfig = false;
|
||||
|
||||
$scope.getTetraBlue = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'getTetraBlue'
|
||||
}, function(response) {
|
||||
$scope.enabled = response.enabled;
|
||||
$scope.trigger = response.trigger;
|
||||
$scope.mode = response.mode;
|
||||
$scope.delayOn = response.delayOn;
|
||||
$scope.delayOff = response.delayOff;
|
||||
$scope.interface = response.interface;
|
||||
});
|
||||
});
|
||||
|
||||
$scope.setTetraBlue = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'setTetraBlue',
|
||||
enabled: $scope.enabled,
|
||||
trigger: $scope.trigger,
|
||||
mode: $scope.mode,
|
||||
delayOn: $scope.delayOn,
|
||||
delayOff: $scope.delayOff,
|
||||
interface: $scope.interface
|
||||
}, function(response) {
|
||||
if (response.success == true) {
|
||||
$scope.savedConfig = true;
|
||||
$timeout(function(){
|
||||
$scope.savedConfig = false;
|
||||
}, 2000);
|
||||
}
|
||||
$scope.getTetraBlue();
|
||||
});
|
||||
});
|
||||
$scope.getTetraBlue();
|
||||
}]);
|
||||
|
||||
registerController('TetraRed', ['$api', '$scope', '$timeout', function($api, $scope, $timeout) {
|
||||
$scope.enabled = false;
|
||||
$scope.trigger = '';
|
||||
$scope.mode = 'link tx rx';
|
||||
$scope.delayOn = '';
|
||||
$scope.delayOff = '';
|
||||
$scope.interface = '';
|
||||
$scope.savedConfig = false;
|
||||
|
||||
$scope.getTetraRed = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'getTetraRed'
|
||||
}, function(response) {
|
||||
$scope.enabled = response.enabled;
|
||||
$scope.trigger = response.trigger;
|
||||
$scope.mode = response.mode;
|
||||
$scope.delayOn = response.delayOn;
|
||||
$scope.delayOff = response.delayOff;
|
||||
$scope.interface = response.interface;
|
||||
});
|
||||
});
|
||||
|
||||
$scope.setTetraRed = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'setTetraRed',
|
||||
enabled: $scope.enabled,
|
||||
trigger: $scope.trigger,
|
||||
mode: $scope.mode,
|
||||
delayOn: $scope.delayOn,
|
||||
delayOff: $scope.delayOff,
|
||||
interface: $scope.interface
|
||||
}, function(response) {
|
||||
if (response.success == true) {
|
||||
$scope.savedConfig = true;
|
||||
$timeout(function(){
|
||||
$scope.savedConfig = false;
|
||||
}, 2000);
|
||||
}
|
||||
$scope.getTetraRed();
|
||||
});
|
||||
});
|
||||
|
||||
$scope.getTetraRed();
|
||||
}]);
|
||||
|
||||
registerController('NanoBlue', ['$api', '$scope', '$timeout', function($api, $scope, $timeout) {
|
||||
$scope.enabled = false;
|
||||
$scope.trigger = '';
|
||||
$scope.mode = 'link tx rx';
|
||||
$scope.delayOn = '';
|
||||
$scope.delayOff = '';
|
||||
$scope.interface = '';
|
||||
$scope.savedConfig = false;
|
||||
|
||||
$scope.getNanoBlue = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'getNanoBlue'
|
||||
}, function(response) {
|
||||
$scope.enabled = response.enabled;
|
||||
$scope.trigger = response.trigger;
|
||||
$scope.mode = response.mode;
|
||||
$scope.delayOn = response.delayOn;
|
||||
$scope.delayOff = response.delayOff;
|
||||
$scope.interface = response.interface;
|
||||
});
|
||||
});
|
||||
|
||||
$scope.setNanoBlue = (function() {
|
||||
$api.request({
|
||||
module: 'LEDController',
|
||||
action: 'setNanoBlue',
|
||||
enabled: $scope.enabled,
|
||||
trigger: $scope.trigger,
|
||||
mode: $scope.mode,
|
||||
delayOn: $scope.delayOn,
|
||||
delayOff: $scope.delayOff,
|
||||
interface: $scope.interface
|
||||
}, function(response) {
|
||||
if (response.success == true) {
|
||||
$scope.savedConfig = true;
|
||||
$timeout(function(){
|
||||
$scope.savedConfig = false;
|
||||
}, 2000);
|
||||
}
|
||||
$scope.getNanoBlue();
|
||||
});
|
||||
});
|
||||
|
||||
$scope.getNanoBlue();
|
||||
}]);
|
||||
275
LEDController/module.html
Normal file
275
LEDController/module.html
Normal file
@@ -0,0 +1,275 @@
|
||||
<div ng-controller="LEDController">
|
||||
<div class="panel-group" id="accordion">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading pointer" data-toggle="collapse" data-target="#LEDController" data-parent="#accordion">
|
||||
<h3 class="panel-title">LED Controller</div>
|
||||
<div id="LEDController" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<h3 style="text-align: center;">LED Controller</h3>
|
||||
<h6 style="text-align: center;">Version 1.1</h6>
|
||||
<p style="text-align: center;">Written by Foxtrot</p>
|
||||
|
||||
<p style="text-align: center;">This module allows you to control the LEDs behaviour on both the NANO and the TETRA.</p>
|
||||
<br/>
|
||||
|
||||
<center>
|
||||
<button type="button" class="btn btn-danger" ng-click="resetLEDs()">Reset LEDs</button>
|
||||
<p></p>
|
||||
<p class="well well-sm alert-success" ng-show="resetConfig">LEDs have been reset to defaults.</p>
|
||||
</center>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="device == 'tetra'">
|
||||
<div class="row">
|
||||
<div class="col-md-4" ng-controller="TetraYellow">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Yellow</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p class="well well-sm alert-success" ng-show="savedConfig">LED Configuration Updated</p>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="enabled" ng-checked="enabled"> Enabled
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Trigger</div>
|
||||
<select class="form-control" ng-model="trigger" ng-disabled="!enabled">
|
||||
<option value="netdev">Netdev</option>
|
||||
<option value="timer">Timer</option>
|
||||
<option value="none">None</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'netdev'">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" ng-model="mode">
|
||||
<option value="link tx rx">TX & RX</option>
|
||||
<option value="link tx">TX</option>
|
||||
<option value="link rx">RX</option>
|
||||
</select>
|
||||
</div>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Interface</span>
|
||||
<input type="text" class="form-control" placeholder="{{interface}}" ng-model="interface">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'timer'">
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">On (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOn}}" ng-model="delayOn">
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Off (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOff}}" ng-model="delayOff">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" ng-click="setTetraYellow()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4" ng-controller="TetraBlue">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Blue</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p class="well well-sm alert-success" ng-show="savedConfig">LED Configuration Updated</p>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="enabled" ng-checked="enabled"> Enabled
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Trigger</div>
|
||||
<select class="form-control" ng-model="trigger" ng-disabled="!enabled">
|
||||
<option value="netdev">Netdev</option>
|
||||
<option value="timer">Timer</option>
|
||||
<option value="none">None</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'netdev'">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" ng-model="mode">
|
||||
<option value="link tx rx">TX & RX</option>
|
||||
<option value="link tx">TX</option>
|
||||
<option value="link rx">RX</option>
|
||||
</select>
|
||||
</div>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Interface</span>
|
||||
<input type="text" class="form-control" placeholder="{{interface}}" ng-model="interface">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'timer'">
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">On (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOn}}" ng-model="delayOn">
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Off (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOff}}" ng-model="delayOff">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" ng-click="setTetraBlue()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4" ng-controller="TetraRed">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Red</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p class="well well-sm alert-success" ng-show="savedConfig">LED Configuration Updated</p>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="enabled" ng-checked="enabled"> Enabled
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Trigger</div>
|
||||
<select class="form-control" ng-model="trigger" ng-disabled="!enabled">
|
||||
<option value="netdev">Netdev</option>
|
||||
<option value="timer">Timer</option>
|
||||
<option value="none">None</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'netdev'">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" ng-model="mode">
|
||||
<option value="link tx rx">TX & RX</option>
|
||||
<option value="link tx">TX</option>
|
||||
<option value="link rx">RX</option>
|
||||
</select>
|
||||
</div>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Interface</span>
|
||||
<input type="text" class="form-control" placeholder="{{interface}}" ng-model="interface">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'timer'">
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">On (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOn}}" ng-model="delayOn">
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Off (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOff}}" ng-model="delayOff">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" ng-click="setTetraRed()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="device == 'nano'">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
</div>
|
||||
<div class="col-md-6" ng-controller="NanoBlue">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Blue</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p class="well well-sm alert-success" ng-show="savedConfig">LED Configuration Updated</p>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="enabled" ng-checked="enabled"> Enabled
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Trigger</div>
|
||||
<select class="form-control" ng-model="trigger" ng-disabled="!enabled">
|
||||
<option value="netdev">Netdev</option>
|
||||
<option value="timer">Timer</option>
|
||||
<option value="none">None</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'netdev'">
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">Mode</div>
|
||||
<select class="form-control" ng-model="mode">
|
||||
<option value="link tx rx">TX & RX</option>
|
||||
<option value="link tx">TX</option>
|
||||
<option value="link rx">RX</option>
|
||||
</select>
|
||||
</div>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Interface</span>
|
||||
<input type="text" class="form-control" placeholder="{{interface}}" ng-model="interface">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="trigger == 'timer'">
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">On (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOn}}" ng-model="delayOn">
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Off (ms)</span>
|
||||
<input type="text" class="form-control" placeholder="{{delayOff}}" ng-model="delayOff">
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" ng-click="setNanoBlue()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
10
LEDController/module.info
Normal file
10
LEDController/module.info
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"author": "Foxtrot",
|
||||
"description": "This module allows you to control LEDs.",
|
||||
"devices": [
|
||||
"nano",
|
||||
"tetra"
|
||||
],
|
||||
"title": "LED Controller",
|
||||
"version": "1.1"
|
||||
}
|
||||
Reference in New Issue
Block a user