Skip to content

Commit 882f662

Browse files
authored
Merge pull request #424 from klutvott123/cms-fixes
CMS fixes
2 parents d7af958 + b11d9eb commit 882f662

File tree

2 files changed

+35
-42
lines changed

2 files changed

+35
-42
lines changed

src/SCRIPTS/BF/CMS/common.lua

+23-28
Original file line numberDiff line numberDiff line change
@@ -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

7166
cms = {
@@ -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
}

src/SCRIPTS/BF/cms.lua

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
local lastMenuEventTime = 0
22
local INTERVAL = 80
3-
local firstRun = true
43

54
local function init()
65
cms.init(radio)
@@ -12,25 +11,24 @@ local function stickMovement()
1211
end
1312

1413
local function run(event)
15-
if firstRun then
16-
screen.clear()
17-
firstRun = false
18-
end
19-
if stickMovement() then
20-
cms.synced = false
21-
lastMenuEventTime = getTime()
22-
end
2314
cms.update()
24-
if (cms.menuOpen == false) then
15+
if cms.menuOpen == false then
2516
cms.open()
2617
end
27-
if (event == radio.refresh.event) or (lastMenuEventTime + INTERVAL < getTime() and not cms.synced) then
28-
cms.refresh()
29-
end
30-
if (event == EVT_VIRTUAL_EXIT) then
18+
if event == radio.refresh.event then
19+
cms.synced = false
20+
lastMenuEventTime = 0
21+
elseif stickMovement() then
22+
cms.synced = false
23+
lastMenuEventTime = getTime()
24+
elseif event == EVT_VIRTUAL_EXIT then
3125
cms.close()
3226
return 1
3327
end
28+
if lastMenuEventTime + INTERVAL < getTime() and not cms.synced then
29+
lastMenuEventTime = getTime()
30+
cms.refresh()
31+
end
3432
return 0
3533
end
3634

0 commit comments

Comments
 (0)