@@ -16,6 +16,8 @@ local FONT_12 = MIDSIZE -- 12px
16
16
local FONT_8 = 0 -- Default 8px
17
17
local FONT_6 = SMLSIZE -- 6px
18
18
19
+ local FONT_LIST = {FONT_6 , FONT_8 , FONT_12 , FONT_16 , FONT_38 }
20
+
19
21
---- -----------------------------------------------------------------------------------------------
20
22
local function log (fmt , ...)
21
23
m_log .info (fmt , ... )
@@ -46,7 +48,8 @@ function M.unitIdToString(unitId)
46
48
return txtUnit
47
49
end
48
50
49
- return " -#-"
51
+ -- return "-#-"
52
+ return " "
50
53
end
51
54
52
55
---- -----------------------------------------------------------------------------------------------
@@ -63,31 +66,36 @@ function M.periodicStart(t, durationMili)
63
66
t .durationMili = durationMili ;
64
67
end
65
68
66
- function M .periodicHasPassed (t )
69
+ function M .periodicHasPassed (t , show_log )
67
70
-- not started yet
68
71
if (t .durationMili <= 0 ) then
69
72
return false ;
70
73
end
71
74
72
75
local elapsed = getTime () - t .startTime ;
73
76
-- log('elapsed: %d (t.durationMili: %d)', elapsed, t.durationMili)
77
+ if show_log == true then
78
+ log (' elapsed: %0.1f/%0.1f sec' , elapsed / 100 , t .durationMili / 1000 )
79
+ end
74
80
local elapsedMili = elapsed * 10 ;
75
81
if (elapsedMili < t .durationMili ) then
76
82
return false ;
77
83
end
78
84
return true ;
79
85
end
80
86
81
- function M .periodicGetElapsedTime (t )
87
+ function M .periodicGetElapsedTime (t , show_log )
82
88
local elapsed = getTime () - t .startTime ;
83
89
local elapsedMili = elapsed * 10 ;
84
- -- log("elapsedMili: %d",elapsedMili);
90
+ if show_log == true then
91
+ log (' elapsed: %0.1f/%0.1f sec' , elapsed / 100 , t .durationMili / 1000 )
92
+ end
85
93
return elapsedMili ;
86
94
end
87
95
88
96
function M .periodicReset (t )
89
97
t .startTime = getTime ();
90
- log (" periodicReset()" );
98
+ -- log("periodicReset()");
91
99
M .periodicGetElapsedTime (t )
92
100
end
93
101
@@ -100,24 +108,23 @@ end
100
108
function M .isTelemetryAvailable ()
101
109
-- select telemetry source
102
110
if not M .tele_src_id then
103
- log (" select telemetry source" )
111
+ -- log("select telemetry source")
104
112
local tele_src = getFieldInfo (" RSSI" )
105
- if not tele_src then tele_src = getFieldInfo (" RxBt" ) end
106
- if not tele_src then tele_src = getFieldInfo (" A1" ) end
107
- if not tele_src then tele_src = getFieldInfo (" A2" ) end
108
113
if not tele_src then tele_src = getFieldInfo (" 1RSS" ) end
109
114
if not tele_src then tele_src = getFieldInfo (" 2RSS" ) end
110
115
if not tele_src then tele_src = getFieldInfo (" RQly" ) end
111
- if not tele_src then tele_src = getFieldInfo (" TRSS" ) end
112
116
if not tele_src then tele_src = getFieldInfo (" VFR%" ) end
117
+ if not tele_src then tele_src = getFieldInfo (" TRSS" ) end
118
+ if not tele_src then tele_src = getFieldInfo (" RxBt" ) end
119
+ if not tele_src then tele_src = getFieldInfo (" A1" ) end
113
120
114
121
if tele_src == nil then
115
- log (" no telemetry sensor found" )
122
+ -- log("no telemetry sensor found")
116
123
M .tele_src_id = nil
117
124
M .tele_src_name = " ---"
118
125
return false
119
126
else
120
- log (" telemetry sensor found: " .. tele_src .name )
127
+ -- log("telemetry sensor found: " .. tele_src.name)
121
128
M .tele_src_id = tele_src .id
122
129
M .tele_src_name = tele_src .name
123
130
end
@@ -241,36 +248,103 @@ function M.cleanInvalidCharFromGetFiledInfo(sourceName)
241
248
end
242
249
243
250
---- --------------------------------------------------------------------------------------------------
251
+ function M .getFontSizeRelative (orgFontSize , delta )
252
+ for i = 1 , # FONT_LIST do
253
+ if FONT_LIST [i ] == orgFontSize then
254
+ local newIndex = i + delta
255
+ newIndex = math.min (newIndex , # FONT_LIST )
256
+ newIndex = math.max (newIndex , 1 )
257
+ return FONT_LIST [newIndex ]
258
+ end
259
+ end
260
+ return orgFontSize
261
+ end
244
262
263
+ ---- --------------------------------------------------------------------------------------------------
245
264
function M .lcdSizeTextFixed (txt , font_size )
246
265
local ts_w , ts_h = lcd .sizeText (txt , font_size )
247
266
248
267
local v_offset = 0
249
268
if font_size == FONT_38 then
250
- v_offset = - 11
269
+ v_offset = - 15
251
270
elseif font_size == FONT_16 then
252
- v_offset = - 5
271
+ v_offset = - 8
253
272
elseif font_size == FONT_12 then
254
- v_offset = - 4
273
+ v_offset = - 6
255
274
elseif font_size == FONT_8 then
256
- v_offset = - 3
275
+ v_offset = - 4
257
276
elseif font_size == FONT_6 then
258
- v_offset = 0
277
+ v_offset = - 3
259
278
end
260
- return ts_w , ts_h , v_offset
279
+ return ts_w , ts_h + 2 * v_offset , v_offset
261
280
end
262
281
263
282
---- --------------------------------------------------------------------------------------------------
283
+ function M .drawText (x , y , text , font_size , text_color , bg_color )
284
+ local ts_w , ts_h , v_offset = M .lcdSizeTextFixed (text , font_size )
285
+ lcd .drawRectangle (x , y , ts_w , ts_h , BLUE )
286
+ lcd .drawText (x , y + v_offset , text , font_size + text_color )
287
+ return ts_w , ts_h , v_offset
288
+ end
264
289
265
- function M .drawBadgedText (txt , txtX , txtY , font_size , text_color , background_color )
266
- local ts_w , ts_h = lcd .sizeText (txt , font_size )
290
+ function M .drawBadgedText (txt , txtX , txtY , font_size , text_color , bg_color )
291
+ local ts_w , ts_h , v_offset = M .lcdSizeTextFixed (txt , font_size )
292
+ local v_space = 2
293
+ local bdg_h = v_space + ts_h + v_space
294
+ local r = bdg_h / 2
295
+ lcd .drawFilledCircle (txtX , txtY + r , r , bg_color )
296
+ lcd .drawFilledCircle (txtX + ts_w , txtY + r , r , bg_color )
297
+ lcd .drawFilledRectangle (txtX , txtY , ts_w , bdg_h , bg_color )
298
+
299
+ lcd .drawText (txtX , txtY + v_offset + v_space , txt , font_size + text_color )
300
+
301
+ -- lcd.drawRectangle(txtX, txtY , ts_w, bdg_h, RED) -- dbg
302
+ end
303
+
304
+ function M .drawBadgedTextCenter (txt , txtX , txtY , font_size , text_color , bg_color )
305
+ local ts_w , ts_h , v_offset = M .lcdSizeTextFixed (txt , font_size )
267
306
local r = ts_h / 2
268
- lcd .drawFilledCircle (txtX , txtY + r , r , background_color )
269
- lcd .drawFilledCircle (txtX + ts_w , txtY + r , r , background_color )
270
- lcd .drawFilledRectangle (txtX , txtY , ts_w , ts_h , background_color )
271
- lcd .drawText (txtX , txtY , txt , font_size + text_color )
307
+ local x = txtX - ts_w / 2
308
+ local y = txtY - ts_h / 2
309
+ lcd .drawFilledCircle (x + r * 0.3 , y + r , r , bg_color )
310
+ lcd .drawFilledCircle (x - r * 0.3 + ts_w , y + r , r , bg_color )
311
+ lcd .drawFilledRectangle (x , y , ts_w , ts_h , bg_color )
312
+
313
+ lcd .drawText (x , y + v_offset , txt , font_size + text_color )
314
+
315
+ -- dbg
316
+ -- lcd.drawRectangle(x, y , ts_w, ts_h, RED) -- dbg
317
+ -- lcd.drawLine(txtX-30, txtY, txtX+30, txtY, SOLID, RED) -- dbg
318
+ -- lcd.drawLine(txtX, txtY-20, txtX, txtY+20, SOLID, RED) -- dbg
272
319
end
273
320
321
+ ---- --------------------------------------------------------------------------------------------------
322
+ -- usage:
323
+ -- log("bbb----------------------------------------------------------")
324
+ -- wgt.tools.heap_dump(wgt, 0, 60)
325
+ -- log("ccc----------------------------------------------------------")
326
+ function M .heap_dump (tbl , indent , max_dept )
327
+ local spaces = string.rep (" " , indent )
328
+ if max_dept == 0 then
329
+ log (spaces .. " ---- max dept ----" )
330
+ return
331
+ end
332
+ max_dept = max_dept - 1
333
+ indent = indent or 0
334
+
335
+ for key , value in pairs (tbl ) do
336
+ if key ~= " _G" then
337
+ if type (value ) == " table" then
338
+ -- log(spaces .. key .. " (table) = {")
339
+ log (spaces .. key .. " = {" )
340
+ M .heap_dump (value , indent + 1 , max_dept )
341
+ log (spaces .. " }" )
342
+ else
343
+ log (spaces .. key .. " = " .. tostring (value ))
344
+ end
345
+ end
346
+ end
347
+ end
274
348
---- --------------------------------------------------------------------------------------------------
275
349
276
350
return M
0 commit comments