// print out build version void SimpleShell::version_command( string parameters, StreamOutput* stream){ Version vers; uint32_t dev= getDeviceType(); const char* mcu= (dev&0x00100000)?"LPC1769":"LPC1768"; stream->printf("Build version: %s, Build date: %s, MCU: %s, System Clock: %ldMHz\r\n", vers.get_build(), vers.get_build_date(), mcu, SystemCoreClock / 1000000); }
void init() { // Default pins to low status for (int i = 0; i < 5; i++){ leds[i].output(); 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()); //some boards don't have leds.. TOO BAD! kernel->use_leds= !kernel->config->value( disable_leds_checksum )->by_default(false)->as_bool(); bool sdok= (sd.disk_initialize() == 0); if(!sdok) kernel->streams->printf("SDCard is disabled\r\n"); #ifdef DISABLEMSD // attempt to be able to disable msd in config if(sdok && !kernel->config->value( disable_msd_checksum )->by_default(false)->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); memset(v, 0, n); // clear the allocated memory msc= new(v) USBMSD(&u, &sd); // allocate object using zeroed memory }else{ msc= NULL; kernel->streams->printf("MSD is disabled\r\n"); } #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() ); // these modules can be completely disabled in the Makefile by adding to EXCLUDE_MODULES #ifndef NO_TOOLS_SWITCH SwitchPool *sp= new SwitchPool(); sp->load_tools(); delete sp; #endif #ifndef NO_TOOLS_EXTRUDER // NOTE this must be done first before Temperature control so ToolManager can handle Tn before temperaturecontrol module does ExtruderMaker *em= new ExtruderMaker(); em->load_tools(); delete em; #endif #ifndef NO_TOOLS_TEMPERATURECONTROL // Note order is important here must be after extruder so Tn as a parameter will get executed first TemperatureControlPool *tp= new TemperatureControlPool(); tp->load_tools(); kernel->temperature_control_pool= tp; #else kernel->temperature_control_pool= new TemperatureControlPool(); // so we can get just an empty temperature control array #endif #ifndef NO_TOOLS_LASER kernel->add_module( new Laser() ); #endif #ifndef NO_TOOLS_SPINDLE kernel->add_module( new Spindle() ); #endif #ifndef NO_UTILS_PANEL kernel->add_module( new Panel() ); #endif #ifndef NO_TOOLS_TOUCHPROBE kernel->add_module( new Touchprobe() ); #endif #ifndef NO_TOOLS_ZPROBE kernel->add_module( new ZProbe() ); #endif #ifndef NO_TOOLS_SCARACAL kernel->add_module( new SCARAcal() ); #endif #ifndef NONETWORK kernel->add_module( new Network() ); #endif #ifndef NO_TOOLS_TEMPERATURESWITCH // Must be loaded after TemperatureControlPool kernel->add_module( new TemperatureSwitch() ); #endif #ifndef NO_TOOLS_DRILLINGCYCLES kernel->add_module( new Drillingcycles() ); #endif #ifndef NO_TOOLS_FILAMENTDETECTOR kernel->add_module( new FilamentDetector() ); #endif // Create and initialize USB stuff u.init(); #ifdef DISABLEMSD if(sdok && msc != NULL){ kernel->add_module( msc ); } #else kernel->add_module( &msc ); #endif kernel->add_module( &usbserial ); if( kernel->config->value( second_usb_serial_enable_checksum )->by_default(false)->as_bool() ){ kernel->add_module( new(AHB0) USBSerial(&u) ); } if( kernel->config->value( dfu_enable_checksum )->by_default(false)->as_bool() ){ kernel->add_module( new(AHB0) DFU(&u)); } 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); } } THEKERNEL->step_ticker->start(); }
// On idle things, we don't want to do shit in interrupts // don't queue gcodes in this void Panel::on_idle(void *argument) { if (this->start_up) { this->lcd->init(); Version v; string build(v.get_build()); string date(v.get_build_date()); this->lcd->clear(); this->lcd->setCursor(0, 0); this->lcd->printf("Welcome to Smoothie"); this->lcd->setCursor(0, 1); this->lcd->printf("%s", build.substr(0, 20).c_str()); this->lcd->setCursor(0, 2); this->lcd->printf("%s", date.substr(0, 20).c_str()); this->lcd->setCursor(0, 3); this->lcd->printf("Please wait...."); if (this->lcd->hasGraphics()) { this->lcd->bltGlyph(24, 40, ohw_logo_antipixel_width, ohw_logo_antipixel_height, ohw_logo_antipixel_bits); } this->lcd->on_refresh(true); // tell lcd to display now // Default top screen this->top_screen= new MainMenuScreen(); this->custom_screen->set_parent(this->top_screen); this->start_up = false; return; } MainMenuScreen *mms= static_cast<MainMenuScreen*>(this->top_screen); // after being idle for a while switch to Watch screen if (this->current_screen != NULL && this->idle_time > this->current_screen->idle_timeout_secs()*20) { this->idle_time = 0; if (mms->watch_screen != this->current_screen) { this->enter_screen(mms->watch_screen); // TODO do we need to reset any state? } return; } if(current_screen == NULL && this->idle_time > 20*4) { this->enter_screen(mms->watch_screen); return; } if(this->do_encoder) { this->do_encoder= false; encoder_check(0); } if (this->do_buttons) { // we don't want to do SPI in interrupt mode this->do_buttons = false; // read the actual buttons int but = lcd->readButtons(); if (but != 0) { this->idle_time = 0; if(current_screen == NULL) { // we were in startup screen so go to watch screen this->enter_screen(mms->watch_screen); return; } } // fire events if the buttons are active and debounce is satisfied this->up_button.check_signal(but & BUTTON_UP); this->down_button.check_signal(but & BUTTON_DOWN); this->back_button.check_signal(but & BUTTON_LEFT); this->click_button.check_signal(but & BUTTON_SELECT); this->pause_button.check_signal(but & BUTTON_PAUSE); } // If we are in menu mode and the position has changed if ( this->mode == MENU_MODE && this->counter_change() ) { this->menu_update(); } // If we are in control mode if ( this->mode == CONTROL_MODE && this->counter_change() ) { this->control_value_update(); } // If we must refresh if ( this->refresh_flag ) { this->refresh_flag = false; if (this->current_screen != NULL) { this->current_screen->on_refresh(); this->lcd->on_refresh(); } } }
int main() { // Default pins to low status for (int i = 0; i < 5; i++){ leds[i].output(); leds[i] = (i & 1) ^ 1; } //bool sdok= (sd.disk_initialize() == 0); sd.disk_initialize(); Kernel* kernel = new Kernel(); kernel->streams->printf("Smoothie ( grbl port ) version 0.8.0-rc1 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()); // Create and add main modules kernel->add_module( new Laser() ); kernel->add_module( new Extruder() ); kernel->add_module( new SimpleShell() ); kernel->add_module( new Configurator() ); kernel->add_module( new CurrentControl() ); kernel->add_module( new TemperatureControlPool() ); 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() ); kernel->add_module( new Panel() ); kernel->add_module( new Touchprobe() ); // 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 ); //} 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(); // Main loop while(1){ kernel->call_event(ON_MAIN_LOOP); kernel->call_event(ON_IDLE); } }
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 Laser() ); kernel->add_module( new ExtruderMaker() ); kernel->add_module( new SimpleShell() ); kernel->add_module( new Configurator() ); kernel->add_module( new CurrentControl() ); kernel->add_module( new TemperatureControlPool() ); 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() ); kernel->add_module( new Panel() ); kernel->add_module( new Touchprobe() ); // 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); } }
void init() { // Default pins to low status for (int i = 0; i < 5; i++){ leds[i].output(); 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()); #ifdef CNC kernel->streams->printf(" CNC Build\r\n"); #endif bool sdok= (sd.disk_initialize() == 0); 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()){ // 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); memset(v, 0, n); // clear the allocated memory msc= new(v) USBMSD(&u, &sd); // allocate object using zeroed memory }else{ msc= NULL; kernel->streams->printf("MSD is disabled\r\n"); } #endif // Create and add main modules kernel->add_module( new(AHB0) Player() ); kernel->add_module( new(AHB0) CurrentControl() ); kernel->add_module( new(AHB0) KillButton() ); kernel->add_module( new(AHB0) PlayLed() ); kernel->add_module( new(AHB0) Endstops() ); // these modules can be completely disabled in the Makefile by adding to EXCLUDE_MODULES #ifndef NO_TOOLS_SWITCH SwitchPool *sp= new SwitchPool(); sp->load_tools(); delete sp; #endif #ifndef NO_TOOLS_EXTRUDER // NOTE this must be done first before Temperature control so ToolManager can handle Tn before temperaturecontrol module does ExtruderMaker *em= new ExtruderMaker(); em->load_tools(); delete em; #endif #ifndef NO_TOOLS_TEMPERATURECONTROL // Note order is important here must be after extruder so Tn as a parameter will get executed first TemperatureControlPool *tp= new TemperatureControlPool(); tp->load_tools(); delete tp; #endif #ifndef NO_TOOLS_LASER kernel->add_module( new Laser() ); #endif #ifndef NO_TOOLS_SPINDLE kernel->add_module( new Spindle() ); #endif #ifndef NO_UTILS_PANEL kernel->add_module( new(AHB0) Panel() ); #endif #ifndef NO_TOOLS_ZPROBE kernel->add_module( new(AHB0) ZProbe() ); #endif #ifndef NO_TOOLS_SCARACAL kernel->add_module( new(AHB0) SCARAcal() ); #endif #ifndef NO_TOOLS_ROTARYDELTACALIBRATION kernel->add_module( new RotaryDeltaCalibration() ); #endif #ifndef NONETWORK kernel->add_module( new Network() ); #endif #ifndef NO_TOOLS_TEMPERATURESWITCH // Must be loaded after TemperatureControl kernel->add_module( new TemperatureSwitch() ); #endif #ifndef NO_TOOLS_DRILLINGCYCLES kernel->add_module( new Drillingcycles() ); #endif #ifndef NO_TOOLS_FILAMENTDETECTOR kernel->add_module( new FilamentDetector() ); #endif #ifndef NO_UTILS_MOTORDRIVERCONTROL kernel->add_module( new MotorDriverControl(0) ); #endif // Create and initialize USB stuff u.init(); #ifdef DISABLEMSD if(sdok && msc != NULL){ kernel->add_module( msc ); } #else kernel->add_module( &msc ); #endif kernel->add_module( &usbserial ); if( kernel->config->value( second_usb_serial_enable_checksum )->by_default(false)->as_bool() ){ kernel->add_module( new(AHB0) USBSerial(&u) ); } if( kernel->config->value( dfu_enable_checksum )->by_default(false)->as_bool() ){ kernel->add_module( new(AHB0) DFU(&u)); } // 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{ 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 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 indicates 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); } } // start the timers and interrupts THEKERNEL->step_ticker->start(); THEKERNEL->slow_ticker->start(); }