Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
83551c0
Modify FLYROTOR ESC parameter range
Jiki-Mo Aug 14, 2025
5d4c666
Update FLYROTOR ESC settings
Jiki-Mo Aug 22, 2025
b442521
Update mspEscFlyrotor.lua
Jiki-Mo Aug 22, 2025
fd54c56
Update mspEscFlyrotor.lua
Jiki-Mo Aug 28, 2025
f9a9f3d
Update mspEscFlyrotor.lua
Jiki-Mo Sep 2, 2025
0b0589e
Update mspEscFlyrotor.lua
Jiki-Mo Sep 17, 2025
ea7ea7a
Update mspEscFlyrotor.lua
Jiki-Mo Sep 20, 2025
054cad6
Merge branch 'master' of https://github.com/Jiki-Mo/rotorflight-lua-s…
Jiki-Mo Sep 22, 2025
96d9db9
Merge branch 'rotorflight:master' into master
Jiki-Mo Oct 1, 2025
dbee588
Added new setting items and re-formatted.
Jiki-Mo Oct 11, 2025
0d7b459
Merge branch 'master' of https://github.com/Jiki-Mo/rotorflight-lua-s…
Jiki-Mo Oct 11, 2025
1342be9
Update mspEscFlyrotor.lua
Jiki-Mo Oct 18, 2025
841b297
Update mspEscFlyrotor.lua
Jiki-Mo Oct 18, 2025
59b7f51
Merge branch 'rotorflight:master' into master
Jiki-Mo Oct 30, 2025
8707d8d
Update mspEscFlyrotor.lua
Jiki-Mo Oct 30, 2025
97ec4fe
Merge branch 'rotorflight:master' into master
Jiki-Mo Nov 2, 2025
b4bb786
Merge branch 'rotorflight:master' into master
Jiki-Mo Nov 22, 2025
7a25683
Change the description character in the FLYROTOR ESC settings.
Jiki-Mo Nov 23, 2025
d76979f
Merge branch 'rotorflight:master' into master
Jiki-Mo Nov 27, 2025
f0c3872
Add active freewheeling setting
Jiki-Mo Nov 27, 2025
a2d6fd2
Update mspEscFlyrotor.lua
Jiki-Mo Nov 27, 2025
397ba79
Update mspEscFlyrotor.lua
Jiki-Mo Nov 30, 2025
2ae90e0
Update mspEscFlyrotor.lua
Jiki-Mo Nov 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions src/SCRIPTS/RF2/MSP/mspEscFlyrotor.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ local statusOptions = { [0] = "Disable", "Enable" }
local govMode = { [0] = "ESC Governor", "Linear Throttle", "RF Gyro Governor" }
local becVoltage = { [0] = "Disable", "7.5V", "8.0V", "8.5V", "12.0V" }
local timing = { [0] = "Auto", "1°", "2°", "3°", "4°", "5°", "6°", "7°", "8°", "9°", "10°" }
local motorDirection = { [0] = "CW", "CCW" }
local fanControl = { [0] = "Automatic", "Always On" }
local motorDirection = { [0] = "Normal", "Reversed" }
local fanControl = { [0] = "Temp Control", "Always On", "Always Off" }
local throttleProtocols = { [0] = "PWM" }
local telemetryProtocols = { [0] = "FLYROTOR" }
local ledColors = { [0] = "CUSTOM", "OFF", "RED", "GREEN", "BLUE", "YELLOW", "MAGENTA", "CYAN", "WHITE", "ORANGE", "GRAY", "MAROON", "DARK_GREEN", "NAVY", "PURPLE", "TEAL", "SILVER", "PINK", "GOLD", "BROWN", "LIGHT_BLUE", "FL_PINK", "FL_ORANGE", "FL_LIME", "FL_MINT", "FL_CYAN", "FL_PURPLE", "FL_HOT_PINK", "FL_LIGHT_YELLOW", "FL_AQUAMARINE", "FL_GOLD", "FL_DEEP_PINK", "FL_NEON_GREEN", "FL_ORANGE_RED" }
Expand All @@ -12,7 +12,7 @@ local function getDefaults()
return {
esc_signature = nil,
command = nil,
unknown1 = nil,
type = nil,
amperage = nil,
serial_number1 = nil,
serial_number2 = nil,
Expand Down Expand Up @@ -42,13 +42,13 @@ local function getDefaults()
restart_acc = { min = 1, max = 10 },
p_gain = { min = 0, max = 100 },
i_gain = { min = 0, max = 100 },
unknown2 = nil,
active_freewheel = { min = 0, max = #statusOptions, table = statusOptions},
drive_freq = { min = 10, max = 24 },
max_motor_erpm = { min = 1000, max = 1000000, mult = 100 },
throttle_protocol = { min = 0, max = #throttleProtocols, table = throttleProtocols },
telemetry_protocol = { min = 0, max = #telemetryProtocols, table = telemetryProtocols },
led_color = { min = 0, max = #ledColors, table = ledColors },
unknown3 = nil,
led_rgb = nil,
motor_temp_sensor = { min = 0, max = #statusOptions, table = statusOptions},
motor_temp = { min = 50, max = 150, unit = rf2.units.celsius },
capacity_cutoff = { min = 0, max = 50000, mult = 100 }
Expand Down Expand Up @@ -77,7 +77,7 @@ local function getEscParameters(callback, callbackParam, data)
end
data.esc_signature = signature
data.command = rf2.mspHelper.readU8(buf)
data.unknown1 = rf2.mspHelper.readU8(buf)
data.type = rf2.mspHelper.readU8(buf)
data.amperage = getUInt(buf, 2)
data.serial_number1 = getUInt(buf, 4)
data.serial_number2 = getUInt(buf, 4)
Expand Down Expand Up @@ -107,24 +107,24 @@ local function getEscParameters(callback, callbackParam, data)
data.restart_acc.value = rf2.mspHelper.readU8(buf)
data.p_gain.value = rf2.mspHelper.readU8(buf)
data.i_gain.value = rf2.mspHelper.readU8(buf)
data.unknown2 = rf2.mspHelper.readU8(buf)
data.active_freewheel.value = rf2.mspHelper.readU8(buf)
data.drive_freq.value = rf2.mspHelper.readU8(buf)
data.max_motor_erpm.value = getUInt(buf, 3)
data.throttle_protocol.value = rf2.mspHelper.readU8(buf)
data.telemetry_protocol.value = rf2.mspHelper.readU8(buf)
data.led_color.value = rf2.mspHelper.readU8(buf)
data.unknown3 = getUInt(buf, 3)
data.led_rgb = getUInt(buf, 3)
data.motor_temp_sensor.value = rf2.mspHelper.readU8(buf)
data.motor_temp.value = rf2.mspHelper.readU8(buf)
data.capacity_cutoff.value = getUInt(buf, 2)
callback(callbackParam, data)
end,
simulatorResponse = { 115, 0, 0, 1, 24, 231, 79, 190, 216, 78, 29, 169, 244, 1, 0, 0, 1, 0, 2, 0, 4, 76, 7, 148, 0, 6, 30, 125, 1, 0, 0, 3, 15, 1, 20, 0, 10, 30, 5, 45, 35, 0, 16, 1, 251, 208, 0, 0, 3, 0, 0, 0, 0, 100, 0, 0 },
simulatorResponse = { 115, 0, 1, 0, 155, 231, 79, 190, 216, 78, 29, 169, 244, 1, 0, 0, 1, 0, 2, 0, 4, 76, 7, 148, 0, 6, 30, 125, 1, 0, 0, 3, 15, 1, 20, 0, 10, 30, 5, 45, 35, 1, 16, 1, 251, 208, 0, 0, 3, 0, 0, 0, 0, 100, 0, 0 },
--[[
simulatorResponse = {
115, -- signature
0, -- command
0, -- unknown1
1, -- type
1, 24, -- amperage
231, 79, 190, 216, -- serial number1
78, 29, 169, 244, -- serial number2
Expand All @@ -150,13 +150,13 @@ local function getEscParameters(callback, callbackParam, data)
5, -- restart acc
45, -- p-gain
35, -- i-gain
0, -- unknown2
1, -- active freewheeling
16, -- drive-freq
1, 251, 208 -- max motor erpm
0, -- throttle protocol
0, -- telemetry protocol
3, -- led color
0, 0, 0, -- unknown3
3, -- led color index
0, 0, 0, -- led color value
0, -- motor temp sensor
100, -- motor temperature
0, 0, -- capacity cutoff
Expand All @@ -179,7 +179,7 @@ local function setEscParameters(data)
}
rf2.mspHelper.writeU8(message.payload, data.esc_signature)
rf2.mspHelper.writeU8(message.payload, data.command)
rf2.mspHelper.writeU8(message.payload, data.unknown1)
rf2.mspHelper.writeU8(message.payload, data.type)
setUInt(message.payload, data.amperage, 2)
setUInt(message.payload, data.serial_number1, 4)
setUInt(message.payload, data.serial_number2, 4)
Expand Down Expand Up @@ -209,13 +209,13 @@ local function setEscParameters(data)
rf2.mspHelper.writeU8(message.payload, data.restart_acc.value)
rf2.mspHelper.writeU8(message.payload, data.p_gain.value)
rf2.mspHelper.writeU8(message.payload, data.i_gain.value)
rf2.mspHelper.writeU8(message.payload, data.unknown2)
rf2.mspHelper.writeU8(message.payload, data.active_freewheel.value)
rf2.mspHelper.writeU8(message.payload, data.drive_freq.value)
setUInt(message.payload, data.max_motor_erpm.value, 3)
rf2.mspHelper.writeU8(message.payload, data.throttle_protocol.value)
rf2.mspHelper.writeU8(message.payload, data.telemetry_protocol.value)
rf2.mspHelper.writeU8(message.payload, data.led_color.value)
setUInt(message.payload, data.unknown3, 3)
setUInt(message.payload, data.led_rgb, 3)
rf2.mspHelper.writeU8(message.payload, data.motor_temp_sensor.value)
rf2.mspHelper.writeU8(message.payload, data.motor_temp.value)
setUInt(message.payload, data.capacity_cutoff.value, 2)
Expand Down
61 changes: 31 additions & 30 deletions src/SCRIPTS/RF2/PAGES/esc_flyrotor.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,45 +19,46 @@ labels[#labels + 1] = { t = "---", x = x + indent, y = inc
labels[#labels + 1] = { t = "---", x = x + indent, y = incY(lineSpacing), bold = false }
labels[#labels + 1] = { t = "---", x = x + indent, y = incY(lineSpacing), bold = false }

-- Basic
labels[#labels + 1] = { t = "Basic", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "ESC mode", x = x + indent, y = incY(lineSpacing), sp = x + sp, w = 125, data = escParameters.esc_mode }
fields[#fields + 1] = { t = "Cell count [S]", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.cell_count }
fields[#fields + 1] = { t = "Low voltage", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.low_voltage }
fields[#fields + 1] = { t = "ESC Temperature", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.temperature }
fields[#fields + 1] = { t = "SBEC voltage", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.bec_voltage }
fields[#fields + 1] = { t = "Electrical angle", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.timing }
fields[#fields + 1] = { t = "Motor direction", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_direction }
fields[#fields + 1] = { t = "Starting torque", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.starting_torque }
fields[#fields + 1] = { t = "Response speed", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.response_speed }
fields[#fields + 1] = { t = "Buzzer volume", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.buzzer_volume }
fields[#fields + 1] = { t = "Current gain", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.current_gain }
fields[#fields + 1] = { t = "Fan control", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.fan_control }
-- General
labels[#labels + 1] = { t = "General Parameters", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "ESC Mode", x = x + indent, y = incY(lineSpacing), sp = x + sp, w = 125, data = escParameters.esc_mode }
fields[#fields + 1] = { t = "LiPo Cell Count [S]", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.cell_count }
fields[#fields + 1] = { t = "Low Voltage Limit", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.low_voltage }
fields[#fields + 1] = { t = "Temperature Limit", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.temperature }
fields[#fields + 1] = { t = "SBEC Voltage", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.bec_voltage }
fields[#fields + 1] = { t = "Electrical Angle", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.timing }
fields[#fields + 1] = { t = "Motor Direction", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_direction }
fields[#fields + 1] = { t = "Starting Power", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.starting_torque }
fields[#fields + 1] = { t = "Response Speed", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.response_speed }
fields[#fields + 1] = { t = "Beeper Volume", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.buzzer_volume }
fields[#fields + 1] = { t = "Current Gain", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.current_gain }
fields[#fields + 1] = { t = "Cooling Fan Mode", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.fan_control }

-- Advanced
labels[#labels + 1] = { t = "Advanced", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "Soft start time", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.soft_start }
fields[#fields + 1] = { t = "Auto restart time", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.auto_restart_time }
fields[#fields + 1] = { t = "Restart Acc", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.restart_acc }
fields[#fields + 1] = { t = "Gov P-gain", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.p_gain }
fields[#fields + 1] = { t = "Gov I-gain", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.i_gain }
fields[#fields + 1] = { t = "Drive frequency [KHz]", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.drive_freq }
fields[#fields + 1] = { t = "Motor max ERPM", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.max_motor_erpm }
labels[#labels + 1] = { t = "Advanced Parameters", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "Soft Start Time", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.soft_start }
fields[#fields + 1] = { t = "Auto Bailout Time", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.auto_restart_time }
fields[#fields + 1] = { t = "Auto Bailout Accel", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.restart_acc }
fields[#fields + 1] = { t = "Governor P", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.p_gain }
fields[#fields + 1] = { t = "Governor I", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.i_gain }
fields[#fields + 1] = { t = "Active Freewheeling", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.active_freewheel }
fields[#fields + 1] = { t = "Drive Frequency [KHz]", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.drive_freq }
fields[#fields + 1] = { t = "Maximun Motor ERPM", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.max_motor_erpm }

-- Other
labels[#labels + 1] = { t = "Other", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "Throttle protocol", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.throttle_protocol }
fields[#fields + 1] = { t = "Tele protocol", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.telemetry_protocol }
fields[#fields + 1] = { t = "LED color", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.led_color }
fields[#fields + 1] = { t = "Motor temp sensor", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_temp_sensor }
fields[#fields + 1] = { t = "Motor temperture", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_temp }
fields[#fields + 1] = { t = "Capacity cutoff", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.capacity_cutoff }
labels[#labels + 1] = { t = "Other Parameters", x = x, y = incY(lineSpacing) }
fields[#fields + 1] = { t = "Throttle Protocol", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.throttle_protocol }
fields[#fields + 1] = { t = "Telemetry Protocol", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.telemetry_protocol }
fields[#fields + 1] = { t = "LED Color", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.led_color }
fields[#fields + 1] = { t = "Motor Temperture Sensor", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_temp_sensor }
fields[#fields + 1] = { t = "Motor Temperture Limit", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.motor_temp }
fields[#fields + 1] = { t = "Capacity Limit [mAh]", x = x + indent, y = incY(lineSpacing), sp = x + sp, data = escParameters.capacity_cutoff }

local function receivedEscParameters(page, data)
if data.esc_signature ~= 115 then -- Flyrotor signature
page.labels[1].t = "Invalid ESC detected"
else
page.labels[1].t = string.format("FLYROTOR %dA", data.amperage)
page.labels[1].t = string.format("FLYROTOR %dA%s", data.amperage, data.type == 1 and " F3C" or "")
page.labels[2].t = string.format("S/N: %08X%08X", data.serial_number1, data.serial_number2)
page.labels[3].t = string.format("HW: 1.%d - IAP: %d.%d.%d", data.hw_version, data.iap_major, data.iap_minor, data.iap_patch)
page.labels[4].t = string.format("FW: %d.%d.%d", data.fw_major, data.fw_minor, data.fw_patch)
Expand Down