- Added machine position reporting to status queries. This will be further developed with part positioning/offsets and maintaining location upon reset. - System variables refactored into a global struct for better readability. - Removed old obsolete Ruby streaming scripts. These were no longer compatible. Updated Python streaming scripts. - Fixed printFloat() and other printing functions. - Decreased planner buffer back to 18 blocks and increased TX serial buffer to 64 bytes. Need the memory space for future developments. - Begun adding run-time modes to grbl, where block delete toggle, mm/in reporting modes, jog modes, etc can be set during runtime. Will be fleshed out and placed into EEPROM when everything is added.
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|   main.c - An embedded CNC Controller with rs274/ngc (g-code) support
 | |
|   Part of Grbl
 | |
| 
 | |
|   Copyright (c) 2009-2011 Simen Svale Skogsrud
 | |
|   Copyright (c) 2011 Sungeun K. Jeon
 | |
| 
 | |
|   Grbl 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.
 | |
| 
 | |
|   Grbl 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 Grbl.  If not, see <http://www.gnu.org/licenses/>.
 | |
| */
 | |
| 
 | |
| #include <avr/interrupt.h>
 | |
| #include <avr/pgmspace.h>
 | |
| #include "config.h"
 | |
| #include "planner.h"
 | |
| #include "nuts_bolts.h"
 | |
| #include "stepper.h"
 | |
| #include "spindle_control.h"
 | |
| #include "motion_control.h"
 | |
| #include "gcode.h"
 | |
| #include "protocol.h"
 | |
| #include "limits.h"
 | |
| #include "settings.h"
 | |
| #include "serial.h"
 | |
| 
 | |
| // Declare system global variable structure
 | |
| system_t sys; 
 | |
| 
 | |
| int main(void)
 | |
| {
 | |
|   // Initialize system
 | |
|   sei(); // Enable interrupts
 | |
|   serial_init(BAUD_RATE); // Setup serial baud rate and interrupts
 | |
|   st_init(); // Setup stepper pins and interrupt timers
 | |
| 
 | |
|   sys.abort = true;   // Set abort to complete initialization
 | |
|                     
 | |
|   while(1) {
 | |
|   
 | |
|     // Execute system reset upon a system abort, where the main program will return to this loop.
 | |
|     // Once here, it is safe to re-initialize the system. At startup, the system will automatically
 | |
|     // reset to finish the initialization process.
 | |
|     if (sys.abort) {
 | |
| 
 | |
|       // Clear all system variables
 | |
|       memset(&sys, 0, sizeof(sys));
 | |
|         
 | |
|       // Reset system.
 | |
|       serial_reset_read_buffer(); // Clear serial read buffer
 | |
|       settings_init(); // Load grbl settings from EEPROM
 | |
|       protocol_init(); // Clear incoming line data
 | |
|       plan_init(); // Clear block buffer and planner variables
 | |
|       gc_init(); // Set g-code parser to default state
 | |
|       spindle_init();   
 | |
|       limits_init();
 | |
|       st_reset(); // Clear stepper subsystem variables.
 | |
|       
 | |
|       // Set system runtime defaults
 | |
|       // TODO: Eventual move to EEPROM from config.h when all of the new settings are worked out. 
 | |
|       // Mainly to avoid having to maintain several different versions.
 | |
|       #ifdef CYCLE_AUTO_START
 | |
|         sys.auto_start = true;
 | |
|       #endif
 | |
|     }
 | |
|     
 | |
|     protocol_execute_runtime();
 | |
|     protocol_process(); // ... process the serial protocol
 | |
|     
 | |
|   }
 | |
|   return 0;   /* never reached */
 | |
| }
 |