From ddededf05ace06f9e7d0253bc81d7e453f4b65e8 Mon Sep 17 00:00:00 2001 From: AegisCrusader <18148657+AegisCrusader@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:59:16 -0500 Subject: [PATCH] RSSI Model Locator: Add TX Power & Haptic Feedback (#177) --- .../SCRIPTS/TOOLS/Model Locator (by RSSI).lua | 42 +++++++++++++++---- .../SCRIPTS/TOOLS/Model Locator (by RSSI).lua | 42 +++++++++++++++---- 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/sdcard/c480x272/SCRIPTS/TOOLS/Model Locator (by RSSI).lua b/sdcard/c480x272/SCRIPTS/TOOLS/Model Locator (by RSSI).lua index 84ff7df8..ec23dc23 100644 --- a/sdcard/c480x272/SCRIPTS/TOOLS/Model Locator (by RSSI).lua +++ b/sdcard/c480x272/SCRIPTS/TOOLS/Model Locator (by RSSI).lua @@ -19,8 +19,8 @@ -- Model Locator by RSSI -- Offer Shmuely (based on code from Scott Bauer 6/21/2015) -- Date: 2022-2024 --- ver: 0.5 -local app_ver = "0.5" +-- ver: 0.6 +local app_ver = "0.6" -- This widget help to find a lost/crashed model based on the RSSI (if still available) -- The widget produce audio representation (vario-meter style) of the RSSI from the lost model @@ -39,8 +39,10 @@ local app_ver = "0.5" -- triangulate the two lines, and it will be :-) local delayMillis = 100 +local targetTXPower = 25 local nextPlayTime = getTime() local img = bitmap.open("/SCRIPTS/TOOLS/Model Locator (by RSSI).png") +local useHaptic = false -------------------------------------------------------------- local function log(s) @@ -88,13 +90,19 @@ local function getRangeColor(value, red_value, green_value) end local function getSignalValues() + -- try to get transmitter power + local txPowerField = getFieldInfo("TPWR") + local txPowerValue = nil + if txPowerField then + txPowerValue = getValue("TPWR") + end -- try regular Frsky RSSI local fieldinfo = getFieldInfo("RSSI") if fieldinfo then local v = getValue("RSSI") log("RSSI: " .. v) - return v, 0, 100, "Using signal: Frsky RSSI", nil + return v, 0, 100, txPowerValue, "Using signal: Frsky RSSI", nil end -- try expressLRS antenna 1 @@ -104,7 +112,7 @@ local function getSignalValues() if v == 0 then v = -115 end - return v, -115, 20, "Using signal: elrs 1RSS", "Set tx power to 25mW non dynamic" + return v, -115, 20, txPowerValue, "Using signal: ELRS 1RSS", "Set TX Power to 25mW Non-Dynamic" end -- try expressLRS antenna 2 @@ -114,7 +122,7 @@ local function getSignalValues() if v == 0 then v = -115 end - return v, -115, 20, "Using signal: elrs 2RSS", "Set tx power to 25mW non dynamic" + return v, -115, 20, txPowerValue, "Using signal: ELRS 2RSS", "Set TX Power to 25mW Non-Dynamic" end ---- try UNI-ACSST firmware VFR @@ -149,14 +157,23 @@ local function main(event, touchState) lcd.drawText(10, 3, "RSSI Model Locator", WHITE) lcd.drawText(LCD_W - 50, 3, "ver: " .. app_ver .. "", SMLSIZE + GREEN) - local signalValue, signalMin, signalMax, line1, line2 = getSignalValues() + local signalValue, signalMin, signalMax, txPower, line1, line2 = getSignalValues() -- log(signalValue) if signalValue == nil then lcd.drawText(30, 50, "No signal found (expected: RSSI/1RSS/2RSS)", 0 + BLINK) return 0 end - lcd.drawText(3, 60, line2 or "", RED) + + if txPower then + lcd.drawText(3, 60, "Current TX Power: " .. tostring(txPower) .. "mW", (txPower == targetTXPower) and DARKGREEN or RED) + + if txPower ~= targetTXPower then + lcd.drawText(3, 75, line2 or "", RED + BLINK) + end + end + lcd.drawText(10, LCD_H-22, line1, WHITE) + lcd.drawText(300, LCD_H-22, "[ENTER] to toggle haptic", WHITE) log("signalValue:" .. signalValue .. ", signalMin: " .. signalMin .. ", signalMax: " .. signalMax) @@ -164,8 +181,7 @@ local function main(event, touchState) lcd.setColor(CUSTOM_COLOR, getRangeColor(signalPercent, 0, 100)) -- draw current value - lcd.drawNumber(40, 100, signalValue, XXLSIZE + CUSTOM_COLOR) - lcd.drawText(130, 140, "db", 0 + CUSTOM_COLOR) + lcd.drawText(3, 90, tostring(signalValue) .. "db", XXLSIZE + CUSTOM_COLOR) -- draw main bar local xMin = 10 @@ -180,9 +196,17 @@ local function main(event, touchState) lcd.drawFilledRectangle(xx, yMin - h, 15, h, CUSTOM_COLOR) end + -- toggle haptic + if event == EVT_VIRTUAL_ENTER then + useHaptic = not useHaptic + end + -- beep if getTime() >= nextPlayTime then playFile("/SCRIPTS/TOOLS/Model Locator (by RSSI).wav") + if useHaptic then + playHaptic(7, 0, 1) + end nextPlayTime = getTime() + delayMillis - signalPercent end diff --git a/sdcard/c480x320/SCRIPTS/TOOLS/Model Locator (by RSSI).lua b/sdcard/c480x320/SCRIPTS/TOOLS/Model Locator (by RSSI).lua index 84ff7df8..ec23dc23 100644 --- a/sdcard/c480x320/SCRIPTS/TOOLS/Model Locator (by RSSI).lua +++ b/sdcard/c480x320/SCRIPTS/TOOLS/Model Locator (by RSSI).lua @@ -19,8 +19,8 @@ -- Model Locator by RSSI -- Offer Shmuely (based on code from Scott Bauer 6/21/2015) -- Date: 2022-2024 --- ver: 0.5 -local app_ver = "0.5" +-- ver: 0.6 +local app_ver = "0.6" -- This widget help to find a lost/crashed model based on the RSSI (if still available) -- The widget produce audio representation (vario-meter style) of the RSSI from the lost model @@ -39,8 +39,10 @@ local app_ver = "0.5" -- triangulate the two lines, and it will be :-) local delayMillis = 100 +local targetTXPower = 25 local nextPlayTime = getTime() local img = bitmap.open("/SCRIPTS/TOOLS/Model Locator (by RSSI).png") +local useHaptic = false -------------------------------------------------------------- local function log(s) @@ -88,13 +90,19 @@ local function getRangeColor(value, red_value, green_value) end local function getSignalValues() + -- try to get transmitter power + local txPowerField = getFieldInfo("TPWR") + local txPowerValue = nil + if txPowerField then + txPowerValue = getValue("TPWR") + end -- try regular Frsky RSSI local fieldinfo = getFieldInfo("RSSI") if fieldinfo then local v = getValue("RSSI") log("RSSI: " .. v) - return v, 0, 100, "Using signal: Frsky RSSI", nil + return v, 0, 100, txPowerValue, "Using signal: Frsky RSSI", nil end -- try expressLRS antenna 1 @@ -104,7 +112,7 @@ local function getSignalValues() if v == 0 then v = -115 end - return v, -115, 20, "Using signal: elrs 1RSS", "Set tx power to 25mW non dynamic" + return v, -115, 20, txPowerValue, "Using signal: ELRS 1RSS", "Set TX Power to 25mW Non-Dynamic" end -- try expressLRS antenna 2 @@ -114,7 +122,7 @@ local function getSignalValues() if v == 0 then v = -115 end - return v, -115, 20, "Using signal: elrs 2RSS", "Set tx power to 25mW non dynamic" + return v, -115, 20, txPowerValue, "Using signal: ELRS 2RSS", "Set TX Power to 25mW Non-Dynamic" end ---- try UNI-ACSST firmware VFR @@ -149,14 +157,23 @@ local function main(event, touchState) lcd.drawText(10, 3, "RSSI Model Locator", WHITE) lcd.drawText(LCD_W - 50, 3, "ver: " .. app_ver .. "", SMLSIZE + GREEN) - local signalValue, signalMin, signalMax, line1, line2 = getSignalValues() + local signalValue, signalMin, signalMax, txPower, line1, line2 = getSignalValues() -- log(signalValue) if signalValue == nil then lcd.drawText(30, 50, "No signal found (expected: RSSI/1RSS/2RSS)", 0 + BLINK) return 0 end - lcd.drawText(3, 60, line2 or "", RED) + + if txPower then + lcd.drawText(3, 60, "Current TX Power: " .. tostring(txPower) .. "mW", (txPower == targetTXPower) and DARKGREEN or RED) + + if txPower ~= targetTXPower then + lcd.drawText(3, 75, line2 or "", RED + BLINK) + end + end + lcd.drawText(10, LCD_H-22, line1, WHITE) + lcd.drawText(300, LCD_H-22, "[ENTER] to toggle haptic", WHITE) log("signalValue:" .. signalValue .. ", signalMin: " .. signalMin .. ", signalMax: " .. signalMax) @@ -164,8 +181,7 @@ local function main(event, touchState) lcd.setColor(CUSTOM_COLOR, getRangeColor(signalPercent, 0, 100)) -- draw current value - lcd.drawNumber(40, 100, signalValue, XXLSIZE + CUSTOM_COLOR) - lcd.drawText(130, 140, "db", 0 + CUSTOM_COLOR) + lcd.drawText(3, 90, tostring(signalValue) .. "db", XXLSIZE + CUSTOM_COLOR) -- draw main bar local xMin = 10 @@ -180,9 +196,17 @@ local function main(event, touchState) lcd.drawFilledRectangle(xx, yMin - h, 15, h, CUSTOM_COLOR) end + -- toggle haptic + if event == EVT_VIRTUAL_ENTER then + useHaptic = not useHaptic + end + -- beep if getTime() >= nextPlayTime then playFile("/SCRIPTS/TOOLS/Model Locator (by RSSI).wav") + if useHaptic then + playHaptic(7, 0, 1) + end nextPlayTime = getTime() + delayMillis - signalPercent end