-- Based off https://oc.cil.li/topic/1570-drone-controll-bios/ -- Modified by enthusiasticGeek to give the drone inventory capabilities, as well as the ability to update itself without disassembly. -- Version 0.01 local fwv = "0.01" local d = component.proxy(component.list("drone")()) local t = component.proxy(component.list("modem")()) local eeprom = component.proxy(component.list("eeprom")()) local interweb = component.proxy(component.list("internet")()) local fwaddress = "https://raw.githubusercontent.com/DremOSDeveloperTeam/opencomputers-drone/master/drone.lua" local commport = 6500 t.open(6500) while true do d.setLightColor(0x0000FF) local evt,_,sender,port,_,name,cmd,a,b,c = computer.pullSignal() computer.beep() -- Debug d.setLightColor(0xFFFFFF) if evt == "modem_message" and name == d.name() then d.setLightColor(0xFF00FF) if cmd == "gfw" then -- Get Firmware Version t.broadcast(commport, fwv) end if cmd == "ufw" then -- Update Firmware. Essentially stolen from https://github.com/osmarks/oc-drone/ local web_request = interweb.request(fwaddress) t.broadcast(commport, "Updating firmware...") t.broadcast(commport, " Connecting...") web_request.finishConnect() t.broadcast(commport, " Connected!") t.broadcast(commport, " Downloading new firmware...") local full_response = "" while true do local chunk = web_request.read() if chunk then str.gsub(chunk, "\r\n", "\n") full_response = full_response .. chunk else break end end t.broadcast(commport, " Firmware file downloaded!") t.broadcast(commport, " Flashing new firmware...") eeprom.set(full_response) t.broadcast(commport, " Done flashing firmware!") t.broadcast(commport, "Update process done! Please reboot the drone for changes to take effect.") end if cmd == "gst" then -- Get Status Text t.broadcast(commport, d.name(),"gst",d.getStatusText()) end if cmd == "sst" then -- Set Status Text t.broadcast(commport, d.name(),"sst",d.setStatusText(a)) end if cmd == "mov" then -- MOVe d.move(a,b,c) end if cmd == "gos" then -- Get OffSet t.broadcast(commport, d.name(),"gos",d.getOffset()) end if cmd == "gve" then -- Get VElocity t.broadcast(commport, d.name(),"gv",d.getVelocity()) end if cmd == "gmv" then -- Get Max Velocity t.send(commport, d.name(),"gmv",d.getMaxVelocity()) end if cmd == "gac" then -- Get ACceleration t.broadcast(commport, d.name(),"ga",d.getAcceleration()) end if cmd == "sac" then -- Set ACceleration d.setAcceleration(a) end if cmd == "glc" then -- Get Light Color t.broadcast(commport, d.name(),"glc",d.getLightColor()) end if cmd == "slc" then -- Set Light Color (RGB is important!) d.setLightColor(a) end if cmd == "eif" then -- External Inventory Find (Instead of detect) local b, s = d.detect(a) t.broadcast(commport, d.name(),"dct",b,s) end if cmd == "eco" then -- External inventory COmpare t.broadcast(commport, d.name(),"c",d.compare(a)) end if cmd == "esu" then -- External inventory SUck o = d.suck(a, b) t.broadcast(commport, o) end if cmd == "edr" then -- External inventory DRop o = d.drop(a, b) t.broadcast(commport, o) end if cmd == "igs" then -- Internal inventory Get Slot t.broadcast(commport, d.select()) end if cmd == "iss" then -- Internal inventory Set Slot o = d.select(a) t.broadcast(commport, o) end if cmd == "gis" then -- Get Inventory Size t.broadcast(commport, d.inventorySize()) end if cmd == "gsr" then -- Get Slot space Remaining t.broadcast(commport, d.space(a)) end end end