mirror of
https://github.com/Doodle3D/doodle3d-firmware.git
synced 2024-12-22 11:03:48 +01:00
Merge branch 'develop'
This commit is contained in:
commit
134c741018
5
Makefile
5
Makefile
@ -15,7 +15,7 @@ IncludeWithNewlines = $(subst
|
||||
|
||||
# Name and release number of this package
|
||||
PKG_NAME := wifibox
|
||||
PKG_VERSION := 0.1.0
|
||||
PKG_VERSION := 0.1.1
|
||||
PKG_RELEASE := 7
|
||||
|
||||
# This specifies the directory where we're going to build the program.
|
||||
@ -100,7 +100,8 @@ define Package/wifibox/install
|
||||
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/d3d-updater.lua $(1)/$(TGT_LUA_DIR_SUFFIX)/script
|
||||
$(LN) -s /$(TGT_LUA_DIR_SUFFIX)/script/d3d-updater.lua $(1)/bin/d3d-updater
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/wifibox_init $(1)/etc/init.d/wifibox # copy directly to init dir (required for post-inst enabling)
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/wifibox_init $(1)/etc/init.d/wifibox
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/dhcpcheck_init $(1)/etc/init.d/dhcpcheck
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/d3dapi $(1)/$(TGT_LUA_DIR_SUFFIX)/script
|
||||
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/signin.sh $(1)/$(TGT_LUA_DIR_SUFFIX)/script
|
||||
|
||||
|
11
ReleaseNotes.md
Normal file
11
ReleaseNotes.md
Normal file
@ -0,0 +1,11 @@
|
||||
# 0.9.10 (22th nov 2013):
|
||||
- fixed a major issue with makerbots preventing to print anything but small prints
|
||||
- slightly improved usage of makerbot type profiles
|
||||
- added option to reset settings to defaults (important to use after updating to allow new defaults to be used)
|
||||
Note: there are known deficiencies in start/end gcode for makerbots
|
||||
|
||||
# 0.9.9 (7th nov 2013)
|
||||
- fixed issue sometimes causing ultimakers to reset continually
|
||||
|
||||
# 0.9.8 (30th oct 2013)
|
||||
- initial release
|
@ -68,12 +68,13 @@ EOM
|
||||
fi
|
||||
|
||||
#preserve saved sketches during firmware update
|
||||
echo "/root/sketches" >> /etc/sysupgrade.conf
|
||||
echo "/root/sketches" >> $IPKG_INSTROOT/etc/sysupgrade.conf
|
||||
|
||||
### Finally make sure basic configuration is set correctly
|
||||
|
||||
$IPKG_INSTROOT/etc/init.d/wifibox enable
|
||||
$IPKG_INSTROOT/etc/init.d/wifibox start
|
||||
$IPKG_INSTROOT/etc/init.d/dhcpcheck enable
|
||||
|
||||
if [ -z "$IPKG_INSTROOT" ]; then
|
||||
echo "Enabling wifi device..."
|
||||
|
@ -1 +1 @@
|
||||
0.9.9
|
||||
0.9.11
|
||||
|
@ -11,7 +11,7 @@
|
||||
-- - _description_: A descriptive text usable by API clients
|
||||
-- - _min_, _max_, _regex_: optional constraints (min and max constrain value for numbers, or length for strings)
|
||||
-- - _isValid_: an optional function which should return true for valid values and false for invalid ones
|
||||
--
|
||||
-- - _subSection: optional: setting name of which current value is used as the uci section where this setting should be loaded from. Otherwise it's retrieved from the generic section. Setting subsection also means it will first try to get a default from subconf_defaults, if that doesn't exsist it will use the regular default
|
||||
-- The configuration keys themselves document themselves rather well, hence they are not included in the generated documentation.
|
||||
--
|
||||
-- NOTE: the all-caps definitions should be changed into configuration keys, or moved to a better location.
|
||||
@ -92,18 +92,54 @@ M.printer_type = {
|
||||
return printers[value] ~= nil
|
||||
end
|
||||
}
|
||||
M.printer_bed_width = {
|
||||
default = 220,
|
||||
|
||||
M.printer_dimensions_x = {
|
||||
default = 200,
|
||||
subSection = 'printer_type',
|
||||
type = 'int',
|
||||
description = '',
|
||||
min = 0
|
||||
}
|
||||
M.printer_bed_height = {
|
||||
default = 220,
|
||||
M.printer_dimensions_y = {
|
||||
default = 200,
|
||||
subSection = 'printer_type',
|
||||
type = 'int',
|
||||
description = '',
|
||||
min = 0
|
||||
}
|
||||
M.printer_dimensions_z = {
|
||||
default = 200,
|
||||
subSection = 'printer_type',
|
||||
type = 'int',
|
||||
description = '',
|
||||
min = 0
|
||||
}
|
||||
|
||||
local default_makerbot_startcode = '(**** CONFIGURATION MACROS ****)\n;@printer {printerType}\n;@enable progress\n(** This GCode was generated by ReplicatorG 0040 **)\n(* using Skeinforge (50) *)\n(* for a Dual headed Replicator 2 *)\n(* on 2013/10/27 15:07:27 (+0100) *)\n(**** start.gcode for Replicator 2X, single head ****)\nM103 (disable RPM)\nM73 P0 (enable build progress)\nG21 (set units to mm)\nG90 (set positioning to absolute)\nM104 S240 T0 (set extruder temperature) (temp updated by printOMatic)\nM140 S110 T0 (set HBP temperature)\n(**** begin homing ****)\nG162 X Y F2500 (home XY axes maximum)\nG161 Z F1100 (home Z axis minimum)\nG92 Z-5 (set Z to -5)\nG1 Z0.0 (move Z to "0")\nG161 Z F100 (home Z axis minimum)\nM132 X Y Z A B (Recall stored home offsets for XYZAB axis)\n(**** end homing ****)\nG1 X-141 Y-74 Z10 F3300.0 (move to waiting position)\nG130 X20 Y20 Z20 A20 B20 (Lower stepper Vrefs while heating)\nM6 T0 (wait for toolhead, and HBP to reach temperature)\nG130 X127 Y127 Z40 A127 B127 (Set Stepper motor Vref to defaults)\nM108 R3.0 T0\nG0 X-141 Y-74 (Position Nozzle)\nG0 Z0.6 (Position Height)\nM108 R5.0 (Set Extruder Speed)\nM101 (Start Extruder)\nG4 P2000 (Create Anchor)\nG92 X0 Y0\nM106\n(**** end of start.gcode ****)'
|
||||
M.printer_startcode = {
|
||||
default = ';Generated with Doodle3D (default)\nM109 S{printingTemp} ;set target temperature \n;M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)',
|
||||
default_ultimaker2 = ';Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \nM190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n',
|
||||
default_makerbot_generic = default_makerbot_startcode,
|
||||
default_makerbot_replicator2 = default_makerbot_startcode,
|
||||
default_makerbot_replicator2x = default_makerbot_startcode,
|
||||
default_makerbot_thingomatic = default_makerbot_startcode,
|
||||
type = 'string',
|
||||
subSection = 'printer_type',
|
||||
description = ''
|
||||
}
|
||||
|
||||
local default_makerbot_endcode = '(******* End.gcode*******)\nM73 P100 ( End build progress )\nG0 Z150 ( Send Z axis to bottom of machine )\nM18 ( Disable steppers )\nM104 S0 T0 ( Cool down the Right Extruder )\nG162 X Y F2500 ( Home XY endstops )\nM18 ( Disable stepper motors )\nM70 P5 ( We <3 Making Things!)\nM72 P1 ( Play Ta-Da song )\n(*********end End.gcode*******)'
|
||||
M.printer_endcode = {
|
||||
default = 'M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n;M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)',
|
||||
default_ultimaker2 = 'M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\nM140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)',
|
||||
default_makerbot_generic = default_makerbot_endcode,
|
||||
default_makerbot_replicator2 = default_makerbot_endcode,
|
||||
default_makerbot_replicator2x = default_makerbot_endcode,
|
||||
default_makerbot_thingomatic = default_makerbot_endcode,
|
||||
type = 'string',
|
||||
subSection = 'printer_type',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_baudrate = {
|
||||
default = '115200',
|
||||
@ -222,41 +258,17 @@ M.printer_retraction_amount = {
|
||||
}
|
||||
|
||||
M.printer_enableTraveling = {
|
||||
default = false,
|
||||
default = true,
|
||||
type = 'bool',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_startcode_marlin = {
|
||||
default = ';Generated with Doodle3D\nM109 S{printingTemp} ;set target temperature \n;M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)',
|
||||
type = 'string',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_endcode_marlin = {
|
||||
default = 'M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n;M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)',
|
||||
type = 'string',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_startcode_x3g = {
|
||||
default = '(**** CONFIGURATION MACROS ****)\n;@printer r2x\n;@enable progress\n(** This GCode was generated by ReplicatorG 0040 **)\n(* using Skeinforge (50) *)\n(* for a Dual headed Replicator 2 *)\n(* on 2013/10/27 15:07:27 (+0100) *)\n(**** start.gcode for Replicator 2X, single head ****)\nM103 (disable RPM)\nM73 P0 (enable build progress)\nG21 (set units to mm)\nG90 (set positioning to absolute)\nM104 S240 T0 (set extruder temperature) (temp updated by printOMatic)\nM140 S110 T0 (set HBP temperature)\n(**** begin homing ****)\nG162 X Y F2500 (home XY axes maximum)\nG161 Z F1100 (home Z axis minimum)\nG92 Z-5 (set Z to -5)\nG1 Z0.0 (move Z to "0")\nG161 Z F100 (home Z axis minimum)\nM132 X Y Z A B (Recall stored home offsets for XYZAB axis)\n(**** end homing ****)\nG1 X-141 Y-74 Z10 F3300.0 (move to waiting position)\nG130 X20 Y20 Z20 A20 B20 (Lower stepper Vrefs while heating)\nM6 T0 (wait for toolhead, and HBP to reach temperature)\nG130 X127 Y127 Z40 A127 B127 (Set Stepper motor Vref to defaults)\nM108 R3.0 T0\nG0 X-141 Y-74 (Position Nozzle)\nG0 Z0.6 (Position Height)\nM108 R5.0 (Set Extruder Speed)\nM101 (Start Extruder)\nG4 P2000 (Create Anchor)\nG92 X0 Y0\nM106\n(**** end of start.gcode ****)',
|
||||
type = 'string',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_endcode_x3g = {
|
||||
default = '(******* End.gcode*******)\nM73 P100 ( End build progress )\nG0 Z150 ( Send Z axis to bottom of machine )\nM18 ( Disable steppers )\nM104 S0 T0 ( Cool down the Right Extruder )\nG162 X Y F2500 ( Home XY endstops )\nM18 ( Disable stepper motors )\nM70 P5 ( We <3 Making Things!)\nM72 P1 ( Play Ta-Da song )\n(*********end End.gcode*******)',
|
||||
type = 'string',
|
||||
description = ''
|
||||
}
|
||||
|
||||
M.printer_maxObjectHeight = {
|
||||
default = 150,
|
||||
type = 'int',
|
||||
description = 'Maximum height that will be printed',
|
||||
min = 0
|
||||
}
|
||||
-- M.printer_maxObjectHeight = {
|
||||
-- default = 150,
|
||||
-- type = 'int',
|
||||
-- description = 'Maximum height that will be printed',
|
||||
-- min = 0
|
||||
-- }
|
||||
|
||||
M.printer_screenToMillimeterScale = {
|
||||
default = 0.3,
|
||||
|
@ -172,7 +172,7 @@ local function init(environment)
|
||||
s, msg = wifi.init()
|
||||
if not s then return s, msg end
|
||||
|
||||
s, msg = netconf.init(wifi, true)
|
||||
s, msg = netconf.init(wifi, false)
|
||||
if not s then return s, msg end
|
||||
|
||||
return true
|
||||
|
@ -321,7 +321,7 @@ end
|
||||
-- @tparam boolean recreate If true, a new UCI configuration based on scan data will always be created, otherwise an attempt will be made to use an existing configuration.
|
||||
-- @return True on success or nil+msg on error.
|
||||
function M.associateSsid(ssid, passphrase, recreate)
|
||||
log:info("netconfig:associateSsid: "..(ssid or "<nil>")..", "..(passphrase or "<nil>")..", "..(recreate or "<nil>"))
|
||||
log:info("netconfig:associateSsid: "..(ssid or "<nil>")..", "..(recreate or "<nil>"))
|
||||
|
||||
M.setStatus(M.CONNECTING,"Connecting...");
|
||||
|
||||
|
@ -88,7 +88,28 @@ function M.all_GET(request, response)
|
||||
end
|
||||
end
|
||||
|
||||
--- Reset specific setting to default value
|
||||
-- When an setting has a subSection only the setting in it's current subSection is reset.
|
||||
-- For example you want to reset setting _printer.startcode_
|
||||
-- and it has it's _subSection_ set to 'printer_type'
|
||||
-- and printer.type is set to 'ultimaker' then
|
||||
-- only the printer.startcode under the ultimaker subsection is removed.
|
||||
function M.reset_POST(request, response)
|
||||
--log:info("API:reset");
|
||||
if not operationsAccessOrFail(request, response) then return end
|
||||
response:setSuccess()
|
||||
|
||||
for k,v in pairs(request:getAll()) do
|
||||
--log:info(" "..k..": "..v);
|
||||
local r,m = settings.reset(k);
|
||||
if r ~= nil then response:addData(k, "ok")
|
||||
else response:addData(k, "could not reset key ('" .. m .. "')") end
|
||||
end
|
||||
end
|
||||
|
||||
--- Reset all settings to default value
|
||||
function M.resetall_POST(request, response)
|
||||
if not operationsAccessOrFail(request, response) then return end
|
||||
response:setSuccess()
|
||||
settings.resetAll()
|
||||
|
||||
|
@ -12,7 +12,18 @@ local LOG_COLLECT_DIRNAME = 'wifibox-logs'
|
||||
local LOG_COLLECT_DIR = TMP_DIR .. '/' .. LOG_COLLECT_DIRNAME
|
||||
local WIFIBOX_LOG_FILENAME = 'wifibox.log'
|
||||
local WIFIBOX_LOG_FILE = TMP_DIR .. '/' .. WIFIBOX_LOG_FILENAME
|
||||
|
||||
local SYSLOG_FILENAME = 'syslog'
|
||||
local PROCESS_LIST_FILENAME = 'processes'
|
||||
local MEMINFO_FILENAME = 'meminfo'
|
||||
local MOUNTS_FILENAME = 'mounts'
|
||||
local DISKFREE_FILENAME = 'diskfree'
|
||||
|
||||
local UCI_CONFIG_FILES_TO_SAVE = { 'dhcp', 'firewall', 'network', 'system', 'wifibox', 'wireless' }
|
||||
|
||||
local USB_DIRTREE_COMMAND = "ls -R /sys/devices/platform/ehci-platform/usb1 | grep \":$\" | sed -e 's/:$//' -e 's/[^-][^\\/]*\\//--/g' -e 's/^/ /' -e 's/-/|/'"
|
||||
local USB_DIRTREE_FILENAME = 'sys_devices_platform_ehci-platform_usb1.tree'
|
||||
|
||||
local PRINT3D_BASEPATH = '/tmp'
|
||||
local PRINT3D_LOG_FILENAME_PREFIX = 'print3d-'
|
||||
local PRINT3D_LOG_FILENAME_SUFFIX = '.log'
|
||||
@ -33,30 +44,62 @@ end
|
||||
|
||||
-- TODO: redirect stdout+stderr; handle errors
|
||||
function M.logfiles(request, response)
|
||||
local rv,msg = lfs.mkdir(LOG_COLLECT_DIR)
|
||||
local rv,msg = lfs.chdir(TMP_DIR)
|
||||
local rv,sig,code,msg = nil,nil,nil,nil
|
||||
|
||||
rv,msg = lfs.mkdir(LOG_COLLECT_DIR)
|
||||
rv,msg = lfs.chdir(TMP_DIR)
|
||||
|
||||
|
||||
--[[ create temporary files ]]--
|
||||
|
||||
local rv,sig,code = redirectedExecute('cp ' .. WIFIBOX_LOG_FILE .. ' ' .. LOG_COLLECT_DIR)
|
||||
-- copy wifibox API-script log
|
||||
rv,sig,code = redirectedExecute('cp ' .. WIFIBOX_LOG_FILE .. ' ' .. LOG_COLLECT_DIR)
|
||||
|
||||
local rv,sig,code = os.execute('logread > ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME)
|
||||
-- capture syslog
|
||||
rv,sig,code = os.execute('logread > ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME)
|
||||
|
||||
-- capture running processes
|
||||
rv,sig,code = os.execute('ps -w > ' .. LOG_COLLECT_DIR .. '/' .. PROCESS_LIST_FILENAME)
|
||||
|
||||
-- capture info on RAM memory
|
||||
rv,sig,code = os.execute('cat /proc/meminfo > ' .. LOG_COLLECT_DIR .. '/' .. MEMINFO_FILENAME)
|
||||
|
||||
-- capture info on mounted file systems
|
||||
rv,sig,code = os.execute('mount > ' .. LOG_COLLECT_DIR .. '/' .. MOUNTS_FILENAME)
|
||||
|
||||
-- capture info on free disk space
|
||||
rv,sig,code = os.execute('df -h > ' .. LOG_COLLECT_DIR .. '/' .. DISKFREE_FILENAME)
|
||||
|
||||
-- list directory structure for primary USB controller
|
||||
rv,sig,code = os.execute(USB_DIRTREE_COMMAND .. ' > ' .. LOG_COLLECT_DIR .. '/' .. USB_DIRTREE_FILENAME)
|
||||
|
||||
-- copy relevant openwrt configuration files
|
||||
rv,msg = lfs.mkdir(LOG_COLLECT_DIR .. '/config')
|
||||
for _,v in pairs(UCI_CONFIG_FILES_TO_SAVE) do
|
||||
local srcFile = '/etc/config/' .. v
|
||||
local tgtFile = LOG_COLLECT_DIR .. '/config/' .. v
|
||||
if v ~= 'wireless' then
|
||||
rv,sig,code = redirectedExecute('cp ' .. srcFile .. ' ' .. tgtFile)
|
||||
else
|
||||
rv,sig,code = os.execute("sed \"s/option key '.*'/option key '...'/g\" " .. srcFile .. " > " .. tgtFile)
|
||||
end
|
||||
end
|
||||
|
||||
-- collect and copy print3d server logs
|
||||
for file in lfs.dir(PRINT3D_BASEPATH) do
|
||||
if file:find(PRINT3D_LOG_FILENAME_PREFIX) == 1 and file:find(PRINT3D_LOG_FILENAME_SUFFIX) ~= nil then
|
||||
local srcLogFile = PRINT3D_BASEPATH .. '/' .. file
|
||||
local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file
|
||||
local rv,sig,code = redirectedExecute('cp ' .. srcLogFile .. ' ' .. tgtLogFile)
|
||||
rv,sig,code = redirectedExecute('cp ' .. srcLogFile .. ' ' .. tgtLogFile)
|
||||
end
|
||||
end
|
||||
|
||||
local rv,sig,code = redirectedExecute('tar czf ' .. LOG_COLLECT_ARCHIVE_FILE .. ' ' .. LOG_COLLECT_DIRNAME) --returns 0 success, 1 error
|
||||
rv,sig,code = redirectedExecute('tar czf ' .. LOG_COLLECT_ARCHIVE_FILE .. ' ' .. LOG_COLLECT_DIRNAME) --returns 0 success, 1 error
|
||||
|
||||
|
||||
--[[ add response content ]]--
|
||||
|
||||
local rv,msg = response:setBinaryFileData(LOG_COLLECT_ARCHIVE_FILE, LOG_COLLECT_ARCHIVE_FILENAME, 'application/x-compressed')
|
||||
rv,msg = response:setBinaryFileData(LOG_COLLECT_ARCHIVE_FILE, LOG_COLLECT_ARCHIVE_FILENAME, 'application/x-compressed')
|
||||
if not rv then
|
||||
response:setError("could not set binary data from file '" .. LOG_COLLECT_ARCHIVE_FILE .. "' (" .. msg .. ")")
|
||||
else
|
||||
@ -69,17 +112,24 @@ function M.logfiles(request, response)
|
||||
for file in lfs.dir(LOG_COLLECT_DIR) do
|
||||
if file:find(PRINT3D_LOG_FILENAME_PREFIX) == 1 and file:find(PRINT3D_LOG_FILENAME_SUFFIX) ~= nil then
|
||||
local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file
|
||||
local rv,sig,code = redirectedExecute('rm ' .. tgtLogFile)
|
||||
rv,sig,code = redirectedExecute('rm ' .. tgtLogFile)
|
||||
end
|
||||
end
|
||||
|
||||
local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. WIFIBOX_LOG_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/config/*')
|
||||
rv,msg = lfs.rmdir(LOG_COLLECT_DIR .. '/config')
|
||||
|
||||
local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. USB_DIRTREE_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. DISKFREE_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. MOUNTS_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. MEMINFO_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. PROCESS_LIST_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. WIFIBOX_LOG_FILENAME)
|
||||
|
||||
local rv,msg = lfs.rmdir(LOG_COLLECT_DIR)
|
||||
rv,msg = lfs.rmdir(LOG_COLLECT_DIR)
|
||||
|
||||
local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_ARCHIVE_FILE)
|
||||
rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_ARCHIVE_FILE)
|
||||
end
|
||||
|
||||
function M.access(request, response)
|
||||
|
@ -89,6 +89,15 @@ function M.state(request, response, onlyReturnState)
|
||||
return true
|
||||
end
|
||||
|
||||
-- retrieve a list of 3D printers currently supported
|
||||
function M.listall(request, response)
|
||||
response:setSuccess()
|
||||
response:addData('printers', printerUtils.supportedPrinters())
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
|
||||
function M.heatup_POST(request, response)
|
||||
|
||||
if not accessManager.hasControl(request.remoteAddress) then
|
||||
|
@ -2,7 +2,7 @@ local wifi = require('network.wlanconfig')
|
||||
local netconf = require('network.netconfig')
|
||||
local settings = require('util.settings')
|
||||
|
||||
-- NOTE: the module 'detects' command-line invocation by existence of 'arg', so we have to make sure it is not defined.
|
||||
-- NOTE: the updater module 'detects' command-line invocation by existence of 'arg', so we have to make sure it is not defined.
|
||||
argStash = arg
|
||||
arg = nil
|
||||
local updater = require('script.d3d-updater')
|
||||
@ -140,18 +140,21 @@ function M.download_POST(request, response)
|
||||
end
|
||||
|
||||
-- if successful, this call won't return since the device will flash its memory and reboot
|
||||
-- accepts: version (string, will try to use most recent if not specified)
|
||||
-- accepts: no_retain (bool, device will be completely cleaned if true (aka '-n' flag to sysupgrade))
|
||||
function M.install_POST(request, response)
|
||||
local argVersion = request:get("version")
|
||||
local argNoRetain = request:get("no_retain")
|
||||
log:info("API:update/install")
|
||||
|
||||
if not operationsAccessOrFail(request, response) then return end
|
||||
|
||||
updater.setLogger(log)
|
||||
updater.setState(updater.STATE.INSTALLING,"")
|
||||
|
||||
|
||||
local ssid = wifi.getSubstitutedSsid(settings.get('network.ap.ssid'))
|
||||
local rv,msg = netconf.enableAccessPoint(ssid)
|
||||
|
||||
|
||||
if not argVersion then
|
||||
local success,status,msg = updater.getStatus()
|
||||
if not success then
|
||||
@ -174,7 +177,7 @@ function M.install_POST(request, response)
|
||||
return
|
||||
end
|
||||
|
||||
local rv,msg = updater.flashImageVersion(vEnt)
|
||||
local rv,msg = updater.flashImageVersion(vEnt, argNoRetain)
|
||||
|
||||
if not rv then
|
||||
updater.setState(updater.STATE.INSTALL_FAILED, "installation failed (" .. msg .. ")")
|
||||
|
@ -91,7 +91,7 @@ function M:setError(msg)
|
||||
self.body.status = 'error'
|
||||
if msg ~= '' then self.body.msg = msg end
|
||||
|
||||
self:addData('more_info', 'http://' .. defaults.API_BASE_URL_PATH .. '/wiki/wiki/communication-api')
|
||||
self:addData('more_info', 'http://' .. defaults.API_BASE_URL_PATH .. '/api')
|
||||
end
|
||||
|
||||
--- Adds a data item to the response, this will be included under the `data` item of the json text.
|
||||
@ -149,6 +149,7 @@ function M:send()
|
||||
printHeaderLine("Status", self.httpStatusCode .. " " .. self.httpStatusText)
|
||||
printHeaderLine("Content-Type", self.contentType)
|
||||
printHeaderLine("Access-Control-Allow-Origin", "*")
|
||||
printHeaderLine("Expires", "-1")
|
||||
|
||||
if self.binaryData == nil then
|
||||
io.write("\r\n")
|
||||
|
16
src/script/dhcpcheck_init
Executable file
16
src/script/dhcpcheck_init
Executable file
@ -0,0 +1,16 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
# start after all other scripts
|
||||
START=99
|
||||
|
||||
LOGGER="logger -t dhcpcheck -p 6"
|
||||
|
||||
boot() {
|
||||
logread | grep "192.168.10.249, lease time 12h"
|
||||
if [ $? -ne 0 ]; then
|
||||
$LOGGER "Applying workaround for dhcp/dnsmasq issue. See: https://github.com/Doodle3D/doodle3d-client/issues/66"
|
||||
/etc/init.d/dnsmasq reload
|
||||
else
|
||||
$LOGGER "DHCP configuration is in order, not doing anything"
|
||||
fi
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
# start after networking
|
||||
START=22
|
||||
|
||||
LOGGER="logger -s -t autowifi -p 6"
|
||||
LOGGER="logger -t autowifi -p 6"
|
||||
|
||||
boot() {
|
||||
sleep 1
|
||||
|
@ -5,7 +5,9 @@ local printDriver = require('print3d')
|
||||
local SUPPORTED_PRINTERS = {
|
||||
rigidbot = "Rigidbot",
|
||||
ultimaker = "Ultimaker",
|
||||
ultimaker2 = "Ultimaker2",
|
||||
makerbot_replicator2 = "MakerBot Replicator2",
|
||||
makerbot_replicator2x = "MakerBot Replicator2x",
|
||||
makerbot_thingomatic = "MakerBot Thing-o-matic",
|
||||
printrbot = "Printrbot",
|
||||
bukobot = "Bukobot",
|
||||
|
@ -4,6 +4,7 @@
|
||||
-- if no value is stored in the UCI config. The UCI config file is `/etc/config/wifibox`.
|
||||
-- The default values guarantee there will always be a set of reasonable settings
|
||||
-- to use and provide a clear overview of all existing configuration keys as well.
|
||||
-- uci api: http://wiki.openwrt.org/doc/techref/uci, http://luci.subsignal.org/api/luci/modules/luci.model.uci.html
|
||||
local uci = require('uci').cursor()
|
||||
local utils = require('util.utils')
|
||||
local baseconfig = require('conf_defaults')
|
||||
@ -136,23 +137,43 @@ local function getBaseKeyTable(key)
|
||||
return type(base) == 'table' and base.default ~= nil and base or nil
|
||||
end
|
||||
|
||||
--- Looks up the table in @{subconf_defaults}.lua corresponding to a key.
|
||||
-- @string key The key for which to return the base table.
|
||||
-- @treturn table The base table for key, or nil if it does not exist.
|
||||
--[[local function getSubBaseKeyTable(key)
|
||||
local base = subconfig[key]
|
||||
return type(base) == 'table' and base.default ~= nil and base or nil
|
||||
end]]--
|
||||
|
||||
|
||||
--- Returns the value of the requested key if it exists.
|
||||
-- @p key The key to return the associated value for.
|
||||
-- @return The associated value, beware (!) that this may be boolean false for keys of 'bool' type.
|
||||
function M.get(key)
|
||||
--log:info("settings:get: "..utils.dump(key))
|
||||
key = replaceDots(key)
|
||||
local base = getBaseKeyTable(key)
|
||||
|
||||
if not base then return nil,ERR_NO_SUCH_KEY end
|
||||
|
||||
local v = base.default
|
||||
local uciV = fromUciValue(uci:get(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key), base.type)
|
||||
|
||||
local actualV = v
|
||||
if uciV ~= nil then actualV = uciV end
|
||||
|
||||
return actualV
|
||||
|
||||
local section = UCI_CONFIG_SECTION;
|
||||
if base.subSection ~= nil then
|
||||
section = M.get(base.subSection)
|
||||
end
|
||||
|
||||
local uciV = fromUciValue(uci:get(UCI_CONFIG_NAME, section, key), base.type)
|
||||
if uciV ~= nil then
|
||||
-- returning value from uci
|
||||
return uciV
|
||||
elseif base.subSection ~= nil then
|
||||
local subDefault = base["default_"..section]
|
||||
if subDefault ~= nil then
|
||||
-- returning subsection default value
|
||||
return subDefault
|
||||
end
|
||||
end
|
||||
-- returning default value
|
||||
return base.default
|
||||
end
|
||||
|
||||
--- Returns all configuration keys with their current values.
|
||||
@ -206,7 +227,7 @@ function M.set(key, value)
|
||||
|
||||
if M.isDefault(key) and value == nil then return true end -- key is default already
|
||||
--log:info(" not default")
|
||||
local current = uci:get(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key)
|
||||
|
||||
--log:info(" base.type: "..utils.dump(base.type))
|
||||
if base.type == 'bool' then
|
||||
if value ~= "" then
|
||||
@ -227,12 +248,21 @@ function M.set(key, value)
|
||||
return nil,m
|
||||
end
|
||||
|
||||
if fromUciValue(current, base.type) == value then return true end
|
||||
--local current = uci:get(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key)
|
||||
local current = M.get(key)
|
||||
--if fromUciValue(current, base.type) == value then return true end
|
||||
if current == value then return true end
|
||||
|
||||
local section = UCI_CONFIG_SECTION;
|
||||
if base.subSection ~= nil then
|
||||
section = M.get(base.subSection)
|
||||
uci:set(UCI_CONFIG_NAME, section, UCI_CONFIG_TYPE)
|
||||
end
|
||||
|
||||
if value ~= nil then
|
||||
uci:set(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key, toUciValue(value, base.type))
|
||||
uci:set(UCI_CONFIG_NAME, section, key, toUciValue(value, base.type))
|
||||
else
|
||||
uci:delete(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key)
|
||||
uci:delete(UCI_CONFIG_NAME, section, key)
|
||||
end
|
||||
|
||||
uci:commit(UCI_CONFIG_NAME)
|
||||
@ -244,11 +274,16 @@ end
|
||||
-- @treturn bool|nil True if everything went well, nil in case of error.
|
||||
function M.resetAll()
|
||||
log:info("settings:resetAll")
|
||||
for k,_ in pairs(baseconfig) do
|
||||
if not k:match('^[A-Z_]*$') then --TEMP: skip 'constants', which should be moved anyway
|
||||
M.reset(k)
|
||||
end
|
||||
|
||||
local allSections = uci:get_all(UCI_CONFIG_NAME)
|
||||
|
||||
for key,value in pairs(allSections) do
|
||||
if key ~= "system" and not key:match('^[A-Z_]*$') then --TEMP: skip 'constants', which should be moved anyway
|
||||
uci:delete(UCI_CONFIG_NAME,key)
|
||||
end
|
||||
end
|
||||
uci:commit(UCI_CONFIG_NAME)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
@ -256,10 +291,22 @@ end
|
||||
-- @string key The key to reset.
|
||||
-- @treturn bool|nil True if everything went well, nil in case of error.
|
||||
function M.reset(key)
|
||||
log:info("settings:reset")
|
||||
--log:info("settings:reset: "..utils.dump(key))
|
||||
|
||||
--uci:foreach(UCI_CONFIG_NAME,UCI_CONFIG_TYPE)
|
||||
--uci:delete(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key)
|
||||
|
||||
key = replaceDots(key)
|
||||
local base = getBaseKeyTable(key)
|
||||
if not base then return nil,ERR_NO_SUCH_KEY end
|
||||
|
||||
local section = UCI_CONFIG_SECTION;
|
||||
if base.subSection ~= nil then
|
||||
section = M.get(base.subSection)
|
||||
end
|
||||
|
||||
uci:delete(UCI_CONFIG_NAME, section, key)
|
||||
|
||||
--log:info(" key: "..utils.dump(key))
|
||||
uci:delete(UCI_CONFIG_NAME, UCI_CONFIG_SECTION, key)
|
||||
uci:commit(UCI_CONFIG_NAME)
|
||||
return true
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user