feat: moved calibration to lua server, added calibration lua to convert signal to in-game level
This commit is contained in:
65
calibration.lua
Normal file
65
calibration.lua
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user