Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
Diff: main.cpp
- Revision:
- 2:1df0b61d3b5a
- Parent:
- 0:31e91bb0ef3c
diff -r ab59fc9af055 -r 1df0b61d3b5a main.cpp
--- a/main.cpp Sat Mar 01 02:37:29 2014 +0000
+++ b/main.cpp Fri Feb 28 18:52:52 2014 -0800
@@ -1,53 +1,182 @@
-/*
+/*
This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
*/
#include "libs/Kernel.h"
#include "modules/tools/laser/Laser.h"
-#include "modules/tools/spindle/Spindle.h"
-#include "modules/tools/extruder/Extruder.h"
+#include "modules/tools/extruder/ExtruderMaker.h"
#include "modules/tools/temperaturecontrol/TemperatureControlPool.h"
-#include "modules/robot/Player.h"
+#include "modules/tools/endstops/Endstops.h"
+#include "modules/tools/touchprobe/Touchprobe.h"
+#include "modules/tools/switch/SwitchPool.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 "libs/ChaNFSSD/SDFileSystem.h"
+#include "modules/utils/PlayLed/PlayLed.h"
+#include "modules/utils/panel/Panel.h"
+#include "libs/Network/uip/Network.h"
+
+// #include "libs/ChaNFSSD/SDFileSystem.h"
#include "libs/Config.h"
#include "libs/nuts_bolts.h"
#include "libs/utils.h"
-//#include "libs/USBCDCMSC/USBCDCMSC.h"
-LocalFileSystem local("local");
-//SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC17xx specific : comment if you are not using a SD�card ( for example with a mBed ).
-//LocalFileSystem local("local"); // LPC17xx specific :�comment if you are not running a mBed
-//USBCDCMSC cdcmsc(&sd); // LPC17xx specific :�Composite serial + msc USB device
+// Debug
+#include "libs/SerialMessage.h"
+
+#include "libs/USBDevice/USB.h"
+#include "libs/USBDevice/USBMSD/USBMSD.h"
+#include "libs/USBDevice/USBMSD/SDCard.h"
+#include "libs/USBDevice/USBSerial/USBSerial.h"
+#include "libs/USBDevice/DFU.h"
+#include "libs/SDFAT.h"
+
+#include "libs/Watchdog.h"
+
+#include "version.h"
+
+#define second_usb_serial_enable_checksum CHECKSUM("second_usb_serial_enable")
+#define disable_msd_checksum CHECKSUM("msd_disable")
+#define disable_leds_checksum CHECKSUM("leds_disable")
+
+// Watchdog wd(5000000, WDT_MRI);
+
+// USB Stuff
+SDCard sd(P0_9, P0_8, P0_7, P0_6); // this selects SPI1 as the sdcard as it is on Smoothieboard
+//SDCard sd(P0_18, P0_17, P0_15, P0_16); // this selects SPI0 as the sdcard
+
+USB u;
+USBSerial usbserial(&u);
+USBMSD msc(&u, &sd);
+//USBMSD *msc= NULL;
+DFU dfu(&u);
+
+SDFAT mounter("sd", &sd);
+
+GPIO leds[5] = {
+ GPIO(P1_18),
+ GPIO(P1_19),
+ GPIO(P1_20),
+ GPIO(P1_21),
+ GPIO(P4_28)
+};
int main() {
+ // Default pins to low status
+ for (int i = 0; i < 5; i++){
+ leds[i].output();
+ leds[i]= 0;
+ }
+
Kernel* kernel = new Kernel();
- kernel->serial->printf("Smoothie ( grbl port ) version 0.6.1_mbed \r\n");
+ kernel->streams->printf("Smoothie ( grbl port ) version 0.7.2 with new accel @%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());
-
+ //some boards don't have leds.. TOO BAD!
+ kernel->use_leds= !kernel->config->value( disable_leds_checksum )->by_default(false)->as_bool();
- //kernel->add_module( new Laser(p21) );
- //kernel->add_module( new Extruder() );
- kernel->add_module( new Spindle() );
+ // attempt to be able to disable msd in config
+ // if(!kernel->config->value( disable_msd_checksum )->by_default(false)->as_bool()){
+ // msc= new USBMSD(&u, &sd);
+ // }else{
+ // msc= NULL;
+ // kernel->streams->printf("MSD is disabled\r\n");
+ // }
+
+ bool sdok= (sd.disk_initialize() == 0);
+
+ // Create and add main modules
kernel->add_module( new SimpleShell() );
kernel->add_module( new Configurator() );
kernel->add_module( new CurrentControl() );
+ kernel->add_module( new SwitchPool() );
+ kernel->add_module( new PauseButton() );
+ kernel->add_module( new PlayLed() );
+ kernel->add_module( new Endstops() );
+ kernel->add_module( new Player() );
+
+ // these modules can be completely disabled in the Makefile by adding to EXCLUDE_MODULES
+ #ifndef NO_TOOLS_TEMPERATURECONTROL
kernel->add_module( new TemperatureControlPool() );
- kernel->add_module( new PauseButton() );
+ #endif
+ #ifndef NO_TOOLS_EXTRUDER
+ kernel->add_module( new ExtruderMaker() );
+ #endif
+ #ifndef NO_TOOLS_LASER
+ kernel->add_module( new Laser() );
+ #endif
+ #ifndef NO_UTILS_PANEL
+ kernel->add_module( new Panel() );
+ #endif
+ #ifndef NO_TOOLS_TOUCHPROBE
+ kernel->add_module( new Touchprobe() );
+ #endif
+ #ifndef NONETWORK
+ kernel->add_module( new Network() );
+ #endif
+
+ // Create and initialize USB stuff
+ u.init();
+ //if(sdok) { // only do this if there is an sd disk
+ // msc= new USBMSD(&u, &sd);
+ // kernel->add_module( msc );
+ //}
+
+ // if(msc != NULL){
+ // kernel->add_module( msc );
+ // }
- //kernel->add_module( &cdcmsc );
-
- kernel->serial->printf("start\r\n");
+ kernel->add_module( &msc );
+ kernel->add_module( &usbserial );
+ if( kernel->config->value( second_usb_serial_enable_checksum )->by_default(false)->as_bool() ){
+ kernel->add_module( new USBSerial(&u) );
+ }
+ kernel->add_module( &dfu );
+ kernel->add_module( &u );
+
+ // clear up the config cache to save some memory
+ kernel->config->config_cache_clear();
+
+ if(kernel->use_leds) {
+ // set some leds to indicate status... led0 init doe, 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)
+ }
+ if(sdok) {
+ // load config override file if present
+ // NOTE only Mxxx commands that set values should be put in this file. The file is generated by M500
+ FILE *fp= fopen(kernel->config_override_filename(), "r");
+ if(fp != NULL) {
+ char buf[132];
+ kernel->streams->printf("Loading config override file: %s...\n", kernel->config_override_filename());
+ while(fgets(buf, sizeof buf, fp) != NULL) {
+ kernel->streams->printf(" %s", buf);
+ if(buf[0] == ';') continue; // skip the comments
+ struct SerialMessage message= {&(StreamOutput::NullStream), buf};
+ kernel->call_event(ON_CONSOLE_LINE_RECEIVED, &message);
+ }
+ kernel->streams->printf("config override file executed\n");
+ fclose(fp);
+ }
+ }
+
+ uint16_t cnt= 0;
+ // Main loop
while(1){
+ if(kernel->use_leds) {
+ // flash led 2 to show we are alive
+ leds[1]= (cnt++ & 0x1000) ? 1 : 0;
+ }
kernel->call_event(ON_MAIN_LOOP);
kernel->call_event(ON_IDLE);
}
