0
0
mirror of https://github.com/Doodle3D/doodle3d-firmware.git synced 2024-07-01 13:41:23 +02:00

Compare commits

..

No commits in common. "master" and "0.11.0-a" have entirely different histories.

4 changed files with 99 additions and 113 deletions

View File

@ -1,13 +1,4 @@
Changelog Changelog
# 0.11.0 (12 jul 2017)
# 0.11.0-c (10 jul 2017)
- fix: Also closing file descriptor after removing current print file (commit 550e151)
# 0.11.0-b (6 jul 2017)
- show id of current print in d3dapi/info/status when printing in 'fetch' mode.
- code reuse and cleanup for control, kill and status
# 0.11.0-a (23 jun 2017) # 0.11.0-a (23 jun 2017)
- Added 'fetch' functionality to let the WiFi-Box print from a remote server. This enables the WiFi-Box to print large g-code files. (yeah!) - Added 'fetch' functionality to let the WiFi-Box print from a remote server. This enables the WiFi-Box to print large g-code files. (yeah!)
- Added support for the Renkforce RF100 printer. - Added support for the Renkforce RF100 printer.

View File

@ -1 +1 @@
0.11.0 0.11.0-a

View File

@ -48,36 +48,6 @@ function M.temperature(request, response)
end end
end end
local function setCurrentPrint(id)
local cpfileName = "/tmp/current-print"
if id == nil then
io.popen('rm ' .. cpfileName):close()
return true
end
local cpfile = io.open(cpfileName, 'w+')
if cpfile == nil then
return false
end
cpfile:write(id)
cpfile:close()
return true
end
local function getCurrentPrint()
local idfile = io.open('/tmp/current-print')
if idfile ~= nil then
return idfile:read('*a')
end
end
local function stopFetch()
log:verbose(MOD_ABBR, "stopping print-fetch and removing start/endgcode")
io.popen("killall print-fetch"):close()
io.popen("rm /tmp/startcode /tmp/endcode"):close()
setCurrentPrint(nil)
end
function M.progress(request, response) function M.progress(request, response)
local argId = request:get("id") local argId = request:get("id")
local printer,msg = printerUtils.createPrinterOrFail(argId, response) local printer,msg = printerUtils.createPrinterOrFail(argId, response)
@ -86,7 +56,11 @@ function M.progress(request, response)
-- NOTE: despite their names, `currentLine` is still the error indicator and `bufferedLines` the message in such case. -- NOTE: despite their names, `currentLine` is still the error indicator and `bufferedLines` the message in such case.
local currentLine,bufferedLines,totalLines,bufferSize,maxBufferSize,seqNumber,seqTotal = printer:getProgress() local currentLine,bufferedLines,totalLines,bufferSize,maxBufferSize,seqNumber,seqTotal = printer:getProgress()
local printId = getCurrentPrint() local idfile = io.open('/tmp/currentprint')
local printId
if idfile ~= nil then
printId = idfile:read('*a')
end
response:addData('id', argId) response:addData('id', argId)
@ -192,13 +166,14 @@ function M.stop_POST(request, response)
local printer,msg = printerUtils.createPrinterOrFail(argId, response) local printer,msg = printerUtils.createPrinterOrFail(argId, response)
if not printer or not printer:hasSocket() then return end if not printer or not printer:hasSocket() then return end
stopFetch()
if(argGcode == nil) then if(argGcode == nil) then
argGcode = "" argGcode = ""
end end
local rv,msg = printer:stopPrint(argGcode) local rv,msg = printer:stopPrint(argGcode)
io.popen("killall print-fetch")
io.popen("rm /tmp/currentprint /tmp/startcode /tmp/endcode")
response:addData('id', argId) response:addData('id', argId)
if rv then if rv then
@ -225,24 +200,32 @@ local function addSequenceNumbering(printer, response)
end end
function M.fetch_POST(request, response) function M.fetch_POST(request, response)
if not accessManager.hasControl(request.remoteAddress) then
response:setFail("No control access")
return
else
accessManager.setController(request.remoteAddress)
end
local printer,msg = printerUtils.createPrinterOrFail(argId, response) local printer,msg = printerUtils.createPrinterOrFail(argId, response)
if not printer or not printer:hasSocket() then return end if not printer or not printer:hasSocket() then return end
local state = printer:getState() local controllerIP = accessManager.getController()
if state ~= "idle" then local hasControl = false
response:setFail("printer is not idle") if controllerIP == "" then
accessManager.setController(request.remoteAddress)
hasControl = true
elseif controllerIP == request.remoteAddress then
hasControl = true
end
if not hasControl then
response:setFail("No control access")
return return
end end
local state = printer:getState()
if state ~= "idle" then
response:setError("printer is not idle")
return
end
log:verbose(MOD_ABBR, " clearing all gcode for " .. printer:getId()) log:verbose(MOD_ABBR, " clearing all gcode for " .. printer:getId())
stopFetch() response:addData('gcode_clear',true)
local rv,msg = printer:clearGcode() local rv,msg = printer:clearGcode()
if rv == false then if rv == false then
@ -274,6 +257,7 @@ function M.fetch_POST(request, response)
return return
end end
endCodeFile:write(endCode) endCodeFile:write(endCode)
end end
local socket = printer:getId() local socket = printer:getId()
@ -291,9 +275,14 @@ function M.fetch_POST(request, response)
response:setError("no id supplied") response:setError("no id supplied")
return return
end end
setCurrentPrint(id) local cpfile = io.open("/tmp/currentprint", 'w+')
if cpfile == nil then
response:setError("could not save id")
return
end
cpfile:write(id)
cpfile:close()
log:info(MOD_ABBR, " starting fetch print. id: " .. id .. " server: " .. gcodeServer)
io.popen("print-fetch " .. socket .. " " .. gcodeServer .. " " .. id .. gcodeFiles) io.popen("print-fetch " .. socket .. " " .. gcodeServer .. " " .. id .. gcodeFiles)
response:setSuccess() response:setSuccess()
@ -311,12 +300,20 @@ end
-- a fail with a (formal, i.e., parseable) status argument will be returned; -- a fail with a (formal, i.e., parseable) status argument will be returned;
-- additionally, current sequence number and total will be returned (both are -1 if they have not been set) -- additionally, current sequence number and total will be returned (both are -1 if they have not been set)
function M.print_POST(request, response) function M.print_POST(request, response)
if not accessManager.hasControl(request.remoteAddress) then local controllerIP = accessManager.getController()
local hasControl = false
if controllerIP == "" then
accessManager.setController(request.remoteAddress)
hasControl = true
elseif controllerIP == request.remoteAddress then
hasControl = true
end
if not hasControl then
response:setFail("No control access") response:setFail("No control access")
return return
else
accessManager.setController(request.remoteAddress)
end end
local argId = request:get("id") local argId = request:get("id")
local argGcode = request:get("gcode") local argGcode = request:get("gcode")
local argClear = utils.toboolean(request:get("clear")) local argClear = utils.toboolean(request:get("clear"))
@ -332,8 +329,6 @@ function M.print_POST(request, response)
local printer,msg = printerUtils.createPrinterOrFail(argId, response) local printer,msg = printerUtils.createPrinterOrFail(argId, response)
if not printer or not printer:hasSocket() then return end if not printer or not printer:hasSocket() then return end
stopFetch()
response:addData('id', argId) response:addData('id', argId)
if argGcode == nil or argGcode == '' then if argGcode == nil or argGcode == '' then

