init
This commit is contained in:
112
app/image/image.controller.js
Normal file
112
app/image/image.controller.js
Normal file
@@ -0,0 +1,112 @@
|
||||
/*jshint esversion: 6 */
|
||||
const path = require('path');
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const imageService = require(path.resolve(__dirname, './image.service.js'));
|
||||
module.exports = router;
|
||||
|
||||
router.post('/bright', _brightness);
|
||||
router.post('/contrast', _contrast);
|
||||
router.post('/wb', _whiteBalance);
|
||||
router.post('/rgain', _rgain);
|
||||
router.post('/bgain', _bgain);
|
||||
router.post('/shutter', _shutter);
|
||||
router.post('/iris', _iris);
|
||||
router.post('/gain', _gain);
|
||||
router.post('/backLight', _backLight);
|
||||
router.post('/bw', _blackWhite);
|
||||
router.post('/flicker', _flicker);
|
||||
router.post('/imgFlip', _imgFlip);
|
||||
router.post('/colorHue', _colorHue);
|
||||
router.post('/ae', _autoExp);
|
||||
router.post('/save', _save);
|
||||
|
||||
function _brightness(req, res, next) {
|
||||
imageService.brightness(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _contrast(req, res, next) {
|
||||
imageService.contrast(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _whiteBalance(req, res, next) {
|
||||
imageService.whiteBalance(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _rgain(req, res, next) {
|
||||
imageService.rgain(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _bgain(req, res, next) {
|
||||
imageService.bgain(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _shutter(req, res, next) {
|
||||
imageService.shutter(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _iris(req, res, next) {
|
||||
imageService.iris(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _gain(req, res, next) {
|
||||
imageService.gain(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _backLight(req, res, next) {
|
||||
imageService.backLight(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _blackWhite(req, res, next) {
|
||||
imageService.blackWhite(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _flicker(req, res, next) {
|
||||
imageService.flicker(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _imgFlip(req, res, next) {
|
||||
imageService.imgFlip(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _colorHue(req, res, next) {
|
||||
imageService.colorHue(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _autoExp(req, res, next) {
|
||||
imageService.ae(req.body)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
||||
|
||||
function _save(req, res, next) {
|
||||
imageService.save(req.body.id)
|
||||
.then((socket) => res.json(socket))
|
||||
.catch(err => next(err));
|
||||
}
|
479
app/image/image.service.js
Normal file
479
app/image/image.service.js
Normal file
@@ -0,0 +1,479 @@
|
||||
/*jshint esversion: 6 */
|
||||
const path = require('path');
|
||||
const db = require(path.resolve(__dirname, '../_helpers/db.js'));
|
||||
const ptzHelper = require(path.resolve(__dirname, '../_helpers/ptzHelper.js'));
|
||||
const socket = require(path.resolve(__dirname, '../_helpers/socket.js'));
|
||||
const Camera = db.Camera;
|
||||
|
||||
module.exports = {
|
||||
brightness: _brightness,
|
||||
contrast: _contrast,
|
||||
whiteBalance: whiteBal,
|
||||
rgain: _rgain,
|
||||
bgain: _bgain,
|
||||
shutter: _shutter,
|
||||
iris: _iris,
|
||||
gain: _gain,
|
||||
backLight: _backLight,
|
||||
blackWhite: _blackWhite,
|
||||
flicker: _flicker,
|
||||
imgFlip: _imgFlip,
|
||||
colorHue: _colorHue,
|
||||
ae: _autoExp,
|
||||
save: saveSetting
|
||||
};
|
||||
|
||||
async function _brightness({id, pos}) {
|
||||
let brightnessHex = "810104A10000";
|
||||
let brightnessPos = ptzHelper.numToHexStr(pos).padStart(4, "0");
|
||||
brightnessHex += brightnessPos + "FF";
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, brightnessHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _contrast(contrastParams) {
|
||||
const {id, pos} = contrastParams;
|
||||
let contrastHex = "810104A20000";
|
||||
let contrastPos = ptzHelper.numToHexStr(pos).padStart(4, "0");
|
||||
contrastHex += contrastPos + 'FF';
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, contrastHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function whiteBal({id, option, mode}) {
|
||||
let wbHex = "810104";
|
||||
|
||||
if (mode.toLowerCase() === 'wbmode') {
|
||||
switch(option.toLowerCase()) {
|
||||
case "auto":
|
||||
wbHex += "3500FF";
|
||||
break;
|
||||
case "indoor":
|
||||
wbHex += "3501FF";
|
||||
break;
|
||||
case "outdoor":
|
||||
wbHex += "3502FF";
|
||||
break;
|
||||
case "onepush":
|
||||
wbHex += "3503FF";
|
||||
break;
|
||||
case "manual":
|
||||
wbHex += "3505FF";
|
||||
break;
|
||||
case "onepush-trigger":
|
||||
wbHex += "1005FF";
|
||||
break;
|
||||
default:
|
||||
throw "The white balance mode " + option + " is not a recognizable white balance mode.";
|
||||
}
|
||||
} else if (mode.toLowerCase() === 'awbsenstivity') {
|
||||
switch(option.toLowerCase()) {
|
||||
case "high":
|
||||
wbHex += "A900FF";
|
||||
break;
|
||||
case "normal":
|
||||
wbHex += "A901FF";
|
||||
break;
|
||||
case "low":
|
||||
wbHex += "A902FF";
|
||||
break;
|
||||
default:
|
||||
throw "The auto white balance mode " + option + " is not a recognizable auto white balance mode.";
|
||||
}
|
||||
} else {
|
||||
throw mode + "is not a recognizable white balance method.";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, wbHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function _rgain({id, mode, option = null, pos = null}) {
|
||||
let rgainHex = "810104";
|
||||
|
||||
if (mode.toLowerCase() === 'standard') {
|
||||
switch (option.toLowerCase()) {
|
||||
case "reset":
|
||||
rgainHex += "0300FF";
|
||||
break;
|
||||
case "up":
|
||||
rgainHex += "0302FF";
|
||||
break;
|
||||
case "down":
|
||||
rgainHex += "0303FF";
|
||||
break;
|
||||
default:
|
||||
throw "The rgain option " + option + " is not a recognizable standard rgain option";
|
||||
}
|
||||
} else if (mode.toLowerCase() === 'direct') {
|
||||
rgainHex = "430000" + ptzHelper.numToHexStr(pos).padStart(4, "0") + "FF";
|
||||
} else {
|
||||
throw "The rgain mode " + mode + " is not a recognizable rgain method.";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, rgainHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _bgain({id, mode, option = null, pos = null}) {
|
||||
let bgainHex = "810104";
|
||||
|
||||
if (mode.toLowerCase() === 'standard') {
|
||||
switch (option.toLowerCase()) {
|
||||
case "reset":
|
||||
bgainHex += "0400FF";
|
||||
break;
|
||||
case "up":
|
||||
bgainHex += "0402FF";
|
||||
break;
|
||||
case "down":
|
||||
bgainHex += "0403FF";
|
||||
break;
|
||||
default:
|
||||
throw "The bgain option " + option + " is not a recognizable standard bgain option";
|
||||
}
|
||||
} else if (mode.toLowerCase() === 'direct') {
|
||||
rgainHex = "430000" + ptzHelper.numToHexStr(pos).padStart(4, "0") + "FF";
|
||||
} else {
|
||||
throw "The bgain mode " + mode + " is not a recognizable bgain method.";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, bgainHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _shutter({id, option, mode}) {
|
||||
let shutterHex = "8101040A";
|
||||
if (mode.toLowerCase() === 'standard') {
|
||||
switch (option.toLowerCase()) {
|
||||
case "reset":
|
||||
shutterHex += "00FF";
|
||||
break;
|
||||
case "up":
|
||||
shutterHex += "02FF";
|
||||
break;
|
||||
case "down":
|
||||
shutterHex += "03FF";
|
||||
break;
|
||||
default:
|
||||
throw "The shutter option " + option + " is not a recognizable standard shutter option";
|
||||
}
|
||||
} else if (mode.toLowerCase() === 'direct') {
|
||||
shutterHex += "0000";
|
||||
switch (option) {
|
||||
case "1/30":
|
||||
shutterHex += "0001FF";
|
||||
break;
|
||||
case "1/60":
|
||||
shutterHex += "0002FF";
|
||||
break;
|
||||
case "1/90":
|
||||
shutterHex += "0003FF";
|
||||
break;
|
||||
case "1/100":
|
||||
shutterHex += "0004FF";
|
||||
break;
|
||||
case "1/125":
|
||||
shutterHex += "0005FF";
|
||||
break;
|
||||
case "1/180":
|
||||
shutterHex += "0006FF";
|
||||
break;
|
||||
case "1/250":
|
||||
shutterHex += "0007FF";
|
||||
break;
|
||||
case "1/350":
|
||||
shutterHex += "0008FF";
|
||||
break;
|
||||
case "1/500":
|
||||
shutterHex += "0009FF";
|
||||
break;
|
||||
case "1/725":
|
||||
shutterHex += "000AFF";
|
||||
break;
|
||||
case "1/1000":
|
||||
shutterHex += "000BFF";
|
||||
break;
|
||||
case "1/1500":
|
||||
shutterHex += "000CFF";
|
||||
break;
|
||||
case "1/2000":
|
||||
shutterHex += "000DFF";
|
||||
break;
|
||||
case "1/3000":
|
||||
shutterHex += "000EFF";
|
||||
break;
|
||||
case "1/4000":
|
||||
shutterHex += "000FFF";
|
||||
break;
|
||||
case "1/6000":
|
||||
shutterHex += "0100FF";
|
||||
break;
|
||||
case "1/10000":
|
||||
shutterHex += "0101FF";
|
||||
break;
|
||||
default:
|
||||
throw "The shutter option " + option + " is not a recognizable direct shutter option";
|
||||
}
|
||||
} else {
|
||||
throw "The shutter mode " + mode + " is not a recognizable shutter mode";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, shutterHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
console.log("reached end");
|
||||
}
|
||||
|
||||
async function _iris({id, mode, option}) {
|
||||
let irisHex = "8101040B";
|
||||
|
||||
if (mode.toLowerCase() === 'standard') {
|
||||
switch (option.toLowerCase()) {
|
||||
case "reset":
|
||||
irisHex += "00FF";
|
||||
break;
|
||||
case "up":
|
||||
irisHex += "02FF";
|
||||
break;
|
||||
case "down":
|
||||
irisHex += "03FF";
|
||||
break;
|
||||
default:
|
||||
throw "The iris option " + option + " is not a recognizable standard iris option";
|
||||
}
|
||||
} else if (mode.toLowerCase() === 'direct') {
|
||||
irisHex += "0000";
|
||||
switch (option.toLowerCase()) {
|
||||
case "close":
|
||||
irisHex += "0000FF";
|
||||
break;
|
||||
case "f11":
|
||||
irisHex += "0006FF";
|
||||
break;
|
||||
case "f9.6":
|
||||
irisHex += "0007FF";
|
||||
break;
|
||||
case "f8.0":
|
||||
irisHex += "0008FF";
|
||||
break;
|
||||
case "f6.8":
|
||||
irisHex += "0009FF";
|
||||
break;
|
||||
case "f5.6":
|
||||
irisHex += "000AFF";
|
||||
break;
|
||||
case "f4.8":
|
||||
irisHex += "000BFF";
|
||||
break;
|
||||
case "f4.0":
|
||||
irisHex += "000CFF";
|
||||
break;
|
||||
case "f3.4":
|
||||
irisHex += "000DFF";
|
||||
break;
|
||||
case "f2.8":
|
||||
irisHex += "000EFF";
|
||||
break;
|
||||
case "f2.0":
|
||||
irisHex += "0100FF";
|
||||
break;
|
||||
case "f1.8":
|
||||
irisHex += "0200FF";
|
||||
break;
|
||||
default:
|
||||
throw "The iris direct option " + option + " is not a recognizable option";
|
||||
}
|
||||
} else {
|
||||
throw "The iris option " + option + " is not a recognizable direct iris option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, irisHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _gain({id, mode, option = null, pos = null}) {
|
||||
let gainHex = "8101040C";
|
||||
if (mode.toLowerCase() === "standard") {
|
||||
switch(option.toLowerCase()) {
|
||||
case "reset":
|
||||
gainHex += "00FF";
|
||||
break;
|
||||
case "up":
|
||||
gainHex += "02FF";
|
||||
break;
|
||||
case "down":
|
||||
gainHex += "03FF";
|
||||
break;
|
||||
default:
|
||||
throw "The gain option " + option + " is not a recognizable standard gain option";
|
||||
}
|
||||
} else if (mode === "direct") {
|
||||
gainHex += "0000" + ptzHelper.numToHexStr(pos).padStart(4, "0") + "FF";
|
||||
} else {
|
||||
throw "The gain mode " + mode + " is not a recognizable gain mode";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, gainHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _backLight({id, option}) {
|
||||
let backlightHex = "81010433";
|
||||
if (option.toLowerCase() === 'on') {
|
||||
backlightHex += "02FF";
|
||||
} else if (option.toLowerCase() === 'off') {
|
||||
backlightHex += "03FF";
|
||||
} else {
|
||||
throw "The back light option " + option + " is not a recognizable back light option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, backlightHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _blackWhite({id, option}) {
|
||||
let bwHex = "81010463";
|
||||
|
||||
if (option.toLowerCase() === 'on') {
|
||||
bwHex += "04FF";
|
||||
} else if (option.toLowerCase() === 'off') {
|
||||
bwHex += "00FF";
|
||||
} else {
|
||||
throw "The back light option " + option + " is not a recognizable back light option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, bwHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _flicker({id, option}) {
|
||||
let flickerHex = "810104230";
|
||||
switch(option.toLowerCase()) {
|
||||
case "off":
|
||||
flickerHex += "0FF";
|
||||
break;
|
||||
case "50hz":
|
||||
flickerHex += "1FF";
|
||||
break;
|
||||
case "60hz":
|
||||
flickerHex += "2FF";
|
||||
break;
|
||||
default:
|
||||
throw "The flicker option " + option + " is not a recognizable standard flicker option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, flickerHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _imgFlip({id, mode, option}) {
|
||||
let imgFlipHex = "810104";
|
||||
|
||||
if (mode.toLowerCase() === 'lr') {
|
||||
imgFlipHex += '61';
|
||||
} else if (mode.toLowerCase() === 'pf') {
|
||||
imgFlipHex += '66';
|
||||
} else {
|
||||
throw "The image flip mode " + mode + " is not a recognizable image flip mode";
|
||||
}
|
||||
|
||||
if (option.toLowerCase() === 'off') {
|
||||
imgFlipHex += '03FF';
|
||||
} else if (option.toLowerCase() === 'on') {
|
||||
imgFlipHex += '02FF';
|
||||
} else {
|
||||
throw "The image flip option " + option + " is not a recognizable image flip option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, imgFlipHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _colorHue({id, pos}) {
|
||||
let colorHueHex = '8101044F';
|
||||
let colorHuePos = ptzHelper.numToHexStr(pos).padStart(8, "0");
|
||||
colorHueHex += colorHuePos + "FF";
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, colorHueHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function _autoExp({id, option}) {
|
||||
let aeHex = '81010439';
|
||||
|
||||
switch (option.toLowerCase()) {
|
||||
case "fullauto":
|
||||
aeHex += '00FF';
|
||||
break;
|
||||
case "manual":
|
||||
aeHex += '03FF';
|
||||
break;
|
||||
case "shutter":
|
||||
aeHex += '0AFF';
|
||||
break;
|
||||
case "iris":
|
||||
aeHex += '0BFF';
|
||||
break;
|
||||
case "bright":
|
||||
aeHex += '0DFF';
|
||||
break;
|
||||
default:
|
||||
throw "The autoexp option " + option + " is not a recognizable autoexp option";
|
||||
}
|
||||
|
||||
try {
|
||||
return await socket.sendCmd(id, aeHex);
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function saveSetting(id) {
|
||||
try {
|
||||
return await socket.sendCmd(id, "81010604FF");
|
||||
} catch(err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user