@@ -41,31 +41,26 @@ screen = {
4141 data = {},
4242 batchId = 0 ,
4343 sequence = 0 ,
44+ redraws = 2 ,
4445 reset = function ()
45- screen .buffer = {}
4646 screen .data = {}
4747 screen .batchId = 0
4848 screen .sequence = 0
4949 end ,
5050 draw = function ()
51- if (screen .buffer ~= nil and screen .config ~= nil and # screen .buffer > 0 ) then
52- screen .clear ()
53- for char = 1 , # screen .buffer do
54- if (screen .buffer [char ] ~= 32 ) then -- skip spaces to avoid CPU spikes
55- c = string.char (screen .buffer [char ])
56- row = math.ceil (char / screen .config .cols )
57- col = char - ((row - 1 ) * screen .config .cols )
58- xPos = ((col - 1 ) * screen .config .pixelsPerChar ) + screen .config .xIndent + 1
59- yPos = ((row - 1 ) * screen .config .pixelsPerRow ) + screen .config .yOffset + 1
60- lcd .drawText (xPos , yPos , c , screen .config .textSize )
61- end
51+ lcd .clear ()
52+ lcd .drawText (screen .config .refresh .left , screen .config .refresh .top , screen .config .refresh .text , screen .config .textSize )
53+ for char = 1 , # screen .buffer do
54+ if (screen .buffer [char ] ~= 32 ) then -- skip spaces to avoid CPU spikes
55+ local c = string.char (screen .buffer [char ])
56+ local row = math.ceil (char / screen .config .cols )
57+ local col = char - ((row - 1 ) * screen .config .cols )
58+ local xPos = ((col - 1 ) * screen .config .pixelsPerChar ) + screen .config .xIndent + 1
59+ local yPos = ((row - 1 ) * screen .config .pixelsPerRow ) + screen .config .yOffset + 1
60+ lcd .drawText (xPos , yPos , c , screen .config .textSize )
6261 end
6362 end
6463 end ,
65- clear = function ()
66- lcd .clear ()
67- lcd .drawText (screen .config .refresh .left , screen .config .refresh .top , screen .config .refresh .text , screen .config .textSize )
68- end
6964}
7065
7166cms = {
@@ -91,27 +86,23 @@ cms = {
9186 update = function ()
9287 local command , data = protocol .cms .poll ()
9388 if (command == " update" ) then
94- local firstChunk = bit32.band (data [CONST .offset .meta ], CONST .bitmask .firstChunk )
95- local lastChunk = bit32.band (data [CONST .offset .meta ], CONST .bitmask .lastChunk )
89+ local firstChunk = bit32.btest (data [CONST .offset .meta ], CONST .bitmask .firstChunk )
90+ local lastChunk = bit32.btest (data [CONST .offset .meta ], CONST .bitmask .lastChunk )
9691 local batchId = bit32.band (data [CONST .offset .meta ], CONST .bitmask .batchId )
97- local sequence = data [CONST .offset .sequence ]
98- local frameData = {}
99- for i = CONST .offset .data , # data do
100- frameData [# frameData + 1 ] = data [i ]
101- end
102- if (firstChunk ~= 0 ) then
92+ local sequence = data [CONST .offset .sequence ]
93+ if firstChunk then
10394 screen .reset ()
10495 screen .batchId = batchId
10596 screen .sequence = 0
10697 end
10798 if (screen .batchId == batchId ) and (screen .sequence == sequence ) then
10899 screen .sequence = sequence + 1
109- for i = 1 , # frameData do
110- screen .data [# screen .data + 1 ] = frameData [i ]
100+ for i = CONST . offset . data , # data do
101+ screen .data [# screen .data + 1 ] = data [i ]
111102 end
112- if ( lastChunk ~= 0 ) then
103+ if lastChunk then
113104 screen .buffer = cRleDecode (screen .data )
114- screen .draw ()
105+ screen .redraws = 2
115106 screen .reset ()
116107 cms .synced = true
117108 end
@@ -122,5 +113,9 @@ cms = {
122113 elseif (command == " clear" ) then
123114 screen .reset ()
124115 end
116+ if screen .redraws > 0 then
117+ screen .draw ()
118+ screen .redraws = screen .redraws - 1
119+ end
125120 end
126121}
0 commit comments