Skip to content

Commit 7284e3b

Browse files
committed
Add support for variable size rect packets
1 parent 6037d59 commit 7284e3b

1 file changed

Lines changed: 37 additions & 7 deletions

File tree

js/parser.js

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ export class Parser {
1212
_buffer = new Uint8Array(512);
1313
_i = 0;
1414
_renderer;
15+
_r = 0; // Variable length rect packets requires storing the last colour used
16+
_g = 0;
17+
_b = 0;
1518

1619
constructor(renderer) {
1720
this._renderer = renderer;
@@ -20,16 +23,43 @@ export class Parser {
2023
_processFrame(frame) {
2124
switch (frame[0]) {
2225
case 0xfe:
23-
if (frame.length === 12) {
26+
// Packets can be missing size and/or colour info.
27+
// If colour is missing use the last rect colour values.
28+
if (frame.length >= 5 && frame.length <= 12) {
29+
let w = 1;
30+
let h = 1;
31+
switch(frame.length) {
32+
case 5: // No Size, no colour
33+
break;
34+
case 8: // No size, colour
35+
this._r = frame[9];
36+
this._g = frame[10];
37+
this._b = frame[11];
38+
break;
39+
case 9: // Size, no colour
40+
w = frame[5] + frame[6] * 256;
41+
h = frame[7] + frame[8] * 256;
42+
break;
43+
case 12: // Size, colour
44+
w = frame[5] + frame[6] * 256;
45+
h = frame[7] + frame[8] * 256;
46+
this._r = frame[9];
47+
this._g = frame[10];
48+
this._b = frame[11];
49+
break;
50+
default:
51+
console.log('Bad RECT frame');
52+
return;
53+
}
2454
this._renderer.drawRect(
2555
frame[1] + frame[2] * 256,
2656
frame[3] + frame[4] * 256,
27-
frame[5] + frame[6] * 256,
28-
frame[7] + frame[8] * 256,
29-
frame[9],
30-
frame[10],
31-
frame[11]);
32-
57+
w,
58+
h,
59+
this._r,
60+
this._g,
61+
this._b)
62+
break;
3363
} else {
3464
console.log('Bad RECT frame');
3565
}

0 commit comments

Comments
 (0)