htd-lync
Version:
This library is meant to be used to interact with an HTD Lync 12
1,450 lines (1,310 loc) • 26.4 kB
JavaScript
function getZoneNames(i) {
}
function getSourceNames(i) {
}
function getID() {
console.log("getID")
command = command = ["02", "00", "00", "08", "00", "0A"];
wsSendBinary(command, true);
}
//setInterval(getFirmware, 5000);
function getFirmware() {
console.log("getFirmware")
command = command = ["02", "00", "00", "0F", "00"];
wsSendBinary(command, false);
}
function getAllZoneStatus() {
command = command = ["02", "00", "00", "05", "00", "07"];
wsSendBinary(command, true);
}
function allOn() {
console.log("All On");
$("#allOn").addClass("active");
command = command = ["02", "00", "00", "04", "38"];
wsSendBinary(command, false);
setTimeout(function(y) {
$("#allOn").removeClass("active");
}, 1000);
for (i = 1; i < zones.length; i++) {
zones[i].powerOn = true;
}
updateData();
//updateGUI();
}
function allOff() {
$("#allOff").addClass("active");
command = command = ["02", "00", "00", "04", "39"];
wsSendBinary(command, false);
setTimeout(function(y) {
$("#allOff").removeClass("active");
}, 1000);
for (i = 1; i < zones.length; i++) {
zones[i].powerOn = false;
}
$('#systemStatusMute').prop('src', "images/speaker.png");
updateData();
//updateGUI();
}
function toggleZonePower(i) {
console.log(i);
var zone = i;
zone = zoneLookup(zone);
if (systems[systemIdx].zones[i].powerOn == true) {
command = ["02", "00", zone, "04", "21"]
//console.log(command);
wsSendBinary(command, false);
zones[i].powerOn = false;
} else {
command = ["02", "00", zone, "04", "20"]
//console.log(command);
wsSendBinary(command, false);
zones[i].powerOn = true;
}
updateGUI(i);
updateData();
}
function partyMode(i) {
$('#partyBtn').addClass("active")
if (i >= zones.length) {
$('#partyBtn').removeClass("active")
return;
}
console.log(i)
if (systems[systemIdx].zones[i].enabled && systems[systemIdx].zones[i].dndOn == false) {
var zone = i;
zone = zoneLookup(zone);
var partySource = partySourceLookup(systems[systemIdx].zones[Gzone].source);
command = ["02", "00", zone, "04", partySource]
//console.log(command);
wsSendBinary(command, false);
setTimeout(function(y) {
partyMode(i + 1)
}, 200);
}
}
function zonePowerOn(zone) {
//var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "20"]
console.log(command);
wsSendBinary(command, false);
}
function zonePowerOff(zone) {
//var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "21"]
console.log(command);
wsSendBinary(command, false);
}
function zoneDNDOn() {
console.log()
var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "59"]
//console.log(command);
wsSendBinary(command, false);
}
function setZoneDNDOn(zone) {
console.log("setZoneDNDOn")
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "59"]
//console.log(command);
wsSendBinary(command, false);
}
function zoneDNDOff() {
var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "5A"]
//console.log(command);
wsSendBinary(command, false);
}
function setZoneDNDOff(zone) {
console.log("setZoneDNDOff")
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "5A"]
//console.log(command);
wsSendBinary(command, false);
}
function muteAllOn() {
console.log("Mute all zones")
checkNextForMuteAllOn(1);
}
function checkNextForMuteAllOn(i) {
if (i < systems[systemIdx].zones.length) {
if (systems[systemIdx].zones[i].powerOn == true) {
var zone = i;
zone = zoneLookup(zone);
console.log("mute zone " + i)
command = ["02", "00", zone, "04", "1E"]
console.log(command);
systems[systemIdx].zones[i].muteOn = true;
wsSendBinary(command, false);
updateData();
}
setTimeout(function(y) {
checkNextForMuteAllOn(i + 1)
}, 50);
}
}
function muteAllOff() {
console.log("UNMute all zones")
checkNextForUnMuteAllOn(1);
}
function checkNextForUnMuteAllOn(i) {
if (i < systems[systemIdx].zones.length) {
if (systems[systemIdx].zones[i].powerOn == true) {
var zone = i;
zone = zoneLookup(zone);
console.log("mute zone " + i)
command = ["02", "00", zone, "04", "1F"]
console.log(command);
systems[systemIdx].zones[i].muteOn = false;
wsSendBinary(command, false);
updateData();
}
setTimeout(function(y) {
checkNextForUnMuteAllOn(i + 1)
}, 50);
}
}
function groupMuteOn() {
console.log("Mute all group zones")
checkNextForGroupMuteAllOn(0);
}
function checkNextForGroupMuteAllOn(i) {
if (i < groups[Ggroup].zones.length) {
console.log(i);
var zone = groups[Ggroup].zones[i];
if (zones[zone].powerOn == true) {
zone = zoneLookup(zone);
console.log("mute zone " + zone)
command = ["02", "00", zone, "04", "1E"]
console.log(command);
zones[groups[Ggroup].zones[i]].muteOn = true;
wsSendBinary(command, false);
updateData();
}
setTimeout(function(y) {
checkNextForGroupMuteAllOn(i + 1)
}, 50);
}
}
function groupMuteOff() {
console.log("UnMute all group zones")
checkNextForGroupMuteAllOff(0);
}
function checkNextForGroupMuteAllOff(i) {
if (i < groups[Ggroup].zones.length) {
console.log(i);
var zone = groups[Ggroup].zones[i];
if (zones[zone].powerOn == true) {
zone = zoneLookup(zone);
console.log("mute zone " + zone)
command = ["02", "00", zone, "04", "1F"]
console.log(command);
zones[groups[Ggroup].zones[i]].muteOn = false;
wsSendBinary(command, false);
updateData();
}
setTimeout(function(y) {
checkNextForGroupMuteAllOff(i + 1)
}, 50);
}
}
function resetSourceName(source) {
var name = "Source " + source
source = sourceCommandLookupForReset(source);
var zone = "00";
var command = ["02", "00", zone, "07", source]
for (var n = 0, l = name.length; n < l; n++) {
var hex = Number(name.charCodeAt(n)).toString(16);
hex = hex.toUpperCase();
command.push(hex);
}
//see how many spaces we need to add 00 for
var extraSpaces = 10 - name.length;
for (i = 0; i < extraSpaces; i++) {
command.push("00")
}
command.push("00");
console.log("rename source reset to: ", name, command, source)
console.log(command);
wsSendBinary(command, false);
}
function resetZoneName(zone) {
var name = "Zone " + zone;
zone = zoneLookup(zone);
console.log("Name zone " + zone + " to " + name)
//var hexName = ascii_to_hexa(name);
var command = ["02", "00", zone, "06", "00"]
for (var n = 0, l = name.length; n < l; n++) {
var hex = Number(name.charCodeAt(n)).toString(16);
hex = hex.toUpperCase();
command.push(hex);
}
//see how many spaces we need to add 00 for
var extraSpaces = 10 - name.length;
for (i = 0; i < extraSpaces; i++) {
command.push("00")
}
command.push("00")
console.log(command, command.length);
wsSendBinary(command, false);
}
function resetZoneAudio(zone) {
zone = zoneLookup(zone);
command = ["02", "00", zone, "1E", "00"]
//console.log(command);
wsSendBinary(command, false);
}
function mp3PlayPause() {
console.log("mp3PlayPause")
command = ["02", "00", "00", "04", "0B"]
//console.log(command);
wsSendBinary(command, false);
}
function mp3Back() {
command = ["02", "00", "00", "04", "0C"]
//console.log(command);
wsSendBinary(command, false);
}
function mp3Next() {
command = ["02", "00", "00", "04", "0A"]
//console.log(command);
wsSendBinary(command, false);
}
function mp3Repeat() {
var src = $('#mp3RepeatImg').attr("src");
console.log(src);
if (src == "images/row.png") {
mp3RepeatOn();
} else {
mp3RepeatOff();
}
}
function mp3Stop() {
command = ["02", "00", "00", "04", "0D"]
//console.log(command);
wsSendBinary(command, false);
}
function mp3RepeatOn() {
command = ["02", "00", "00", "01", "FF"]
//console.log(command);
$('#mp3RepeatImg').attr("src", "images/rowActive.png")
wsSendBinary(command, false);
}
function mp3RepeatOff() {
command = ["02", "00", "00", "01", "00"]
//console.log(command);
$('#mp3RepeatImg').attr("src", "images/row.png")
wsSendBinary(command, false);
}
function zoneMuteOn(zone) {
console.log("zoneMuteOn")
//var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "1E"]
//console.log(command);
wsSendBinary(command, false);
}
function zoneMuteOff() {
console.log("zoneMuteOff")
var zone = Gzone;
zone = zoneLookup(zone);
command = ["02", "00", zone, "04", "1F"]
//console.log(command);
wsSendBinary(command, false);
}
function zoneSetVolume(zone) {
console.log("zoneSetVolume")
if (zones[zone].powerOn == false) {
zonePowerOn(zone);
}
var zoneOrg = zone;
zone = zoneLookup(zone);
var volume = volumeCommandLookup(zones[zoneOrg].vol);
command = ["02", "00", zone, "15", volume]
console.log(command);
wsSendBinary(command, false);
}
function setVolumeForZone(zone, vol) {
if (zones[zone].powerOn == false) {
zonePowerOn(zone);
}
var zoneOrg = zone;
zone = zoneLookup(zone);
var volume = volumeCommandLookup(vol);
command = ["02", "00", zone, "15", volume]
console.log(command);
zones[zoneOrg].vol = vol;
updateGUI(zoneOrg);
updateData();
wsSendBinary(command, false);
}
//setTimeout(testSource, 10 * 1000);
function testSource() {
console.log("testSource");
command = ["02", "00", "01", "04", "10"]
wsSendBinary(command, false);
}
function setSourceForZone(zone, source) {
console.log(zone, source);
var zoneOrg = zone;
zone = zone * 1;
zone = "0" + zone;
//source = source - 1;
//zone = zoneLookup(zone);
var sourceFormatted = sourceCommandLookup(source);
command = ["02", "00", zone, "04", sourceFormatted]
console.log(command);
console.log("---" + source + '--- ')
zones[zoneOrg].source = source;
updateData();
updateGUI(zoneOrg);
wsSendBinary(command, false);
}
function volumeCommandLookup(volume) {
volume = volume * 1 - 60;
console.log("volumeCommandLookup " + volume);
switch (volume) {
case 0:
return "00";
break;
case -1:
return "FF";
break;
case -2:
return "FE";
break;
case -3:
return "FD";
break;
case -4:
return "FC";
break;
case -5:
return "FB";
break;
case -6:
return "FA";
break;
case -7:
return "F9";
break;
case -8:
return "F8";
break;
case -9:
return "F7";
break;
case -10:
return "F6";
break;
case -11:
return "F5";
break;
case -12:
return "F4";
break;
case -13:
return "F3";
break;
case -14:
return "F2";
break;
case -15:
return "F1";
break;
case -16:
return "F0";
break;
case -17:
return "EF";
break;
case -18:
return "EE";
break;
case -19:
return "ED";
break;
case -20:
return "EC";
break;
case -21:
return "EB";
break;
case -22:
return "EA";
break;
case -23:
return "E9";
break;
case -24:
return "E8";
break;
case -25:
return "E7";
break;
case -26:
return "E6";
break;
case -27:
return "E5";
break;
case -28:
return "E4";
break;
case -29:
return "E3";
break;
case -30:
return "E2";
break;
case -31:
return "E1";
break;
case -32:
return "E0";
break;
case -33:
return "DF";
break;
case -34:
return "DE";
break;
case -35:
return "DD";
break;
case -36:
return "DC";
break;
case -37:
return "DB";
break;
case -38:
return "DA";
break;
case -39:
return "D9";
break;
case -40:
return "D8";
break;
case -41:
return "D7";
break;
case -42:
return "D6";
break;
case -43:
return "D5";
break;
case -44:
return "D4";
break;
case -45:
return "D3";
break;
case -46:
return "D2";
break;
case -47:
return "D1";
break;
case -48:
return "D0";
break;
case -49:
return "CF";
break;
case -50:
return "CE";
break;
case -51:
return "CD";
break;
case -52:
return "CC";
break;
case -53:
return "CB";
break;
case -54:
return "CA";
break;
case -55:
return "49";
break;
case -56:
return "C8";
break;
case -57:
return "C7";
break;
case -58:
return "C6";
break;
case -59:
return "C5";
break;
case -60:
return "C4";
break;
case -61:
return "C3";
break;
}
}
function sourceCommandLookup(source) {
console.log(source);
source = source * 1;
switch (source) {
case 1:
return "03";
break;
case 2:
return "04";
break;
case 3:
return "05";
break;
case 4:
return "06";
break;
case 5:
return "07";
break;
case 6:
return "08";
break;
}
}
function zoneLookup(zone) {
console.log(zone);
zone = zone * 1;
switch (zone) {
case 1:
return "01";
break;
case 2:
return "02";
break;
case 3:
return "03";
break;
case 4:
return "04";
break;
case 5:
return "05";
break;
case 6:
return "06";
break;
case 7:
return "07";
break;
case 8:
return "08";
break;
case 9:
return "09";
break;
case 10:
return "0A";
break;
case 11:
return "0B";
break;
case 12:
console.log("return 0C")
return "0C";
break;
}
}
function sourceCommandLookupForReset(source) {
//console.log(source);
source = source * 1 - 1;
switch (source) {
case 0:
return "01";
break;
case 1:
return "02";
break;
case 2:
return "03";
break;
case 3:
return '04';
break;
case 4:
return '05';
break;
case 5:
return "06";
break;
case 6:
return "07";
break;
case 7:
return "08";
break;
case 8:
return "09";
break;
case 9:
return "0A";
break;
case 10:
return "0B";
break;
case 11:
return "0C";
break;
case 12:
return "0D";
break;
case 13:
return "0E";
break;
case 14:
return "0F";
break;
case 15:
return "10";
break;
case 16:
return "11";
break;
case 17:
return "12";
break;
case 18:
return "13";
break;
case 19:
return "14";
break;
}
}
function setSourceForZone(zone, source) {
console.log(zone, source);
var zoneOrg = zone;
zone = zoneLookup(zone);;
var sourceFormatted = sourceCommandLookup(source);
command = ["02", "00", zone, "04", sourceFormatted]
console.log(command);
console.log("---" + source + '--- ')
zones[zoneOrg].source = source;
updateData();
updateGUI(zoneOrg);
wsSendBinary(command, false);
}
function volumeCommandLookup(volume) {
volume = volume * 1 - 60;
console.log("volumeCommandLookup " + volume);
switch (volume) {
case 0:
return "00";
break;
case -1:
return "FF";
break;
case -2:
return "FE";
break;
case -3:
return "FD";
break;
case -4:
return "FC";
break;
case -5:
return "FB";
break;
case -6:
return "FA";
break;
case -7:
return "F9";
break;
case -8:
return "F8";
break;
case -9:
return "F7";
break;
case -10:
return "F6";
break;
case -11:
return "F5";
break;
case -12:
return "F4";
break;
case -13:
return "F3";
break;
case -14:
return "F2";
break;
case -15:
return "F1";
break;
case -16:
return "F0";
break;
case -17:
return "EF";
break;
case -18:
return "EE";
break;
case -19:
return "ED";
break;
case -20:
return "EC";
break;
case -21:
return "EB";
break;
case -22:
return "EA";
break;
case -23:
return "E9";
break;
case -24:
return "E8";
break;
case -25:
return "E7";
break;
case -26:
return "E6";
break;
case -27:
return "E5";
break;
case -28:
return "E4";
break;
case -29:
return "E3";
break;
case -30:
return "E2";
break;
case -31:
return "E1";
break;
case -32:
return "E0";
break;
case -33:
return "DF";
break;
case -34:
return "DE";
break;
case -35:
return "DD";
break;
case -36:
return "DC";
break;
case -37:
return "DB";
break;
case -38:
return "DA";
break;
case -39:
return "D9";
break;
case -40:
return "D8";
break;
case -41:
return "D7";
break;
case -42:
return "D6";
break;
case -43:
return "D5";
break;
case -44:
return "D4";
break;
case -45:
return "D3";
break;
case -46:
return "D2";
break;
case -47:
return "D1";
break;
case -48:
return "D0";
break;
case -49:
return "CF";
break;
case -50:
return "CE";
break;
case -51:
return "CD";
break;
case -52:
return "CC";
break;
case -53:
return "CB";
break;
case -54:
return "CA";
break;
case -55:
return "49";
break;
case -56:
return "C8";
break;
case -57:
return "C7";
break;
case -58:
return "C6";
break;
case -59:
return "C5";
break;
case -60:
return "C4";
break;
case -61:
return "C3";
break;
}
}
function sourceCommandLookupOLD(source) {
//console.log(source);
source = source * 1 - 1;
switch (source) {
case 0:
return "01";
break;
case 1:
return "02";
break;
case 2:
return "03";
break;
case 3:
return "04";
break;
case 4:
return "05";
break;
case 5:
return "06";
break;
case 6:
return "07";
break;
case 7:
return "08";
break;
case 8:
return "09";
break;
case 9:
return "0A";
break;
case 10:
return "0B";
break;
case 11:
return "0C";
break;
case 12:
return "0D";
break;
case 13:
return "0E";
break;
case 14:
return "0F";
break;
case 15:
return "10";
break;
case 16:
return "11";
break;
case 17:
return "12";
break;
}
}
function partySourceLookup(source) {
//console.log(source);
source = source * 1;
switch (source) {
case 1:
return "36";
break;
case 2:
return "37";
break;
case 3:
return "38";
break;
case 4:
return "39";
break;
case 5:
return "3A";
break;
case 6:
return "3B";
break;
case 7:
return "3C";
break;
case 8:
return "3D";
break;
case 9:
return "3E";
break;
case 10:
return "3F";
break;
case 11:
return "40";
break;
case 12:
return "41";
break;
case 13:
return "69";
break;
case 14:
return "6A";
break;
case 15:
return "6B";
break;
case 16:
return "6C";
break;
case 17:
return "6D";
break;
case 18:
return "6E";
break;
}
}
function changeZoneName(name) {
var zone = Gzone;
zone = zoneLookup(zone);
console.log("Name zone " + zone + " to " + name)
//var hexName = ascii_to_hexa(name);
var command = ["02", "00", zone, "06", "00"]
for (var n = 0, l = name.length; n < l; n++) {
var hex = Number(name.charCodeAt(n)).toString(16);
hex = hex.toUpperCase();
command.push(hex);
}
//see how many spaces we need to add 00 for
var extraSpaces = 10 - name.length;
for (i = 0; i < extraSpaces; i++) {
command.push("00")
}
command.push("00")
console.log(command, command.length);
wsSendBinary(command, false);
}
function changeSourceName(name, source) {
var zone = Gzone;
zone = zoneLookup(zone);
source = sourceCommandLookup(source);
//var hexName = ascii_to_hexa(name);
var command = ["02", "00", zone, "07", source]
for (var n = 0, l = name.length; n < l; n++) {
var hex = Number(name.charCodeAt(n)).toString(16);
hex = hex.toUpperCase();
command.push(hex);
}
//see how many spaces we need to add 00 for
var extraSpaces = 10 - name.length;
for (i = 0; i < extraSpaces; i++) {
command.push("00")
}
command.push("00")
console.log(command, command.length);
wsSendBinary(command, false);
}
function ascii_to_hexa(str) {
var arr1 = [];
for (var n = 0, l = str.length; n < l; n++) {
var hex = Number(str.charCodeAt(n)).toString(16);
arr1.push(hex);
}
console.log(arr1);
return arr1;
}
//console.log(ascii_to_hexa('Office1234'));
function zoneSetBass(bass) {
if (!Gzone || !zones) {
return;
}
var zone = Gzone;
zone = zoneLookup(zone);
zones[Gzone].bass = bass;
var bass = bassCommandLookup(zones[Gzone].bass);
command = ["02", "00", zone, "18", bass]
//console.log(command);
wsSendBinary(command, false);
}
function zoneResetBass(zone, bass) {
zone = zoneLookup(zone);
var bass2 = bassCommandLookup(bass);
command = ["02", "00", zone, "18", bass2]
//console.log(command);
wsSendBinary(command, false);
}
function zoneSetTreble(treble) {
if (!Gzone || !zones) {
return;
}
var zone = Gzone;
zone = zoneLookup(zone);
zones[Gzone].treble = treble;
var treble = bassCommandLookup(zones[Gzone].treble);
command = ["02", "00", zone, "17", treble]
//console.log(command);
wsSendBinary(command, false);
}
function zoneResetTreble(zone, treble) {
zone = zoneLookup(zone);
var treble2 = bassCommandLookup(treble);
command = ["02", "00", zone, "17", treble2]
//console.log(command);
wsSendBinary(command, false);
}
function bassCommandLookup(bass) {
//0 is -10, 10 is 0, 20 is 10
bass = bass * 1;
console.log(bass);
switch (bass) {
case -10:
return "F6";
break;
case -9:
return "F7";
break;
case -8:
return "F8";
break;
case -7:
return "F9";
break;
case -6:
return "FA";
break;
case -5:
return "FB";
break;
case -4:
return "FC";
break;
case -3:
return "FD";
break;
case -2:
return "FE";
break;
case -1:
return "FF";
break;
case 0:
return "00";
break;
case 1:
return "01";
break;
case 2:
return "02";
break;
case 3:
return "03";
break;
case 4:
return "04";
break;
case 5:
return "05";
break;
case 6:
return "06";
break;
case 7:
return "07";
break;
case 8:
return "08";
break;
case 9:
return "09";
break;
case 10:
return "0A";
break;
}
}
function zoneSetBalance(balance) {
if (!Gzone || !zones) {
return;
}
var zone = Gzone;
zone = zoneLookup(zone);
zones[Gzone].balance = balance;
var balance = balanceCommandLookup(zones[Gzone].balance);
command = ["02", "00", zone, "16", balance]
//console.log(command);
wsSendBinary(command, false);
}
function zoneResetBalance(zone, balance) {
zone = zoneLookup(zone);
var balance2 = balanceCommandLookup(balance);
command = ["02", "00", zone, "16", balance2]
//console.log(command);
wsSendBinary(command, false);
}
function balanceCommandLookup(balance) {
//0 is -10, 10 is 0, 20 is 10
balance = balance * 1;
console.log(balance);
switch (balance) {
case 18:
return "12";
break;
case 17:
return "11";
break;
case 16:
return "10";
break;
case 15:
return "0F";
break;
case 14:
return "0E";
break;
case 13:
return "0D";
break;
case 12:
return "0C";
break;
case 11:
return "0B";
break;
case 10:
return "0A";
break;
case 9:
return "09";
break;
case 8:
return "08";
break;
case 7:
return "07";
break;
case 6:
return "06";
break;
case 5:
return "05";
break;
case 4:
return "04";
break;
case 3:
return "03";
break;
case 2:
return "02";
break;
case 1:
return "01";
break;
case 0:
return "00";
break;
case -1:
return "FF";
break;
case -2:
return "FE";
break;
case -3:
return "FD";
break;
case -4:
return "FC";
break;
case -5:
return "FB";
break;
case -6:
return "FA";
break;
case -7:
return "F9";
break;
case -8:
return "F8";
break;
case -9:
return "F7";
break;
case -10:
return "F6";
break;
case -11:
return "F5";
break;
case -12:
return "F4";
break;
case -13:
return "F3";
break;
case -14:
return "F2";
break;
case -15:
return "F1";
break;
case -16:
return "F0";
break;
case -17:
return "EF";
break;
case -18:
return "EE";
break;
}
}