Advertisement
Guest User

libmod

a guest
Jun 26th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.74 KB | None | 0 0
  1. _G.peripheral = {}
  2.  
  3. local function getPSide(side)
  4.    for k,v in pairs(fs.list("/dev/")) do
  5.       if string.find(v,"ttyS") then
  6.          local f = kernel.open("/dev/"..v,"w")
  7.          local f2 = kernel.open("/dev/"..v,"r")
  8.          kernel.write(f,"getSide")
  9.          local ret = kernel.read(f2)
  10.          kernel.close(f)
  11.          kernel.close(f2)
  12.          if ret == side then
  13.             return "/dev/"..v
  14.          end
  15.       end
  16.    end
  17. end
  18.  
  19. function peripheral.isPresent(side)
  20.    return getPSide(side) ~= nil
  21. end
  22.  
  23. local function check(side)
  24.    if not isPresent(side) then
  25.       error("No peripheral on side "..side,3)
  26.    end
  27. end
  28.  
  29.  
  30. function peripheral.getType(side)
  31.    check(side)
  32.    local dev = getPSide(side)
  33.    local f = kernel.open(dev,"w")
  34.    local f2 = kernel.open(dev,"r")
  35.    kernel.write(f,"getType")
  36.    local ret = kernel.read(f2)
  37.    kernel.close(f)
  38.    kernel.close(f2)
  39.    return ret
  40. end
  41.  
  42.  
  43. function peripheral.getMethods(side)
  44.    check(side)
  45.    local dev = getPSide(side)
  46.    local f = kernel.open(dev,"w")
  47.    local f2 = kernel.open(dev,"r")
  48.    kernel.write(f,"getFunctions")
  49.    local ret = kernel.read(f2)
  50.    kernel.close(f)
  51.    kernel.close(f2)
  52.    return ret
  53. end
  54.  
  55.  
  56. function peripheral.call(side, func, ...)
  57.    check(side)
  58.    local dev = getPSide(side)
  59.    local f = kernel.open(dev,"w")
  60.    local f2 = kernel.open(dev,"r")
  61.    local temp = ""
  62.    for k,v in pairs({...}) do
  63.       temp = temp.." "..v
  64.    end
  65.    temp = temp:sub(2)
  66.    kernel.write(f,func.." "..temp)
  67.    return kernel.read(f2) , kernel.close(f) , kernel.close(f2)
  68. end
  69.  
  70.  
  71. function peripheral.wrap(side)
  72.    check(side)
  73.    local funcs = getMethods(side)
  74.    local ret = {};
  75.    for index, value in pairs(funcs) do
  76.       ret[value] = function(...)
  77.          return call(side, value, ...);
  78.       end
  79.    end
  80.    return ret;
  81. end
  82.  
  83.  
  84. function peripheral.find(type)
  85.    for k,v in pairs(fs.list("/dev/")) do
  86.       if string.find(v,"ttyS") then
  87.          local f = kernel.open("/dev/"..v,"w")
  88.          local f2 = kernel.open("/dev/"..v,"r")
  89.          kernel.write(f,"getType")
  90.          local ret = kernel.read(f2)
  91.          kernel.write(f,"getSide")
  92.          kernel.close(f)
  93.          local side = kernel.read(f2)
  94.          kernel.close(f2)
  95.          if ret == type then
  96.             return wrap(side)
  97.          end
  98.       end
  99.    end
  100. end
  101.  
  102.  
  103. function peripheral.getNames()
  104.    local tbl = {}
  105.    local str = "/dev/"
  106.    for k,v in pairs(fs.list("/dev/")) do
  107.       if string.find(v,"ttyS") then
  108.          local f = kernel.open(str..v,"w")
  109.          local f2 = kernel.open(str..v,"r")
  110.          kernel.write(f,"getSide")
  111.          table.insert(tbl,kernel.read(f2))
  112.          kernel.close(f)
  113.          kernel.close(f2)
  114.       end
  115.    end
  116.    return tbl
  117. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement