Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 882f662

Browse files
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

Lines changed: 23 additions & 28 deletions
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

Lines changed: 12 additions & 14 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /