61 lines
1.8 KiB
Lua
61 lines
1.8 KiB
Lua
--------------------------------------------------------------------
|
|
-- lib/etat.lua : persistance de l'etat du drone (drone.etat)
|
|
-- Restaure apres un redemarrage: mode, consigne, et tous les
|
|
-- MAPPAGES CALIBRES (propres a chaque vaisseau):
|
|
-- roles nom RSC -> lb|rb|lf|rf|prop_l|prop_r
|
|
-- gimbal { indexTangage, signeTangage, indexRoulis, signeRoulis }
|
|
-- convention normalisee: tangage negatif = nez bas,
|
|
-- roulis negatif = penche a gauche
|
|
-- joystick direction (devant|derriere|gauche|droite) -> face relay
|
|
-- typewriter code de touche -> symbole ("0".."9", "valider", "effacer")
|
|
-- velocite nom capteur -> { axe = avant|lateral|vertical,
|
|
-- signe = 1|-1 } (positif = avant/gauche/haut)
|
|
-- points nom -> { x, y, z } (max NAV.MAX_POINTS)
|
|
-- empreintePid parametres de conf au moment de la calib PID
|
|
--------------------------------------------------------------------
|
|
local Etat = {}
|
|
|
|
local CHEMIN = "drone.etat"
|
|
|
|
local DEFAUT = {
|
|
mode = "off",
|
|
consigneY = nil,
|
|
roles = {},
|
|
gimbal = nil,
|
|
joystick = nil,
|
|
typewriter = nil,
|
|
velocite = {},
|
|
points = {},
|
|
pid = nil,
|
|
empreintePid = nil,
|
|
decollage = nil,
|
|
}
|
|
|
|
function Etat.charger(journal)
|
|
local etat = {}
|
|
for k, v in pairs(DEFAUT) do etat[k] = v end
|
|
|
|
if fs.exists(CHEMIN) then
|
|
local f = fs.open(CHEMIN, "r")
|
|
local contenu = f.readAll()
|
|
f.close()
|
|
local lu = textutils.unserialize(contenu)
|
|
if type(lu) == "table" then
|
|
for k, v in pairs(lu) do etat[k] = v end
|
|
journal.info(("etat restaure (mode %s)"):format(etat.mode))
|
|
else
|
|
journal.alerte("drone.etat illisible, etat par defaut")
|
|
end
|
|
end
|
|
return etat
|
|
end
|
|
|
|
function Etat.sauver(etat)
|
|
local f = fs.open(CHEMIN, "w")
|
|
if f then
|
|
f.write(textutils.serialize(etat))
|
|
f.close()
|
|
end
|
|
end
|
|
|
|
return Etat
|