mirror of
https://github.com/Ylianst/MeshCommander
synced 2025-12-06 06:03:20 +00:00
Tested and fixed KVM improvements in AMT 16.
This commit is contained in:
@@ -177,8 +177,9 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
if (obj.bpp == 1) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(7) + ShortToStr(7) + ShortToStr(3) + String.fromCharCode(5, 2, 0, 0, 0, 0)); // Setup 8 bit color RGB332
|
||||
} else {
|
||||
// Gray scale modes
|
||||
if (obj.bpp == 2) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(255) + ShortToStr(0) + ShortToStr(0) + String.fromCharCode(0, 0, 0, 0, 0, 0)); // Setup 8 bit black and white RGB800
|
||||
if (obj.bpp == 1) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(15) + ShortToStr(0) + ShortToStr(0) + String.fromCharCode(0, 0, 0, 0, 0, 0)); // Setup 4 bit black and white RGB400
|
||||
if (obj.bpp == 2) { obj.bpp = 1; }
|
||||
if (obj.bpp == 1) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(255) + ShortToStr(0) + ShortToStr(0) + String.fromCharCode(0, 0, 0, 0, 0, 0)); // Setup 8 bit black and white RGB800
|
||||
//if (obj.bpp == 1) obj.send(String.fromCharCode(0, 0, 0, 0, 8, 8, 0, 1) + ShortToStr(15) + ShortToStr(0) + ShortToStr(0) + String.fromCharCode(0, 0, 0, 0, 0, 0)); // Setup 4 bit black and white RGB400
|
||||
}
|
||||
|
||||
obj.state = 4;
|
||||
@@ -190,8 +191,8 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
// ###END###{DesktopFocus}
|
||||
// ###BEGIN###{DesktopInband}
|
||||
if (obj.kvmExtChanged != null) {
|
||||
obj.sendKvmExtCmd(2, (obj.decimation === true) ? 1 : 0); // Set Decimation State
|
||||
obj.sendKvmExtCmd(4, (obj.useZLib === true) ? 1 : 0); // Set ZLib state
|
||||
obj.sendKvmExtCmd(2, (obj.decimation === true) ? 3 : 2); // Set Decimation State (1 = Disable, 2 = Auto, 3 = Always)
|
||||
obj.sendKvmExtCmd(4, (obj.useZLib === true) ? 1 : 0); // Set ZLib state (0 = Disabled, 1 = Enabled)
|
||||
}
|
||||
// ###END###{DesktopInband}
|
||||
_SendRefresh();
|
||||
@@ -258,7 +259,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
obj.send(String.fromCharCode(3, 0, 0, 0, 0, 0) + ShortToStr(obj.width) + ShortToStr(obj.height)); // FramebufferUpdateRequest
|
||||
cmdsize = 12;
|
||||
if (obj.onScreenSizeChange != null) { obj.onScreenSizeChange(obj, obj.ScreenWidth, obj.ScreenHeight); }
|
||||
//console.log('New desktop width: ' + obj.width + ', height: ' + obj.height);
|
||||
//console.log('Desktop width: ' + obj.width + ', height: ' + obj.height);
|
||||
} else if (encoding == 0) {
|
||||
// RAW encoding
|
||||
var ptr = 12, cs = 12 + (s * obj.bpp);
|
||||
@@ -324,8 +325,13 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
}
|
||||
else if (subencoding == 1) {
|
||||
// Solid color tile
|
||||
if (obj.graymode) {
|
||||
v = data[ptr++];
|
||||
obj.canvas.fillStyle = 'rgb(' + v + ',' + v + ',' + v + ')';
|
||||
} else {
|
||||
v = data[ptr++] + ((obj.bpp == 2) ? (data[ptr++] << 8) : 0);
|
||||
obj.canvas.fillStyle = 'rgb(' + ((obj.bpp == 1) ? ((v & 224) + ',' + ((v & 28) << 3) + ',' + _fixColor((v & 3) << 6)) : (((v >> 8) & 248) + ',' + ((v >> 3) & 252) + ',' + ((v & 31) << 3))) + ')';
|
||||
}
|
||||
|
||||
// ###BEGIN###{DesktopRotation}
|
||||
var xx = _rotX(x, y);
|
||||
@@ -463,10 +469,14 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
}
|
||||
// ###END###{DesktopRotation}
|
||||
|
||||
if (obj.graymode) {
|
||||
obj.spare.data[pp] = obj.spare.data[pp + 1] = obj.spare.data[pp + 2] = v;
|
||||
} else {
|
||||
obj.spare.data[pp] = v & 224;
|
||||
obj.spare.data[pp + 1] = (v & 28) << 3;
|
||||
obj.spare.data[pp + 2] = _fixColor((v & 3) << 6);
|
||||
}
|
||||
}
|
||||
|
||||
// Set 16bit color RGB565
|
||||
function _setPixel16(v, p) {
|
||||
@@ -487,9 +497,14 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
|
||||
// Set a run of 8bit color RGB332
|
||||
function _setPixel8run(v, p, run) {
|
||||
if (obj.graymode) {
|
||||
var pp = (p << 2);
|
||||
while (--run >= 0) { obj.spare.data[pp] = obj.spare.data[pp + 1] = obj.spare.data[pp + 2] = v; pp += 4; }
|
||||
} else {
|
||||
var pp = (p << 2), r = (v & 224), g = ((v & 28) << 3), b = (_fixColor((v & 3) << 6));
|
||||
while (--run >= 0) { obj.spare.data[pp] = r; obj.spare.data[pp + 1] = g; obj.spare.data[pp + 2] = b; pp += 4; }
|
||||
}
|
||||
}
|
||||
|
||||
// Set a run of 16bit color RGB565
|
||||
function _setPixel16run(v, p, run) {
|
||||
@@ -778,14 +793,14 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
if (obj.onKvmData != null) {
|
||||
var d = arrToStr(new Uint8Array(acc.buffer.slice(8, len)));
|
||||
if ((d.length >= 16) && (d.substring(0, 15) == '\0KvmDataChannel')) {
|
||||
if (obj.kvmDataSupported == false) { obj.kvmDataSupported = true; console.log('KVM Data Channel Supported.'); }
|
||||
if (obj.kvmDataSupported == false) { obj.kvmDataSupported = true; /*console.log('KVM Data Channel Supported.');*/ }
|
||||
if (((obj.onKvmDataAck == -1) && (d.length == 16)) || (d.charCodeAt(15) != 0)) { obj.onKvmDataAck = true; }
|
||||
if (urlvars && urlvars['kvmdatatrace']) { console.log('KVM-DataChannel-Recv(' + (d.length - 16) + '): ' + d.substring(16)); }
|
||||
if (d.length >= 16) { obj.onKvmData(d.substring(16)); } // Event the data and ack
|
||||
if ((obj.onKvmDataAck == true) && (obj.onKvmDataPending.length > 0)) { obj.sendKvmData(obj.onKvmDataPending.shift()); } // Send pending data
|
||||
} else if ((d.length >= 13) && (d.substring(0, 11) == '\0KvmExtCmd\0')) {
|
||||
var cmd = d.charCodeAt(11), val = d.charCodeAt(12);
|
||||
console.log('Received KvmExtCmd', cmd, val);
|
||||
//console.log('Received KvmExtCmd', cmd, val);
|
||||
if (cmd == 1) { obj.kvmExt.decimation = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(1, val); } }
|
||||
if (cmd == 2) { obj.sendKvmExtCmd(1); }
|
||||
if (cmd == 3) { obj.kvmExt.compression = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(3, val); } }
|
||||
@@ -801,7 +816,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
||||
|
||||
// ###BEGIN###{DesktopInband}
|
||||
obj.sendKvmExtCmd = function (cmd, val) {
|
||||
console.log('Sending KvmExtCmd', cmd, val);
|
||||
//console.log('Sending KvmExtCmd', cmd, val);
|
||||
var x = '\0KvmExtCmd\0' + String.fromCharCode(cmd) + (val != null ? String.fromCharCode(val) : '');
|
||||
obj.send(String.fromCharCode(6, 0, 0, 0) + IntToStr(x.length) + x);
|
||||
}
|
||||
|
||||
75
index.html
75
index.html
@@ -1365,21 +1365,15 @@
|
||||
<br>
|
||||
<div style='height:26px'>
|
||||
<select id="idx_d7desktopmode" style="float:right;width:200px">
|
||||
<!-- Flags: 1 = RAW, 2 = 16bit, 4 = Gray, 8 = ZLib -->
|
||||
<!-- ###BEGIN###{DesktopInband} -->
|
||||
<option id="d7exm1" value="5">RLE4G, Gray (Fast)</option>
|
||||
<option id="d7exm2" value="7">RLE8G, Gray</option>
|
||||
<!-- ###END###{DesktopInband} -->
|
||||
<!-- Flags: 1 = RLE, 2 = 16bit, 4 = Gray, 8 = ZLib -->
|
||||
<option id="d7exm1" value="5">RLE8G, Gray</option>
|
||||
<option value="1">RLE8, Color</option>
|
||||
<option value="3">RLE16, Color</option>
|
||||
<!-- ###BEGIN###{DesktopInband} -->
|
||||
<option id="d7exm3" value="13">ZRLE8G, Compressed Gray</option>
|
||||
<option id="d7exm4" value="15">ZRLE16G, Compressed Gray</option>
|
||||
<option id="d7exm5" value="9">ZRLE8, Compressed Color</option>
|
||||
<option id="d7exm6" value="11">ZRLE16, Compressed Color</option>
|
||||
<!-- ###END###{DesktopInband} -->
|
||||
<option id="d7exm2" value="13">ZRLE8G, Compressed Gray</option>
|
||||
<option id="d7exm3" value="9">ZRLE8, Compressed Color</option>
|
||||
<option id="d7exm4" value="11">ZRLE16, Compressed Color</option>
|
||||
<option value="0">RAW8, Color</option>
|
||||
<option value="2">RAW16, Color (Slow)</option>
|
||||
<option value="2">RAW16, Color</option>
|
||||
</select>
|
||||
<div>Image Encoding</div>
|
||||
</div>
|
||||
@@ -1387,8 +1381,8 @@
|
||||
<div style="float:right;border:1px solid #666;width:200px;height:80px;overflow-y:scroll;background-color:white">
|
||||
<!-- ###BEGIN###{DesktopFocus} -->
|
||||
<label><input type="checkbox" id='d7showfocus'>Show Focus Tool</label><br>
|
||||
<span id="d7decimationspan"><label><input type="checkbox" id='d7decimation'>Prefer Downscale</label><br></span>
|
||||
<!-- ###END###{DesktopFocus} -->
|
||||
<span id="d7decimationspan"><label><input type="checkbox" id='d7decimation'>Prefer Downscale</label><br></span>
|
||||
<label><input type="checkbox" id='d7showcursor'>Show Local Mouse Cursor</label><br>
|
||||
<label><input type="checkbox" id='d7showcad'>Show Ctrl-Alt-Del</label><br>
|
||||
<label><input type="checkbox" id='d7limitFrameRate'>Limit Frame Rate</label><br>
|
||||
@@ -1625,7 +1619,7 @@
|
||||
<div id=d24dSerialOverLan><label><input type=checkbox id=d24SerialOverLan onchange=showAdvPowerDlgChange()>Serial-over-LAN</label><br></div>
|
||||
<div id=d24dSecureErase><label><input type=checkbox id=d24SecureErase onchange=showAdvPowerDlgChange()>Intel® Remote Secure Erase</label><br></div>
|
||||
<div id=d24dPlatformErase><label><input type=checkbox id=d24PlatformErase onchange=showAdvPowerDlgChange()>Remote Platform Erase</label><br></div>
|
||||
<div id=d24dFirmwareReset><label><input type=checkbox id=d24FirmwareReset onchange=showAdvPowerDlgChange()>Firmware Reset</label><br></div>
|
||||
<div id=d24dFirmwareReset><label><input type=checkbox id=d24FirmwareReset onchange=showAdvPowerDlgChange()>Clear Intel® ME Settings</label><br></div>
|
||||
</div>
|
||||
<div>Boot Settings</div>
|
||||
</div>
|
||||
@@ -5351,6 +5345,7 @@
|
||||
|
||||
if ((status != 400) && errcheck(status, stack)) return;
|
||||
amtsysstate = responses;
|
||||
applyDesktopSettings();
|
||||
updateSystemStatus();
|
||||
}
|
||||
|
||||
@@ -8362,11 +8357,15 @@
|
||||
// Encoding Flags: 1 = RLE, 2 = 16bit, 4 = Gray, 8 = ZLib, 16 = Decimation
|
||||
desktop.m.useRLE = ((desktopsettings.encflags & 1) != 0);
|
||||
desktop.m.bpp = (desktopsettings.encflags & 2) ? 2 : 1;
|
||||
// ###BEGIN###{DesktopInband}
|
||||
desktop.m.graymode = ((desktopsettings.encflags & 4) != 0);
|
||||
desktop.m.useZLib = ((desktopsettings.encflags & 8) != 0);
|
||||
desktop.m.decimation = desktopsettings.decimation;
|
||||
// ###END###{DesktopInband}
|
||||
if ((amtversion > 15) && (amtsysstate != null) && (amtsysstate['IPS_KVMRedirectionSettingData'] != null) && (amtsysstate['IPS_KVMRedirectionSettingData'].response)) {
|
||||
desktop.m.graymode = amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported'] && ((desktopsettings.encflags & 4) != 0);
|
||||
desktop.m.useZLib = amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported'] && ((desktopsettings.encflags & 8) != 0);
|
||||
desktop.m.decimation = amtsysstate['IPS_KVMRedirectionSettingData'].response['InitialDecimationModeForLowRes'] && desktopsettings.decimation;
|
||||
} else {
|
||||
desktop.m.graymode = false;
|
||||
desktop.m.useZLib = false;
|
||||
desktop.m.decimation = false;
|
||||
}
|
||||
desktop.m.showmouse = desktopsettings.showmouse;
|
||||
desktop.m.onScreenSizeChange = center;
|
||||
// ###BEGIN###{ComputerSelector}
|
||||
@@ -8593,8 +8592,8 @@
|
||||
x = ", Soft-KVM";
|
||||
} else {
|
||||
if (desktop.m && desktop.m.kvmExt) {
|
||||
if (desktop.m.kvmExt.decimation == 2) { x += ", Gray" }
|
||||
if (desktop.m.kvmExt.compression == 1) { x += ", ZLib" }
|
||||
//if (desktop.m.kvmExt.decimation == 2) { x += ", Downscaled" }
|
||||
if (desktop.m.kvmExt.compression == 1) { x += ", Compressed" }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8631,21 +8630,13 @@
|
||||
if (desktopsettings.showfocus == false) { desktop.m.focusmode = 0; idx_deskFocusBtn.value = "All Focus"; }
|
||||
// ###END###{DesktopFocus}
|
||||
desktop.m.frameRateDelay = (desktopsettings.limitFrameRate == true)?200:0;
|
||||
if (desktop.State != 0) { desktop.disconnectCode = 0; desktop.Stop(); setTimeout(connectDesktop, 50); }
|
||||
if (desktop.State != 0) { desktop.disconnectCode = 0; desktop.Stop(); setTimeout(connectDesktop, 800); }
|
||||
}
|
||||
|
||||
function applyDesktopSettings() {
|
||||
// ###BEGIN###{!DesktopInband}
|
||||
desktopsettings.encflags = desktopsettings.encflags & 3; // Remove gray & zlib flags (4 and 8), keep 1 & 2
|
||||
// ###END###{!DesktopInband}
|
||||
// ###BEGIN###{DesktopInband}
|
||||
if (amtversion < 15) { desktopsettings.encflags = desktopsettings.encflags & 3; } // Remove gray & zlib flags (4 and 8), keep 1 & 2
|
||||
// ###END###{DesktopInband}
|
||||
idx_d7desktopmode.value = desktopsettings.encflags;
|
||||
// ###BEGIN###{DesktopFocus}
|
||||
d7showfocus.checked = desktopsettings.showfocus;
|
||||
d7decimation.checked = desktopsettings.decimation;
|
||||
QV('d7decimationspan', (amtversion > 15) || (urlvars['kvmext'] != null))
|
||||
// ###END###{DesktopFocus}
|
||||
d7showcursor.checked = desktopsettings.showmouse;
|
||||
d7showcad.checked = desktopsettings.showcad;
|
||||
@@ -8655,13 +8646,25 @@
|
||||
if (desktopsettings.quality) { d7bitmapquality.value = desktopsettings.quality; }
|
||||
if (desktopsettings.scaling) { d7bitmapscaling.value = desktopsettings.scaling; }
|
||||
QV('d7softkvmsettings', amtversion >= 12);
|
||||
QV('d7exm1', (amtversion > 15) || urlvars['kvmext']);
|
||||
QV('d7exm2', (amtversion > 15) || urlvars['kvmext']);
|
||||
QV('d7exm3', (amtversion > 15) || urlvars['kvmext']);
|
||||
QV('d7exm4', (amtversion > 15) || urlvars['kvmext']);
|
||||
QV('d7exm5', (amtversion > 15) || urlvars['kvmext']);
|
||||
QV('d7exm6', (amtversion > 15) || urlvars['kvmext']);
|
||||
// ###END###{DesktopInband}
|
||||
var encflags = desktopsettings.encflags; // Flags: 1 = RLE, 2 = 16bit, 4 = Gray, 8 = ZLib
|
||||
if ((amtversion > 15) && (amtsysstate != null) && (amtsysstate['IPS_KVMRedirectionSettingData'] != null) && (amtsysstate['IPS_KVMRedirectionSettingData'].response)) {
|
||||
if (!amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported']) { encflags = encflags & 11; } // Remove grayscale
|
||||
if (!amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported']) { encflags = encflags & 7; } // Remove zlib
|
||||
QV('d7exm1', amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported']);
|
||||
QV('d7exm2', amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported'] && amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported']);
|
||||
QV('d7exm3', amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported']);
|
||||
QV('d7exm4', amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported']);
|
||||
QV('d7decimationspan', amtsysstate['IPS_KVMRedirectionSettingData'].response['InitialDecimationModeForLowRes'] > 0);
|
||||
} else {
|
||||
encflags = encflags & 3; // Remove gray & zlib flags (4 and 8), keep 1 & 2
|
||||
QV('d7exm1', false);
|
||||
QV('d7exm2', false);
|
||||
QV('d7exm3', false);
|
||||
QV('d7exm4', false);
|
||||
QV('d7decimationspan', false)
|
||||
}
|
||||
idx_d7desktopmode.value = encflags;
|
||||
// ###BEGIN###{DesktopFocus}
|
||||
QV('idx_deskFocusBtn', desktopsettings.showfocus);
|
||||
// ###END###{DesktopFocus}
|
||||
|
||||
Reference in New Issue
Block a user