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