@@ -41,31 +41,26 @@ screen = {
41
41
data = {},
42
42
batchId = 0 ,
43
43
sequence = 0 ,
44
+ redraws = 2 ,
44
45
reset = function ()
45
- screen .buffer = {}
46
46
screen .data = {}
47
47
screen .batchId = 0
48
48
screen .sequence = 0
49
49
end ,
50
50
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 )
62
61
end
63
62
end
64
63
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
69
64
}
70
65
71
66
cms = {
@@ -91,27 +86,23 @@ cms = {
91
86
update = function ()
92
87
local command , data = protocol .cms .poll ()
93
88
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 )
96
91
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
103
94
screen .reset ()
104
95
screen .batchId = batchId
105
96
screen .sequence = 0
106
97
end
107
98
if (screen .batchId == batchId ) and (screen .sequence == sequence ) then
108
99
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 ]
111
102
end
112
- if ( lastChunk ~= 0 ) then
103
+ if lastChunk then
113
104
screen .buffer = cRleDecode (screen .data )
114
- screen .draw ()
105
+ screen .redraws = 2
115
106
screen .reset ()
116
107
cms .synced = true
117
108
end
@@ -122,5 +113,9 @@ cms = {
122
113
elseif (command == " clear" ) then
123
114
screen .reset ()
124
115
end
116
+ if screen .redraws > 0 then
117
+ screen .draw ()
118
+ screen .redraws = screen .redraws - 1
119
+ end
125
120
end
126
121
}
0 commit comments