|
| 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 FieldSecondProfile = bit32.band(bit32.rshift(profiles, 1), 1) |
| 147 | + local FieldThirdProfile = bit32.band(bit32.rshift(profiles, 2), 1) |
| 148 | + return fieldPos, fieldFirstProfile, FieldSecondProfile, FieldThirdProfile |
| 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 | +} |
0 commit comments