84 lines
3.2 KiB
Lua
84 lines
3.2 KiB
Lua
|
--
|
||
|
-- File: _init.lua
|
||
|
--[[
|
||
|
|
||
|
This is a template for the LFS equivalent of the SPIFFS init.lua.
|
||
|
|
||
|
It is a good idea to such an _init.lua module to your LFS and do most of the LFS
|
||
|
module related initialisaion in this. This example uses standard Lua features to
|
||
|
simplify the LFS API.
|
||
|
|
||
|
The first section adds a 'LFS' table to _G and uses the __index metamethod to
|
||
|
resolve functions in the LFS, so you can execute the main function of module
|
||
|
'fred' by executing LFS.fred(params), etc. It also implements some standard
|
||
|
readonly properties:
|
||
|
|
||
|
LFS._time The Unix Timestamp when the luac.cross was executed. This can be
|
||
|
used as a version identifier.
|
||
|
|
||
|
LFS._config This returns a table of useful configuration parameters, hence
|
||
|
print (("0x%6x"):format(LFS._config.lfs_base))
|
||
|
gives you the parameter to use in the luac.cross -a option.
|
||
|
|
||
|
LFS._list This returns a table of the LFS modules, hence
|
||
|
print(table.concat(LFS._list),'\n')
|
||
|
gives you a single column listing of all modules in the LFS.
|
||
|
|
||
|
---------------------------------------------------------------------------------]]
|
||
|
|
||
|
local index = node.flashindex
|
||
|
|
||
|
local lfs_t = {
|
||
|
__index = function(_, name)
|
||
|
local fn_ut, ba, ma, size, modules = index(name)
|
||
|
if not ba then
|
||
|
return fn_ut
|
||
|
elseif name == '_time' then
|
||
|
return fn_ut
|
||
|
elseif name == '_config' then
|
||
|
local fs_ma, fs_size = file.fscfg()
|
||
|
return {lfs_base = ba, lfs_mapped = ma, lfs_size = size,
|
||
|
fs_mapped = fs_ma, fs_size = fs_size}
|
||
|
elseif name == '_list' then
|
||
|
return modules
|
||
|
else
|
||
|
return nil
|
||
|
end
|
||
|
end,
|
||
|
|
||
|
__newindex = function(_, name, value)
|
||
|
error("LFS is readonly. Invalid write to LFS." .. name, 2)
|
||
|
end,
|
||
|
|
||
|
}
|
||
|
|
||
|
local G=getfenv()
|
||
|
G.LFS = setmetatable(lfs_t,lfs_t)
|
||
|
|
||
|
--[[-------------------------------------------------------------------------------
|
||
|
The second section adds the LFS to the require searchlist, so that you can
|
||
|
require a Lua module 'jean' in the LFS by simply doing require "jean". However
|
||
|
note that this is at the search entry following the FS searcher, so if you also
|
||
|
have jean.lc or jean.lua in SPIFFS, then this SPIFFS version will get loaded into
|
||
|
RAM instead of using. (Useful, for development).
|
||
|
|
||
|
Note that if you want LFS to take a higher priority than SPIFFS, the use the [2]
|
||
|
slot for loaders. If you want to reverse these in your init.lua or interactively
|
||
|
for debugging, then use
|
||
|
|
||
|
do local pl = package.loaders; pl[2],pl[4] = pl[4],pl[2]; end
|
||
|
---------------------------------------------------------------------------------]]
|
||
|
|
||
|
package.loaders[4] = function(module) -- loader_flash
|
||
|
local fn, ba = index(module)
|
||
|
return ba and "Module not in LFS" or fn
|
||
|
end
|
||
|
|
||
|
--[[-------------------------------------------------------------------------------
|
||
|
You can add any other initialisation here, for example a couple of the globals
|
||
|
are never used, so setting them to nil saves a couple of global entries
|
||
|
---------------------------------------------------------------------------------]]
|
||
|
|
||
|
G.module = nil -- disable Lua 5.0 style modules to save RAM
|
||
|
package.seeall = nil
|