X-Git-Url: http://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/0333ccb42f97d7a352e6ff255a8b47ef42261a63..1af84f6d7f188f1cae1667c390b05d4f03ddcc96:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 39ee9577..50fa6c49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,23 +8,25 @@ #include "libs/Kernel.h" #include "modules/tools/laser/Laser.h" -#include "modules/tools/spindle/Spindle.h" +#include "modules/tools/spindle/SpindleMaker.h" #include "modules/tools/extruder/ExtruderMaker.h" #include "modules/tools/temperaturecontrol/TemperatureControlPool.h" #include "modules/tools/endstops/Endstops.h" #include "modules/tools/zprobe/ZProbe.h" #include "modules/tools/scaracal/SCARAcal.h" +#include "RotaryDeltaCalibration.h" #include "modules/tools/switch/SwitchPool.h" #include "modules/tools/temperatureswitch/TemperatureSwitch.h" #include "modules/tools/drillingcycles/Drillingcycles.h" #include "FilamentDetector.h" +#include "MotorDriverControl.h" #include "modules/robot/Conveyor.h" #include "modules/utils/simpleshell/SimpleShell.h" #include "modules/utils/configurator/Configurator.h" #include "modules/utils/currentcontrol/CurrentControl.h" #include "modules/utils/player/Player.h" -#include "modules/utils/pausebutton/PauseButton.h" +#include "modules/utils/killbutton/KillButton.h" #include "modules/utils/PlayLed/PlayLed.h" #include "modules/utils/panel/Panel.h" #include "libs/Network/uip/Network.h" @@ -32,6 +34,8 @@ #include "checksumm.h" #include "ConfigValue.h" #include "StepTicker.h" +#include "SlowTicker.h" +#include "Robot.h" // #include "libs/ChaNFSSD/SDFileSystem.h" #include "libs/nuts_bolts.h" @@ -53,6 +57,7 @@ #include "version.h" #include "system_LPC17xx.h" +#include "platform_memory.h" #include "mbed.h" @@ -85,11 +90,6 @@ GPIO leds[5] = { GPIO(P4_28) }; -// debug pins, only used if defined in src/makefile -#ifdef STEPTICKER_DEBUG_PIN -GPIO stepticker_debug_pin(STEPTICKER_DEBUG_PIN); -#endif - void init() { // Default pins to low status @@ -98,23 +98,21 @@ void init() { leds[i]= 0; } -#ifdef STEPTICKER_DEBUG_PIN - stepticker_debug_pin.output(); - stepticker_debug_pin= 0; -#endif - Kernel* kernel = new Kernel(); kernel->streams->printf("Smoothie Running @%ldMHz\r\n", SystemCoreClock / 1000000); - Version version; - kernel->streams->printf(" Build version %s, Build date %s\r\n", version.get_build(), version.get_build_date()); + SimpleShell::version_command("", kernel->streams); bool sdok= (sd.disk_initialize() == 0); - if(!sdok) kernel->streams->printf("SDCard is disabled\r\n"); + if(!sdok) kernel->streams->printf("SDCard failed to initialize\r\n"); + + #ifdef NONETWORK + kernel->streams->printf("NETWORK is disabled\r\n"); + #endif #ifdef DISABLEMSD // attempt to be able to disable msd in config - if(sdok && !kernel->config->value( disable_msd_checksum )->by_default(false)->as_bool()){ + if(sdok && !kernel->config->value( disable_msd_checksum )->by_default(true)->as_bool()){ // HACK to zero the memory USBMSD uses as it and its objects seem to not initialize properly in the ctor size_t n= sizeof(USBMSD); void *v = AHB0.alloc(n); @@ -126,16 +124,12 @@ void init() { } #endif - // Create and add main modules - kernel->add_module( new SimpleShell() ); - kernel->add_module( new Configurator() ); - kernel->add_module( new CurrentControl() ); - kernel->add_module( new PauseButton() ); - kernel->add_module( new PlayLed() ); - kernel->add_module( new Endstops() ); - kernel->add_module( new Player() ); + kernel->add_module( new(AHB0) Player() ); + kernel->add_module( new(AHB0) CurrentControl() ); + kernel->add_module( new(AHB0) KillButton() ); + kernel->add_module( new(AHB0) PlayLed() ); // these modules can be completely disabled in the Makefile by adding to EXCLUDE_MODULES #ifndef NO_TOOLS_SWITCH @@ -155,38 +149,46 @@ void init() { tp->load_tools(); delete tp; #endif + #ifndef NO_TOOLS_ENDSTOPS + kernel->add_module( new(AHB0) Endstops() ); + #endif #ifndef NO_TOOLS_LASER kernel->add_module( new Laser() ); #endif #ifndef NO_TOOLS_SPINDLE - kernel->add_module( new Spindle() ); + SpindleMaker *sm= new SpindleMaker(); + sm->load_spindle(); + delete sm; + //kernel->add_module( new(AHB0) Spindle() ); #endif #ifndef NO_UTILS_PANEL - kernel->add_module( new Panel() ); - #endif - #ifndef NO_TOOLS_TOUCHPROBE - kernel->add_module( new Touchprobe() ); + kernel->add_module( new(AHB0) Panel() ); #endif #ifndef NO_TOOLS_ZPROBE - kernel->add_module( new ZProbe() ); + kernel->add_module( new(AHB0) ZProbe() ); #endif #ifndef NO_TOOLS_SCARACAL - kernel->add_module( new SCARAcal() ); + kernel->add_module( new(AHB0) SCARAcal() ); + #endif + #ifndef NO_TOOLS_ROTARYDELTACALIBRATION + kernel->add_module( new(AHB0) RotaryDeltaCalibration() ); #endif #ifndef NONETWORK kernel->add_module( new Network() ); #endif #ifndef NO_TOOLS_TEMPERATURESWITCH // Must be loaded after TemperatureControl - kernel->add_module( new TemperatureSwitch() ); + kernel->add_module( new(AHB0) TemperatureSwitch() ); #endif #ifndef NO_TOOLS_DRILLINGCYCLES - kernel->add_module( new Drillingcycles() ); + kernel->add_module( new(AHB0) Drillingcycles() ); #endif #ifndef NO_TOOLS_FILAMENTDETECTOR - kernel->add_module( new FilamentDetector() ); + kernel->add_module( new(AHB0) FilamentDetector() ); + #endif + #ifndef NO_UTILS_MOTORDRIVERCONTROL + kernel->add_module( new MotorDriverControl(0) ); #endif - // Create and initialize USB stuff u.init(); @@ -205,28 +207,31 @@ void init() { if( kernel->config->value( dfu_enable_checksum )->by_default(false)->as_bool() ){ kernel->add_module( new(AHB0) DFU(&u)); - kernel->streams->printf("WARNING Watchdog is disabled when DFU is enabled\n"); + } + // 10 second watchdog timeout (or config as seconds) + float t= kernel->config->value( watchdog_timeout_checksum )->by_default(10.0F)->as_number(); + if(t > 0.1F) { + // NOTE setting WDT_RESET with the current bootloader would leave it in DFU mode which would be suboptimal + kernel->add_module( new Watchdog(t*1000000, WDT_MRI)); // WDT_RESET)); + kernel->streams->printf("Watchdog enabled for %f seconds\n", t); }else{ - // 10 second watchdog timeout (or config as seconds) - float t= kernel->config->value( watchdog_timeout_checksum )->by_default(10.0F)->as_number(); - if(t > 0) { - kernel->add_module( new Watchdog(t*1000000, WDT_MRI)); // WDT_RESET)); - kernel->streams->printf("Watchdog enabled for %f seconds\n", t); - }else{ - kernel->streams->printf("WARNING Watchdog is disabled\n"); - } + kernel->streams->printf("WARNING Watchdog is disabled\n"); } + kernel->add_module( &u ); + // memory before cache is cleared + //SimpleShell::print_mem(kernel->streams); + // clear up the config cache to save some memory kernel->config->config_cache_clear(); if(kernel->is_using_leds()) { - // set some leds to indicate status... led0 init doe, led1 mainloop running, led2 idle loop running, led3 sdcard ok + // set some leds to indicate status... led0 init done, led1 mainloop running, led2 idle loop running, led3 sdcard ok leds[0]= 1; // indicate we are done with init - leds[3]= sdok?1:0; // 4th led inidicates sdcard is available (TODO maye should indicate config was found) + leds[3]= sdok?1:0; // 4th led indicates sdcard is available (TODO maye should indicate config was found) } if(sdok) { @@ -247,7 +252,10 @@ void init() { } } + // start the timers and interrupts + THEKERNEL->conveyor->start(THEROBOT->get_number_registered_motors()); THEKERNEL->step_ticker->start(); + THEKERNEL->slow_ticker->start(); } int main()