Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rfb.js: Support Supermicro SSG-6028R-E1CR12L #1

Open
wants to merge 27 commits into
base: bmc-support
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
72698a4
added client side pixel format conversion support
jimdigriz Oct 11, 2014
987fe9d
added aten-ikvm support
jimdigriz Oct 11, 2014
34e7153
Rough initial implementation of ATEN AST2100 (0x59) support.
kelleyk Jan 14, 2016
1678dc2
Fix typo; rewrite outdated (incorrect) comment in IDCT routine.
kelleyk Jan 24, 2016
10e92b2
Grammar.
kelleyk Jan 24, 2016
488fdde
loosen detection to catch another X9
Jun 4, 2015
b5077cf
OpenVNC (for iDRAC) fix; send only server-supported encodings
alantwentyseven Jan 25, 2016
32560da
Replace heuristic for detection of ATEN iKVM servers.
kelleyk Jan 27, 2016
5d2ee2a
Tweak heuristic to cover odd (third case) X10/X11 iKVM servers.
kelleyk Jan 27, 2016
7b81505
Add video settings change callback to Ast2100Decoder for UI integration.
kelleyk Jan 29, 2016
7963c36
ui controls for ast2100 quality and subsampling mode; fix for menu focus
alantwentyseven Jan 29, 2016
2e589a6
aten 0x57 fixes for vnc_auto.html, with get-line controls to auto-set…
alantwentyseven Jan 31, 2016
f55d6e6
Refactor AST2100 UI code.
kelleyk Feb 9, 2016
a91401d
Tweak detection heuristic to catch iKVM servers that send zeroes afte…
kelleyk Apr 11, 2016
60030c8
removed Array.from usage to increase level of browser support; re-ena…
alantwentyseven Apr 13, 2016
5247ef1
Repair failing assertion in test case; disable incomplete test case.
kelleyk May 3, 2016
332198b
Resolve regression caused by browser compatibility patch.
kelleyk May 10, 2016
158b26b
Repair tests that were broken during the colorspace work because Phan…
kelleyk May 10, 2016
a44333d
Revert most of e87d596.
kelleyk May 11, 2016
ea09511
Add simple implementation of Array.from() and TypedArray.from() for P…
kelleyk May 11, 2016
77b2134
Fix global leak (present in upstream) by changing variable scope.
kelleyk May 11, 2016
c73505d
Modify test case for TightVNC to avoid triggering iKVM heuristic.
kelleyk May 11, 2016
8492923
Reintroduce conditional accidentally lost in rebase.
kelleyk May 14, 2016
6f86c21
Add AST2100 source files to list of inclusions in karma.conf.js.
kelleyk May 15, 2016
3028570
Update contributors section of README.
kelleyk May 15, 2016
63cc01f
restore UI element for token, lost from master during rebase
alantwentyseven May 21, 2016
0527382
rfb.js: Add hack to support new SuperMicro KVMs
Nov 3, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ use a WebSockets to TCP socket proxy. There is a python proxy included
* UI and Icons : Chris Gordon
* Original Logo : Michael Sersen
* tight encoding : Michael Tinglof (Mercuri.ca)

* pixel format conversion and ATEN iKVM "HARMON" (0x59) support : [Alexander Clouter](http://www.digriz.org.uk/)
* ATEN iKVM "AST2100" (0x57) support : [Kevin Kelley](https://github.com/kelleyk)

* Included libraries:
* as3crypto : Henri Torgemane (code.google.com/p/as3crypto)
* base64 : Martijn Pieters (Digital Creations 2), Samuel Sieb (sieb.net)
Expand Down
70 changes: 70 additions & 0 deletions ast2100-notes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
========================================================================================================================
========================================================================================================================

These are notes to accompany the ATEN iKVM "AST2100" (0x59) encoding implementation that this branch contains.

This implementation is the product of clean-room reverse engineering (that is, I am not and have never been subject to
nondisclosure agreements, nor have I had access to proprietary information, related to the subject matter of this
project).

(c) Copyright 2015-2016 Kevin Kelley <[email protected]>

========================================================================================================================
========================================================================================================================

- three major parts of implementation

- Text/console quality in 4:4:4 will ALSO be higher because that's the only mode where VQ blocks happen, and VQ blocks
give very high quality for blocks containing only a few colors.

- Currently unchecked, but we expect to get a "video settings changed" message from the Ast2100Decoder after the first
framebuffer update message that we send it following a settings change command.

========================================================================================================================
========================================================================================================================

- Much more extensive notes on the reverse engineering process, the iKVM protocol, the 0x59 video encoding, and the rest
of this adventure are forthcoming! There is also a Python implementation of many of these ideas that is
better-documented (and where clarity has not been sacrificed for performance). Stay tuned!

- Current problems / limitations (aka "TODOs")

- Especially on lower quality settings, you will notice that the picture is not as clear as what the ATEN iKVM client
will show you (using the same settings). I'm aware of this issue and intend to fix it.

- The code could stand to be much better-tested.

- The JavaScript files related to the AST2100 decoder are loaded even when noVNC does not use the decoder. It would
be nice to lazy-load them only when they are necessary.

- Lots of globals (functions, constants, etc.) are exposed. Some quick refactoring could tuck the majority of them
away to avoid cluttering the namespace.

- There is not any UI associated with sending messages to control power or to change picture mode/quality settings.

- Profiling

- For some reason, when I use blitImageData() (with the noVNC render queue disabled), that function shows up as the
"heaviest" function in Chrome's CPU profiler, even though the function is doing nothing other than evaluating a
branch condition or two and then calling _rgbxImageData(). When I call _rgbxImageData() directly, then
putImageData() (the Canvas method that's actually doing the heavy lifting) is correctly shown as the "heaviest"
function.

- Profiler oddness aside, putImageData() is overwhelmingly the dominant cost; it seems to occupy 75-85% of the CPU
time that noVNC uses. There are plenty of places that we could get small performance improvements in Ast2100Decoder
(and elsewhere in noVNC) but they seem unlikely to have a worthwhile impact, given that fact.

- About the implementation

- One large, remaining inefficiency is the several times that image data is copied around before being blitted. The
Ast2100Decoder class generates as output 256-element arrays (representing 64 pixels as (R,G,B,A) 4-tuples). This is
exactly what winds up in the ImageData object that is eventually passed to putImageData(); we could just have the
decoder write its output directly into those arrays if we wanted.

- Performance questions

- Is it faster to call putImageData() fewer times with larger buffers? We could collect groups of blocks (or even an
entire frame) and then call putImageData() once. (Of course, this would require redrawing unchanged regions every
frame, too.)

- Can we use WebGL instead of Canvas?
Loading