Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
main.cpp
- Committer:
- Bigcheese
- Date:
- 2014-03-02
- Revision:
- 3:f151d08d335c
- Parent:
- 2:1df0b61d3b5a
File content as of revision 3:f151d08d335c:
/* 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/>. */ #include "libs/Kernel.h" #include "modules/tools/laser/Laser.h" #include "modules/tools/extruder/ExtruderMaker.h" #include "modules/tools/temperaturecontrol/TemperatureControlPool.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 "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" // 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->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(); // 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() ); #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( &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); } }