Drives and serial. #3
@ -4,6 +4,7 @@ extern char lua_boot[];
|
|||||||
extern char lua_component[];
|
extern char lua_component[];
|
||||||
extern char lua_computer[];
|
extern char lua_computer[];
|
||||||
extern char lua_debug[];
|
extern char lua_debug[];
|
||||||
|
extern char lua_drive[];
|
||||||
extern char lua_eeprom[];
|
extern char lua_eeprom[];
|
||||||
extern char lua_fbgpu[];
|
extern char lua_fbgpu[];
|
||||||
extern char lua_filesystem[];
|
extern char lua_filesystem[];
|
||||||
@ -12,9 +13,11 @@ extern char lua_gpudetect[];
|
|||||||
extern char lua_init[];
|
extern char lua_init[];
|
||||||
extern char lua_internet[];
|
extern char lua_internet[];
|
||||||
extern char lua_sandbox[];
|
extern char lua_sandbox[];
|
||||||
|
extern char lua_serial[];
|
||||||
extern char lua_textgpu[];
|
extern char lua_textgpu[];
|
||||||
extern char lua_util_buffer[];
|
extern char lua_util_buffer[];
|
||||||
extern char lua_util_color[];
|
extern char lua_util_color[];
|
||||||
extern char lua_util_random[];
|
extern char lua_util_random[];
|
||||||
|
extern char lua_uuidmgr[];
|
||||||
extern char lua_winapigpu[];
|
extern char lua_winapigpu[];
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,9 +22,13 @@ typedef unsigned short ushort;
|
|||||||
|
|
||||||
lua_State* getL();
|
lua_State* getL();
|
||||||
|
|
||||||
|
char * get_kbid(); // ugly hack
|
||||||
|
|
||||||
void run_init(int argc, char **argv);
|
void run_init(int argc, char **argv);
|
||||||
void lupi_init();
|
void lupi_init();
|
||||||
void luanative_start(lua_State *L);
|
void luanative_start(lua_State *L);
|
||||||
|
void serial_start(lua_State *L);
|
||||||
|
void blk_start(lua_State *L);
|
||||||
void fb_start(lua_State *L);
|
void fb_start(lua_State *L);
|
||||||
void setup_modules(lua_State *L);
|
void setup_modules(lua_State *L);
|
||||||
void termutils_start(lua_State *L);
|
void termutils_start(lua_State *L);
|
||||||
|
@ -35,7 +35,7 @@ static void handleStdin(evutil_socket_t fd, short what, void *eventc) {
|
|||||||
|
|
||||||
lua_getglobal(L, "pushEvent");
|
lua_getglobal(L, "pushEvent");
|
||||||
lua_pushstring(L, "key_down");
|
lua_pushstring(L, "key_down");
|
||||||
lua_pushstring(L, "TODO:SetThisUuid");/* Also in textgpu.lua */
|
lua_pushstring(L, get_kbid());/* Also in textgpu.lua */
|
||||||
lua_pushnumber(L, buf);
|
lua_pushnumber(L, buf);
|
||||||
lua_pushnumber(L, -1);
|
lua_pushnumber(L, -1);
|
||||||
lua_pushstring(L, "root");
|
lua_pushstring(L, "root");
|
||||||
@ -43,7 +43,7 @@ static void handleStdin(evutil_socket_t fd, short what, void *eventc) {
|
|||||||
|
|
||||||
lua_getglobal(L, "pushEvent");
|
lua_getglobal(L, "pushEvent");
|
||||||
lua_pushstring(L, "key_up");
|
lua_pushstring(L, "key_up");
|
||||||
lua_pushstring(L, "TODO:SetThisUuid");
|
lua_pushstring(L, get_kbid());
|
||||||
lua_pushnumber(L, buf);
|
lua_pushnumber(L, buf);
|
||||||
lua_pushnumber(L, -1);
|
lua_pushnumber(L, -1);
|
||||||
lua_pushstring(L, "root");
|
lua_pushstring(L, "root");
|
||||||
|
@ -476,6 +476,20 @@ static int l_debug (lua_State *L) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char * kbid = "TODO:SetThisUuid";
|
||||||
|
|
||||||
|
static int l_setkbid(lua_State *L) {
|
||||||
|
size_t len = 0;
|
||||||
|
char * id = luaL_checklstring(L, 1, &len);
|
||||||
|
kbid = malloc(len+1);
|
||||||
|
memcpy(kbid, id, len);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char * get_kbid() {
|
||||||
|
return kbid;
|
||||||
|
}
|
||||||
|
|
||||||
void luanative_start(lua_State *L) {
|
void luanative_start(lua_State *L) {
|
||||||
|
|
||||||
struct timeval tp;
|
struct timeval tp;
|
||||||
@ -511,6 +525,7 @@ void luanative_start(lua_State *L) {
|
|||||||
{"pull", l_pull},
|
{"pull", l_pull},
|
||||||
{"platform", l_platform},
|
{"platform", l_platform},
|
||||||
{"isinit", l_isinit},
|
{"isinit", l_isinit},
|
||||||
|
{"setkbid", l_setkbid},
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
{"debug", l_debug},
|
{"debug", l_debug},
|
||||||
#endif
|
#endif
|
||||||
|
@ -27,6 +27,7 @@ void setup_modules(lua_State *L) {
|
|||||||
pushstuple(L, "winapigpu", lua_winapigpu);
|
pushstuple(L, "winapigpu", lua_winapigpu);
|
||||||
pushstuple(L, "color", lua_util_color);
|
pushstuple(L, "color", lua_util_color);
|
||||||
pushstuple(L, "random", lua_util_random);
|
pushstuple(L, "random", lua_util_random);
|
||||||
|
pushstuple(L, "uuidmgr", lua_uuidmgr);
|
||||||
pushstuple(L, "buffer", lua_util_buffer);
|
pushstuple(L, "buffer", lua_util_buffer);
|
||||||
|
|
||||||
pushstuple(L, "eepromDefault", res_eepromDefault);
|
pushstuple(L, "eepromDefault", res_eepromDefault);
|
||||||
|
@ -48,7 +48,7 @@ function drive.register()
|
|||||||
return blk.size(disk)
|
return blk.size(disk)
|
||||||
end
|
end
|
||||||
|
|
||||||
modules.component.api.register("Block:"..ent, "drive", component)
|
modules.component.api.register(modules.uuidmgr.lookup("drive", ent), "drive", component)
|
||||||
else
|
else
|
||||||
lprint("Can't open blkdev: "..ent..": "..disk)
|
lprint("Can't open blkdev: "..ent..": "..disk)
|
||||||
end
|
end
|
||||||
|
@ -62,7 +62,7 @@ function eeprom.register()
|
|||||||
function component.makeReadonly()
|
function component.makeReadonly()
|
||||||
return false, "Method stub"
|
return false, "Method stub"
|
||||||
end
|
end
|
||||||
modules.component.api.register(nil, "eeprom", component)
|
modules.component.api.register(modules.uuidmgr.lookup("eeprom", "lmao"), "eeprom", component)
|
||||||
end
|
end
|
||||||
|
|
||||||
return eeprom
|
return eeprom
|
||||||
|
@ -165,9 +165,9 @@ function fbgpu.start()
|
|||||||
termutils.init()
|
termutils.init()
|
||||||
write("\x1b[?25l") --Disable cursor
|
write("\x1b[?25l") --Disable cursor
|
||||||
|
|
||||||
modules.component.api.register(nil, "gpu", gpu)
|
modules.component.api.register(modules.uuidmgr.lookup("gpu", "fbgpu"), "gpu", gpu)
|
||||||
screenAddr = modules.component.api.register(nil, "screen", {getKeyboards = function() return {"TODO:SetThisUuid"} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
screenAddr = modules.component.api.register(modules.uuidmgr.lookup("screen", "lmao"), "screen", {getKeyboards = function() return {modules.uuidmgr.lookup("keyboard", "lmao")} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
||||||
modules.component.api.register("TODO:SetThisUuid", "keyboard", {})
|
modules.component.api.register(modules.uuidmgr.lookup("keyboard", "lmao"), "keyboard", {})
|
||||||
|
|
||||||
deadhooks[#deadhooks + 1] = function()
|
deadhooks[#deadhooks + 1] = function()
|
||||||
write("\x1b[?25h") --Enable cursor on quit
|
write("\x1b[?25h") --Enable cursor on quit
|
||||||
|
@ -156,7 +156,7 @@ function filesystem.register(basePath, uuid)
|
|||||||
checkArg(1, value, "number")
|
checkArg(1, value, "number")
|
||||||
return value --TODO: Implement, use real labels
|
return value --TODO: Implement, use real labels
|
||||||
end
|
end
|
||||||
return modules.component.api.register(uuid, "filesystem", fs)
|
return modules.component.api.register(modules.uuidmgr.lookup("filesystem", basePath), "filesystem", fs)
|
||||||
end
|
end
|
||||||
|
|
||||||
return filesystem
|
return filesystem
|
||||||
|
@ -68,7 +68,7 @@ gpio.register = function ()
|
|||||||
end
|
end
|
||||||
return _read("/sys/class/gpio/gpio" .. pin .. "/value")
|
return _read("/sys/class/gpio/gpio" .. pin .. "/value")
|
||||||
end
|
end
|
||||||
return modules.component.api.register(uuid, "gpio", component)
|
return modules.component.api.register(modules.uuidmgr.lookup("gpio", "lmao"), "gpio", component)
|
||||||
end
|
end
|
||||||
|
|
||||||
return gpio
|
return gpio
|
||||||
|
@ -78,10 +78,14 @@ function main()
|
|||||||
loadModule("debug")
|
loadModule("debug")
|
||||||
end
|
end
|
||||||
loadModule("random")
|
loadModule("random")
|
||||||
|
loadModule("uuidmgr")
|
||||||
loadModule("color")
|
loadModule("color")
|
||||||
loadModule("buffer")
|
loadModule("buffer")
|
||||||
|
|
||||||
modules.address = modules.random.uuid() --TODO: PREALPHA: Make constant
|
--modules.address = modules.random.uuid() --TODO: PREALPHA: Make constant
|
||||||
|
modules.address = modules.uuidmgr.lookup("modules", "lmao") --Made constant
|
||||||
|
native.setkbid(modules.uuidmgr.lookup("keyboard", "lmao"))
|
||||||
|
|
||||||
|
|
||||||
--Core
|
--Core
|
||||||
loadModule("component")
|
loadModule("component")
|
||||||
@ -127,7 +131,7 @@ function main()
|
|||||||
if native.debug then
|
if native.debug then
|
||||||
modules.debug.hook()
|
modules.debug.hook()
|
||||||
end
|
end
|
||||||
|
modules.uuidmgr.store()
|
||||||
modules.boot.boot()
|
modules.boot.boot()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ function internet.start()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
modules.component.api.register(nil, "internet", component)
|
modules.component.api.register(modules.uuidmgr.lookup("internet", "lmao"), "internet", component)
|
||||||
end
|
end
|
||||||
|
|
||||||
return internet
|
return internet
|
||||||
|
@ -24,7 +24,7 @@ function com.register()
|
|||||||
return serial.read(dev, amt)
|
return serial.read(dev, amt)
|
||||||
end
|
end
|
||||||
|
|
||||||
modules.component.api.register("Serial:"..ports[i], "serial", component)
|
modules.component.api.register(modules.uuidmgr.lookup("serial", ports[i]), "serial", component)
|
||||||
::continue::
|
::continue::
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -255,9 +255,9 @@ function textgpu.start()
|
|||||||
gpu.setForeground(0xFFFFFF)
|
gpu.setForeground(0xFFFFFF)
|
||||||
gpu.setBackground(0x000000)
|
gpu.setBackground(0x000000)
|
||||||
|
|
||||||
local gpuaddr = modules.component.api.register(nil, "gpu", gpu)
|
local gpuaddr = modules.component.api.register(modules.uuidmgr.lookup("gpu", "text"), "gpu", gpu)
|
||||||
screenAddr = modules.component.api.register(nil, "screen", {getKeyboards = function() return {"TODO:SetThisUuid"} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
screenAddr = modules.component.api.register(modules.uuidmgr.lookup("screen", "lmao"), "screen", {getKeyboards = function() return {modules.uuidmgr.lookup("keyboard", "lmao")} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
||||||
modules.component.api.register("TODO:SetThisUuid", "keyboard", {})
|
modules.component.api.register(modules.uuidmgr.lookup("keyboard", "lmao"), "keyboard", {})
|
||||||
|
|
||||||
deadhooks[#deadhooks + 1] = function()
|
deadhooks[#deadhooks + 1] = function()
|
||||||
write("\x1b[?25h\x1b[" .. ((h-1)|0) .. ";1H") --Enable cursor on quit
|
write("\x1b[?25h\x1b[" .. ((h-1)|0) .. ";1H") --Enable cursor on quit
|
||||||
|
63
src/lua/core/uuidmgr.lua
Normal file
63
src/lua/core/uuidmgr.lua
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
local uuidmgr = {}
|
||||||
|
|
||||||
|
local uuidstorage = {}
|
||||||
|
|
||||||
|
local storeheader = "c32BH"
|
||||||
|
|
||||||
|
do
|
||||||
|
local store = io.open("uuidstore.dat", "r")
|
||||||
|
if store then
|
||||||
|
pcall(function()
|
||||||
|
local count = string.unpack("H", store:read(2))
|
||||||
|
for i=1, count do
|
||||||
|
local uuid, clen, ilen = storeheader:unpack(store:read(storeheader:packsize()))
|
||||||
|
local cname, id = store:read(clen), store:read(ilen)
|
||||||
|
uuidstorage[cname] = uuidstorage[cname] or {}
|
||||||
|
uuidstorage[cname][id] = uuid
|
||||||
|
end
|
||||||
|
store:close()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function uuidmgr.lookup(component, identifier)
|
||||||
|
uuidstorage[component] = uuidstorage[component] or {}
|
||||||
|
local uuid = uuidstorage[component][identifier]
|
||||||
|
if not uuid then
|
||||||
|
uuid = modules.random.uuid()
|
||||||
|
if native.debug then
|
||||||
|
lprint(string.format("DEBUG: Registed component of type %s with identifier %s as uuid %s", component, identifier, uuid))
|
||||||
|
end
|
||||||
|
uuidstorage[component][identifier] = uuid
|
||||||
|
uuidmgr.store()
|
||||||
|
else
|
||||||
|
if native.debug then
|
||||||
|
lprint(string.format("DEBUG: Looked up component of type %s with identifier %s as uuid %s", component, identifier, uuid))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return uuid
|
||||||
|
end
|
||||||
|
|
||||||
|
function uuidmgr.store()
|
||||||
|
local store = io.open("uuidstore.dat", "w")
|
||||||
|
local saved_ids = {}
|
||||||
|
for component, ids in pairs(uuidstorage) do
|
||||||
|
for id, uuid in pairs(ids) do
|
||||||
|
table.insert(saved_ids, {uuid=uuid, component=component, id=id})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if native.debug then
|
||||||
|
lprint(string.format("DEBUG: Saving %d static UUIDs", #saved_ids))
|
||||||
|
end
|
||||||
|
store:write(string.pack("H", #saved_ids))
|
||||||
|
for i=1, #saved_ids do
|
||||||
|
local uuid, component, id = saved_ids[i].uuid, saved_ids[i].component, saved_ids[i].id
|
||||||
|
store:write(storeheader:pack(uuid, #component, #id),component,id)
|
||||||
|
if native.debug then
|
||||||
|
lprint(string.format("DEBUG: Saving %s:%s as %s", component, id, uuid))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
store:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
return uuidmgr
|
@ -158,9 +158,9 @@ function wingpu.start()
|
|||||||
lprint("Couldn't open window: " .. tostring(reason))
|
lprint("Couldn't open window: " .. tostring(reason))
|
||||||
end
|
end
|
||||||
|
|
||||||
modules.component.api.register(nil, "gpu", gpu)
|
modules.component.api.register(modules.uuidmgr.lookup("gpu", "wingpu"), "gpu", gpu)
|
||||||
screenAddr = modules.component.api.register(nil, "screen", {getKeyboards = function() return {"TODO:SetThisUuid"} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
screenAddr = modules.component.api.register(modules.uuidmgr.lookup("screen", "lmao"), "screen", {getKeyboards = function() return {modules.uuidmgr.lookup("keyboard", "lmao")} end}) --verry dummy screen, TODO: make it better, kbd uuid also in epoll.c
|
||||||
modules.component.api.register("TODO:SetThisUuid", "keyboard", {})
|
modules.component.api.register(modules.uuidmgr.lookup("keyboard", "lmao"), "keyboard", {})
|
||||||
|
|
||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user