local component = require("component") local shell = require("shell") local fs = require("filesystem") local args, options = shell.parse(...) if #args < 1 and not options.l then io.write("Usage: flash [-qlr] [] [label]\n") io.write(" q: quiet mode, don't ask questions.\n") io.write(" l: print current contents of installed EEPROM.\n") io.write(" r: save the current contents of installed EEPROM to file.\n") return end local function printRom() local eeprom = component.eeprom io.write(eeprom.get()) return nil end local function readRom() local eeprom = component.eeprom local fileName = shell.resolve(args[1]) if not options.q then if fs.exists(fileName) then io.write("Are you sure you want to overwrite " .. fileName .. "?\n") io.write("Type `y` to confirm.\n") repeat local response = io.read() until response and response:lower():sub(1, 1) == "y" end io.write("Reading EEPROM " .. eeprom.address .. ".\n" ) end local bios = eeprom.get() local file = assert(io.open(fileName, "wb")) file:write(bios) file:close() if not options.q then io.write("All done!\nThe label is '" .. eeprom.getLabel() .. "'.\n") end return nil end local function writeRom() local file = assert(io.open(args[1], "rb")) local bios = file:read("*a") file:close() if not options.q then io.write("Insert the EEPROM you would like to flash.\n") io.write("When ready to write, type `y` to confirm.\n") repeat local response = io.read() until response and response:lower():sub(1, 1) == "y" io.write("Beginning to flash EEPROM.\n") end local eeprom = component.eeprom if not options.q then io.write("Flashing EEPROM " .. eeprom.address .. ".\n") io.write("Please do NOT power down or restart your computer during this operation!\n") end local result, reason = eeprom.set(bios) if reason then return nil, reason end local label = args[2] if not options.q and not label then io.write("Enter new label for this EEPROM. Leave input blank to leave the label unchanged.\n") label = io.read() end if label and #label > 0 then local result, reason = eeprom.setLabel(label) if reason then return nil, reason end if not options.q then io.write("Set label to '" .. eeprom.getLabel() .. "'.\n") end end if not options.q then io.write("All done! You can remove the EEPROM and re-insert the previous one now.\n") end return nil end local result, reason if options.l then result, reason = printRom() elseif options.r then result, reason = readRom() else result, reason = writeRom() end if reason then io.stderr:write(reason..'\n') return 1 end