feat: moved calibration to lua server, added calibration lua to convert signal to in-game level

This commit is contained in:
mk
2025-10-19 17:07:04 -03:00
parent 1de0b659f7
commit 85351abbfa
2 changed files with 77 additions and 10 deletions

65
calibration.lua Normal file
View File

@@ -0,0 +1,65 @@
local calibration = {}
local BOKTAI_UV_MAP = {
[1] = {
uvAddress = 0x03004508,
map = {
{ signal = 0050, level = 0x00 }, -- lv0
{ signal = 0150, level = 0x04 }, -- lv1
{ signal = 0250, level = 0x0B }, -- lv2
{ signal = 0350, level = 0x14 }, -- lv3
{ signal = 0450, level = 0x1F }, -- lv4
{ signal = 0550, level = 0x2F }, -- lv5
{ signal = 0650, level = 0x4D }, -- lv6
{ signal = 0800, level = 0x77 }, -- lv7
{ signal = math.huge, level = 0x8C }, -- lv8
},
},
[2] = {
uvAddress = 0x00000000,
map = {
{ signal = 100, level = 0x00 },
{ signal = 250, level = 0x04 },
{ signal = 350, level = 0x0B },
{ signal = 500, level = 0x14 },
{ signal = 550, level = 0x1F },
{ signal = 650, level = 0x2F },
{ signal = 800, level = 0x4D },
{ signal = 900, level = 0x77 },
{ signal = math.huge, level = 0x8C },
},
},
[3] = {
uvAddress = 0x00000000,
map = {
{ signal = 100, level = 0x00 },
{ signal = 250, level = 0x04 },
{ signal = 350, level = 0x0B },
{ signal = 500, level = 0x14 },
{ signal = 550, level = 0x1F },
{ signal = 650, level = 0x2F },
{ signal = 800, level = 0x4D },
{ signal = 900, level = 0x77 },
{ signal = math.huge, level = 0x8C },
},
},
}
-- Conversion function that uses sensorID
function calibration.convertToLevel(signalRead, game)
local sensor = BOKTAI_UV_MAP[game]
if not sensor then
error("Invalid game number: " .. tostring(game))
return 0, 0
end
for _, entry in ipairs(sensor.map) do
if signalRead < entry.signal then
return sensor.uvAddress, entry.level
end
end
return sensor.uvAddress, sensor.map[#sensor.map].level
end
return calibration

View File

@@ -1,4 +1,4 @@
UVADDR = 0x03004508
local calibrationModule = require("calibration")
server = nil
ST_sockets = {}
@@ -28,15 +28,15 @@ end
function ST_received(id)
local sock = ST_sockets[id]
if not sock then return end
if not sock then
return
end
while true do
local p, err = sock:receive(1024)
if p then
console:log(ST_format(id, p:match("^(.-)%s*$")))
num = tonumber(p) or 0
num = math.min(num,255)
emu.memory.iwram:write8(UVADDR,num)
address, level = calibrationModule.convertToLevel(tonumber(p),1)
emu.memory.iwram:write8(address, level)
else
if err ~= socket.ERRORS.AGAIN then
console:error(ST_format(id, err, true))
@@ -56,12 +56,15 @@ function ST_accept()
local id = nextID
nextID = id + 1
ST_sockets[id] = sock
sock:add("received", function() ST_received(id) end)
sock:add("error", function() ST_error(id) end)
sock:add("received", function()
ST_received(id)
end)
sock:add("error", function()
ST_error(id)
end)
console:log(ST_format(id, "Connected"))
end
Server = nil
while not server do
server, err = socket.bind(nil, port)
@@ -84,4 +87,3 @@ while not server do
end
end
end