View File

@ -1,13 +1,13 @@
#!/usr/bin/lua #!/usr/bin/lua
local function log(message) local function log(message)
os.execute("logger " .. message) os.execute("logger " .. message)
print(message) print(message)
end end
if (table.getn(arg) == 0) then if (table.getn(arg) == 0) then
print("Usage: ./print-fetch {printerSocket} {gcodeServerURL} {id} [startGcode] [endGCode]") print("Usage: ./print-fetch {printerSocket} {gcodeServerURL} {id} [startGcode] [endGCode]")
return return
end end
log("starting gcode fetch program") log("starting gcode fetch program")
@ -19,8 +19,8 @@ local p3d = require("print3d")
local printer = p3d.getPrinter(arg[1]) local printer = p3d.getPrinter(arg[1])
if printer == nil then if printer == nil then
log("error connecting to printer") log("error connecting to printer")
return return
end end
local gcodeServer = arg[2] local gcodeServer = arg[2]
@ -35,8 +35,8 @@ log("gcode server: " .. gcodeServer)
local info = JSON:decode(io.popen("wget -qO - " .. gcodeServer .. "/info/" .. id):read("*a")) local info = JSON:decode(io.popen("wget -qO - " .. gcodeServer .. "/info/" .. id):read("*a"))
if info == nil then if info == nil then
log("could not retrieve file info") log("could not retrieve file info")
return return
end end
local current_line = 0 local current_line = 0
@ -49,64 +49,64 @@ local startCode = nil
local endCode = nil local endCode = nil
function countlines(file) function countlines(file)
return tonumber(io.popen("wc -l < " .. file):read('*a')) return tonumber(io.popen("wc -l < " .. file):read('*a'))
end end
function readGCodeArg(argi) function readGCodeArg(argi)
local gcodeFile = arg[argi] local gcodeFile = arg[argi]
return io.open(gcodeFile):read('*a') return io.open(gcodeFile):read('*a')
end end
if table.getn(arg) >= 5 then if table.getn(arg) >= 5 then
startCode = readGCodeArg(4) startCode = readGCodeArg(4)
endCode = readGCodeArg(5) endCode = readGCodeArg(5)
end end
if startCode ~= nil then if startCode ~= nil then
log("appending start gcode") log("appending start gcode")
printer:appendGcode(startCode) printer:appendGcode(startCode)
end end
while(not finished) while(not finished)
do do
local f = io.popen("wget -qO - " .. gcodeServer .. "/fetch/" .. id .. "/" .. current_line) local f = io.popen("wget -qO - " .. gcodeServer .. "/fetch/" .. id .. "/" .. current_line)
local line = f:read() local line = f:read()
while line ~= nil do while line ~= nil do
printer:appendGcode(line, total_lines, { seq_number = -1, seq_total = -1, source = id }) printer:appendGcode(line, total_lines, { seq_number = -1, seq_total = -1, source = id })
current_line = current_line + 1 current_line = current_line + 1
line = f:read() line = f:read()
end
if not started then
started = true
print("send print start command")
printer:startPrint()
end
if current_line >= total_lines then
log("finished fetching gcode")
if endCode ~= nil then
log("appending end gcode")
printer:appendGcode(endCode, total_lines, { seq_number = -1, seq_total = -1, source = id })
end end
finished = true
break
end
if not started then
started = true local accepts_new_gcode = false
print("send print start command")
printer:startPrint() while (not accepts_new_gcode)
end do
local current,buffer,total,bufferSize,maxBufferSize = printer:getProgress()
if current_line >= total_lines then local percentageBufferSize = bufferSize / maxBufferSize
log("finished fetching gcode")
if endCode ~= nil then if percentageBufferSize < 0.8 then
log("appending end gcode") print("buffer below 80% capacity, sending new gcode")
printer:appendGcode(endCode, total_lines, { seq_number = -1, seq_total = -1, source = id }) accepts_new_gcode = true
end else
finished = true print("buffer above 80% capacity")
break os.execute("sleep 10")
end
local accepts_new_gcode = false
while (not accepts_new_gcode)
do
local current,buffer,total,bufferSize,maxBufferSize = printer:getProgress()
local percentageBufferSize = bufferSize / maxBufferSize
if percentageBufferSize < 0.8 then
print("buffer below 80% capacity, sending new gcode")
accepts_new_gcode = true
else
print("buffer above 80% capacity")
os.execute("sleep 10")
end
end end
end
end end