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 fbf36a3

Browse files
Add Page for Position OSD Elements (Betaflight 4.4 MSP)
Add osd pos Page Update pos_osd.lua Update pages.lua
1 parent 14152af commit fbf36a3

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

‎src/SCRIPTS/BF/PAGES/pos_osd.lua‎

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
local template = assert(loadScript(radio.template))()
2+
local margin = template.margin
3+
local indent = template.indent
4+
local lineSpacing = template.lineSpacing
5+
local tableSpacing = template.tableSpacing
6+
local sp = template.listSpacing.field
7+
local yMinLim = radio.yMinLimit
8+
local x = margin
9+
local y = yMinLim - lineSpacing
10+
local inc = { x = function(val) x = x + val return x end, y = function(val) y = y + val return y end }
11+
local labels = {}
12+
local fields = {}
13+
14+
local items = {
15+
{["address"] = 0, ["firstVal"] = 11, ["secondVal"] = 12, ["nameCli"] = "rssi_pos"},
16+
{["address"] = 1, ["firstVal"] = 13, ["secondVal"] = 14, ["nameCli"] = "vbat_pos"},
17+
{["address"] = 2, ["firstVal"] = 15, ["secondVal"] = 16, ["nameCli"] = "crosshairs_pos"},
18+
{["address"] = 3, ["firstVal"] = 17, ["secondVal"] = 18, ["nameCli"] = "ah_pos"},
19+
{["address"] = 4, ["firstVal"] = 19, ["secondVal"] = 20, ["nameCli"] = "ah_sbar_pos"},
20+
{["address"] = 5, ["firstVal"] = 21, ["secondVal"] = 22, ["nameCli"] = "tim_1_pos"},
21+
{["address"] = 6, ["firstVal"] = 23, ["secondVal"] = 24, ["nameCli"] = "tim_2_pos"},
22+
{["address"] = 7, ["firstVal"] = 25, ["secondVal"] = 26, ["nameCli"] = "flymode_pos"},
23+
{["address"] = 8, ["firstVal"] = 27, ["secondVal"] = 28, ["nameCli"] = "craft_name_pos"},
24+
{["address"] = 9, ["firstVal"] = 29, ["secondVal"] = 30, ["nameCli"] = "throttle_pos"},
25+
{["address"] = 10, ["firstVal"] = 31, ["secondVal"] = 32, ["nameCli"] = "vtx_channel_pos"},
26+
{["address"] = 11, ["firstVal"] = 33, ["secondVal"] = 34, ["nameCli"] = "current_pos"},
27+
{["address"] = 12, ["firstVal"] = 35, ["secondVal"] = 36, ["nameCli"] = "mah_drawn_pos"},
28+
{["address"] = 13, ["firstVal"] = 37, ["secondVal"] = 38, ["nameCli"] = "gps_speed_pos"},
29+
{["address"] = 14, ["firstVal"] = 39, ["secondVal"] = 40, ["nameCli"] = "gps_sats_pos"},
30+
{["address"] = 15, ["firstVal"] = 41, ["secondVal"] = 42, ["nameCli"] = "altitude_pos"},
31+
{["address"] = 16, ["firstVal"] = 43, ["secondVal"] = 44, ["nameCli"] = "pid_roll_pos"},
32+
{["address"] = 17, ["firstVal"] = 45, ["secondVal"] = 46, ["nameCli"] = "pid_pitch_pos"},
33+
{["address"] = 18, ["firstVal"] = 47, ["secondVal"] = 48, ["nameCli"] = "pid_yaw_pos"},
34+
{["address"] = 19, ["firstVal"] = 49, ["secondVal"] = 50, ["nameCli"] = "power_pos"},
35+
{["address"] = 20, ["firstVal"] = 51, ["secondVal"] = 52, ["nameCli"] = "pidrate_profile_pos"},
36+
{["address"] = 21, ["firstVal"] = 53, ["secondVal"] = 54, ["nameCli"] = "warnings_pos"},
37+
{["address"] = 22, ["firstVal"] = 55, ["secondVal"] = 56, ["nameCli"] = "avg_cell_voltage_pos"},
38+
{["address"] = 23, ["firstVal"] = 57, ["secondVal"] = 58, ["nameCli"] = "gps_lon_pos"},
39+
{["address"] = 24, ["firstVal"] = 59, ["secondVal"] = 60, ["nameCli"] = "gps_lat_pos"},
40+
{["address"] = 25, ["firstVal"] = 61, ["secondVal"] = 62, ["nameCli"] = "debug_pos"},
41+
{["address"] = 26, ["firstVal"] = 63, ["secondVal"] = 64, ["nameCli"] = "pit_ang_pos"},
42+
{["address"] = 27, ["firstVal"] = 65, ["secondVal"] = 66, ["nameCli"] = "rol_ang_pos"},
43+
{["address"] = 28, ["firstVal"] = 67, ["secondVal"] = 68, ["nameCli"] = "battery_usage_pos"},
44+
{["address"] = 29, ["firstVal"] = 69, ["secondVal"] = 70, ["nameCli"] = "disarmed_pos"},
45+
{["address"] = 30, ["firstVal"] = 71, ["secondVal"] = 72, ["nameCli"] = "home_dir_pos"},
46+
{["address"] = 31, ["firstVal"] = 73, ["secondVal"] = 74, ["nameCli"] = "home_dist_pos"},
47+
{["address"] = 32, ["firstVal"] = 75, ["secondVal"] = 76, ["nameCli"] = "nheading_pos"},
48+
{["address"] = 33, ["firstVal"] = 77, ["secondVal"] = 78, ["nameCli"] = "nvario_pos"},
49+
{["address"] = 34, ["firstVal"] = 79, ["secondVal"] = 80, ["nameCli"] = "compass_bar_pos"},
50+
{["address"] = 35, ["firstVal"] = 81, ["secondVal"] = 82, ["nameCli"] = "esc_tmp_pos"},
51+
{["address"] = 36, ["firstVal"] = 83, ["secondVal"] = 84, ["nameCli"] = "esc_rpm_pos"},
52+
{["address"] = 37, ["firstVal"] = 85, ["secondVal"] = 86, ["nameCli"] = "remaining_time_estimate_pos"},
53+
{["address"] = 38, ["firstVal"] = 87, ["secondVal"] = 88, ["nameCli"] = "rtc_date_time_pos"},
54+
{["address"] = 39, ["firstVal"] = 89, ["secondVal"] = 90, ["nameCli"] = "adjustment_range_pos"},
55+
{["address"] = 40, ["firstVal"] = 91, ["secondVal"] = 92, ["nameCli"] = "core_temp_pos"},
56+
{["address"] = 41, ["firstVal"] = 93, ["secondVal"] = 94, ["nameCli"] = "anti_gravity_pos"},
57+
{["address"] = 42, ["firstVal"] = 95, ["secondVal"] = 96, ["nameCli"] = "g_force_pos"},
58+
{["address"] = 43, ["firstVal"] = 97, ["secondVal"] = 98, ["nameCli"] = "motor_diag_pos"},
59+
{["address"] = 44, ["firstVal"] = 99, ["secondVal"] = 100, ["nameCli"] = "log_status_pos"},
60+
{["address"] = 45, ["firstVal"] = 101, ["secondVal"] = 102, ["nameCli"] = "flip_arrow_pos"},
61+
{["address"] = 46, ["firstVal"] = 103, ["secondVal"] = 104, ["nameCli"] = "link_quality_pos"},
62+
{["address"] = 47, ["firstVal"] = 105, ["secondVal"] = 106, ["nameCli"] = "flight_dist_pos"},
63+
{["address"] = 48, ["firstVal"] = 107, ["secondVal"] = 108, ["nameCli"] = "stick_overlay_left_pos"},
64+
{["address"] = 49, ["firstVal"] = 109, ["secondVal"] = 110, ["nameCli"] = "stick_overlay_right_pos"},
65+
{["address"] = 50, ["firstVal"] = 111, ["secondVal"] = 112, ["nameCli"] = "display_name_pos"},
66+
{["address"] = 51, ["firstVal"] = 113, ["secondVal"] = 114, ["nameCli"] = "esc_rpm_freq_pos"},
67+
{["address"] = 52, ["firstVal"] = 115, ["secondVal"] = 116, ["nameCli"] = "rate_profile_name_pos"},
68+
{["address"] = 53, ["firstVal"] = 117, ["secondVal"] = 118, ["nameCli"] = "pid_profile_name_pos"},
69+
{["address"] = 54, ["firstVal"] = 119, ["secondVal"] = 120, ["nameCli"] = "profile_name_pos"},
70+
{["address"] = 55, ["firstVal"] = 121, ["secondVal"] = 122, ["nameCli"] = "rssi_dbm_pos"},
71+
{["address"] = 56, ["firstVal"] = 123, ["secondVal"] = 124, ["nameCli"] = "rcchannels_pos"},
72+
{["address"] = 57, ["firstVal"] = 125, ["secondVal"] = 126, ["nameCli"] = "camera_frame_pos"},
73+
{["address"] = 58, ["firstVal"] = 127, ["secondVal"] = 128, ["nameCli"] = "efficiency_pos"},
74+
{["address"] = 59, ["firstVal"] = 129, ["secondVal"] = 130, ["nameCli"] = "total_flights_pos"},
75+
{["address"] = 60, ["firstVal"] = 131, ["secondVal"] = 132, ["nameCli"] = "up_down_reference_pos"},
76+
{["address"] = 61, ["firstVal"] = 133, ["secondVal"] = 134, ["nameCli"] = "link_tx_power_pos"},
77+
{["address"] = 62, ["firstVal"] = 135, ["secondVal"] = 136, ["nameCli"] = "wh_drawn_pos"},
78+
{["address"] = 63, ["firstVal"] = 137, ["secondVal"] = 138, ["nameCli"] = "aux_pos"},
79+
{["address"] = 64, ["firstVal"] = 139, ["secondVal"] = 140, ["nameCli"] = "ready_mode_pos"},
80+
{["address"] = 65, ["firstVal"] = 141, ["secondVal"] = 142, ["nameCli"] = "rsnr_pos"},
81+
{["address"] = 66, ["firstVal"] = 143, ["secondVal"] = 144, ["nameCli"] = "sys_goggle_voltage_pos"},
82+
{["address"] = 67, ["firstVal"] = 145, ["secondVal"] = 146, ["nameCli"] = "sys_vtx_voltage_pos"},
83+
{["address"] = 68, ["firstVal"] = 147, ["secondVal"] = 148, ["nameCli"] = "sys_bitrate_pos"},
84+
{["address"] = 69, ["firstVal"] = 149, ["secondVal"] = 150, ["nameCli"] = "sys_delay_pos"},
85+
{["address"] = 70, ["firstVal"] = 151, ["secondVal"] = 152, ["nameCli"] = "sys_distance_pos"},
86+
{["address"] = 71, ["firstVal"] = 153, ["secondVal"] = 154, ["nameCli"] = "sys_lq_pos"},
87+
{["address"] = 72, ["firstVal"] = 155, ["secondVal"] = 156, ["nameCli"] = "sys_goggle_dvr_pos"},
88+
{["address"] = 73, ["firstVal"] = 157, ["secondVal"] = 158, ["nameCli"] = "sys_vtx_dvr_pos"},
89+
{["address"] = 74, ["firstVal"] = 159, ["secondVal"] = 160, ["nameCli"] = "sys_warnings_pos"},
90+
{["address"] = 75, ["firstVal"] = 161, ["secondVal"] = 162, ["nameCli"] = "sys_vtx_temp_pos"},
91+
{["address"] = 76, ["firstVal"] = 163, ["secondVal"] = 164, ["nameCli"] = "sys_fan_speed_pos"},
92+
}
93+
94+
address = address or 0
95+
local firstVal = items[address + 1]["firstVal"]
96+
local secondVal = items[address + 1]["secondVal"]
97+
local nameCli = items[address + 1]["nameCli"]
98+
99+
x = margin
100+
y = yMinLim - tableSpacing.header
101+
102+
fields[#fields + 1] = { x = x, y = inc.y(tableSpacing.header), min = 0, max = (#items - 1), vals = { 1 }, upd = function(self) self.updateItems(self) end }
103+
labels[#labels + 1] = { t = nameCli, x = x + tableSpacing.col * 1, y = y }
104+
105+
labels[#labels + 1] = { t = "POS", x = x, y = inc.y(tableSpacing.header) }
106+
labels[#labels + 1] = { t = "OP1", x = x + tableSpacing.col, y = y }
107+
labels[#labels + 1] = { t = "OP2", x = x + tableSpacing.col * 2, y = y }
108+
labels[#labels + 1] = { t = "OP3", x = x + tableSpacing.col * 3, y = y }
109+
110+
fields[#fields + 1] = { x = x, y = inc.y(tableSpacing.row), min = 0, max = 2047, vals = { 2, 3 } }
111+
fields[#fields + 1] = { x = x + tableSpacing.col, y = y, min = 0, max = 1, vals = { 1, 2 }, table = { [0] = "OFF", "ON" } }
112+
fields[#fields + 1] = { x = x + tableSpacing.col * 2, y = y, min = 0, max = 1, vals = { 1, 2 }, table = { [0] = "OFF", "ON" } }
113+
fields[#fields + 1] = { x = x + tableSpacing.col * 3, y = y, min = 0, max = 1, vals = { 1, 2 }, table = { [0] = "OFF", "ON" } }
114+
115+
return {
116+
read = 84, -- MSP_OSD_CONFIG
117+
write = 85, -- MSP_SET_OSD_CONFIG
118+
title = "OSD Elements",
119+
reboot = false,
120+
eepromWrite = true,
121+
minBytes = 3,
122+
labels = labels,
123+
fields = fields,
124+
postLoad = function(self)
125+
self.fields[1].value = address
126+
self.fields[2].value, self.fields[3].value, self.fields[4].value, self.fields[5].value = self.splitVal(self, self.values[firstVal], self.values[secondVal])
127+
end,
128+
preSave = function(self)
129+
self.values = {}
130+
self.values[1] = self.fields[1].value
131+
local combineValue = self.checkProfile(self, self.fields[2].value, self.fields[3].value, self.fields[4].value, self.fields[5].value)
132+
self.values[2] = bit32.band(combineValue, 0xFF)
133+
self.values[3] = bit32.rshift(combineValue, 8)
134+
return self.values
135+
end,
136+
checkProfile = function(self, value, profileFirst, profileSecond, profileThird)
137+
local profiles = profileFirst + bit32.lshift(profileSecond, 1) + bit32.lshift(profileThird, 2)
138+
local output = bit32.replace(value, profiles, 11, 3)
139+
return output
140+
end,
141+
splitVal = function(self, inputFirstVal, inputSecondVal)
142+
local inputVal = inputFirstVal + bit32.lshift(inputSecondVal, 8)
143+
local profiles = bit32.extract(inputVal, 11, 3)
144+
local fieldPos = bit32.extract(inputVal, 0, 11)
145+
local fieldFirstProfile = bit32.band(bit32.rshift(profiles, 0), 1)
146+
local fieldThirdProfile = bit32.band(bit32.rshift(profiles, 1), 1)
147+
local fieldFourthProfile = bit32.band(bit32.rshift(profiles, 2), 1)
148+
return fieldPos, fieldFirstProfile, fieldThirdProfile, fieldFourthProfile
149+
end,
150+
updateItems = function(self)
151+
if self.fields[1].value ~= items[address + 1]["address"] then
152+
address = self.fields[1].value
153+
firstVal = items[address + 1]["firstVal"]
154+
secondVal = items[address + 1]["secondVal"]
155+
address = items[address + 1]["address"]
156+
nameCli = items[address + 1]["nameCli"]
157+
self.labels[1].t = nameCli
158+
self.fields[2].value, self.fields[3].value, self.fields[4].value, self.fields[5].value = self.splitVal(self, self.values[firstVal], self.values[secondVal])
159+
end
160+
end
161+
}

‎src/SCRIPTS/BF/pages.lua‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,8 @@ if apiVersion >= 1.16 then
6060
PageFiles[#PageFiles + 1] = { title = "Trim Accelerometer", script = "acc_trim.lua" }
6161
end
6262

63+
if apiVersion >= 1.45 then
64+
PageFiles[#PageFiles + 1] = { title = "OSD Elements", script = "pos_osd.lua" }
65+
end
66+
6367
return PageFiles

0 commit comments

Comments
(0)

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