Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _G.peripheral = {}
- local function getPSide(side)
- for k,v in pairs(fs.list("/dev/")) do
- if string.find(v,"ttyS") then
- local f = kernel.open("/dev/"..v,"w")
- local f2 = kernel.open("/dev/"..v,"r")
- kernel.write(f,"getSide")
- local ret = kernel.read(f2)
- kernel.close(f)
- kernel.close(f2)
- if ret == side then
- return "/dev/"..v
- end
- end
- end
- end
- function peripheral.isPresent(side)
- return getPSide(side) ~= nil
- end
- local function check(side)
- if not isPresent(side) then
- error("No peripheral on side "..side,3)
- end
- end
- function peripheral.getType(side)
- check(side)
- local dev = getPSide(side)
- local f = kernel.open(dev,"w")
- local f2 = kernel.open(dev,"r")
- kernel.write(f,"getType")
- local ret = kernel.read(f2)
- kernel.close(f)
- kernel.close(f2)
- return ret
- end
- function peripheral.getMethods(side)
- check(side)
- local dev = getPSide(side)
- local f = kernel.open(dev,"w")
- local f2 = kernel.open(dev,"r")
- kernel.write(f,"getFunctions")
- local ret = kernel.read(f2)
- kernel.close(f)
- kernel.close(f2)
- return ret
- end
- function peripheral.call(side, func, ...)
- check(side)
- local dev = getPSide(side)
- local f = kernel.open(dev,"w")
- local f2 = kernel.open(dev,"r")
- local temp = ""
- for k,v in pairs({...}) do
- temp = temp.." "..v
- end
- temp = temp:sub(2)
- kernel.write(f,func.." "..temp)
- return kernel.read(f2) , kernel.close(f) , kernel.close(f2)
- end
- function peripheral.wrap(side)
- check(side)
- local funcs = getMethods(side)
- local ret = {};
- for index, value in pairs(funcs) do
- ret[value] = function(...)
- return call(side, value, ...);
- end
- end
- return ret;
- end
- function peripheral.find(type)
- for k,v in pairs(fs.list("/dev/")) do
- if string.find(v,"ttyS") then
- local f = kernel.open("/dev/"..v,"w")
- local f2 = kernel.open("/dev/"..v,"r")
- kernel.write(f,"getType")
- local ret = kernel.read(f2)
- kernel.write(f,"getSide")
- kernel.close(f)
- local side = kernel.read(f2)
- kernel.close(f2)
- if ret == type then
- return wrap(side)
- end
- end
- end
- end
- function peripheral.getNames()
- local tbl = {}
- local str = "/dev/"
- for k,v in pairs(fs.list("/dev/")) do
- if string.find(v,"ttyS") then
- local f = kernel.open(str..v,"w")
- local f2 = kernel.open(str..v,"r")
- kernel.write(f,"getSide")
- table.insert(tbl,kernel.read(f2))
- kernel.close(f)
- kernel.close(f2)
- end
- end
- return tbl
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement