2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
3 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.
4 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.
5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
8 #include "libs/Kernel.h"
9 #include "modules/tools/laser/Laser.h"
10 #include "modules/tools/extruder/Extruder.h"
11 #include "modules/tools/temperaturecontrol/TemperatureControlPool.h"
12 #include "modules/tools/endstops/Endstops.h"
13 #include "modules/tools/switch/SwitchPool.h"
14 #include "modules/robot/Player.h"
15 #include "modules/utils/simpleshell/SimpleShell.h"
16 #include "modules/utils/configurator/Configurator.h"
17 #include "modules/utils/currentcontrol/CurrentControl.h"
18 #include "modules/utils/pausebutton/PauseButton.h"
19 // #include "libs/ChaNFSSD/SDFileSystem.h"
20 #include "libs/Config.h"
21 #include "libs/nuts_bolts.h"
22 #include "libs/utils.h"
25 #include "libs/SerialMessage.h"
27 #include "libs/USBDevice/USB.h"
28 #include "libs/USBDevice/USBMSD/USBMSD.h"
29 #include "libs/USBDevice/USBMSD/SDCard.h"
30 #include "libs/USBDevice/USBSerial/USBSerial.h"
31 #include "libs/USBDevice/DFU.h"
33 #include "libs/SDFAT.h"
35 #include "libs/Watchdog.h"
37 #define second_usb_serial_enable_checksum CHECKSUM("second_usb_serial_enable")
39 // Watchdog wd(5000000, WDT_MRI);
41 // #include "libs/USBCDCMSC/USBCDCMSC.h"
42 // SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC17xx specific : comment if you are not using a SD card ( for example with a mBed ).
43 SDCard
sd(P0_9
, P0_8
, P0_7
, P0_6
);
44 //LocalFileSystem local("local"); // LPC17xx specific : comment if you are not running a mBed
45 // USBCDCMSC cdcmsc(&sd); // LPC17xx specific : Composite serial + msc USB device
49 USBSerial
usbserial(&u
);
53 SDFAT
mounter("sd", &sd
);
66 for (int i
= 0; i
< 5; i
++)
69 leds
[i
] = (i
& 1) ^ 1;
74 Kernel
* kernel
= new Kernel();
76 kernel
->streams
->printf("Smoothie ( grbl port ) version 0.7.2 \r\n");
78 // kernel->streams->printf("Disk Status: %d, Type: %d\n", sd.disk_status(), sd.card_type());
79 // if (sd.disk_status() == 0) {
83 // if (sd.disk_sectors() >= (1<<21)) {
84 // s1 = sd.disk_sectors() >> 21;
85 // s2 = ((sd.disk_sectors() * 10) >> 21) - (s1 * 10);
88 // else if (sd.disk_sectors() >= (1<<11)) {
89 // s1 = sd.disk_sectors() >> 11;
90 // s2 = ((sd.disk_sectors() * 10) >> 11) - (s1 * 10);
93 // else if (sd.disk_sectors() >= (1<< 1)) {
94 // s1 = sd.disk_sectors() >> 1;
95 // s2 = ((sd.disk_sectors() * 10) >> 1) - (s1 * 10);
99 // s1 = sd.disk_sectors() << 9;
103 // kernel->streams->printf("Card has %lu blocks; %llu bytes; %d.%d%cB\n", sd.disk_sectors(), sd.disk_size(), s1, s2, suffix);
106 kernel
->add_module( new Laser() );
107 // kernel->add_module( &wd );
108 kernel
->add_module( new Extruder() );
109 kernel
->add_module( new SimpleShell() );
110 kernel
->add_module( new Configurator() );
111 kernel
->add_module( new CurrentControl() );
112 kernel
->add_module( new TemperatureControlPool() );
113 kernel
->add_module( new SwitchPool() );
114 kernel
->add_module( new PauseButton() );
115 kernel
->add_module( new Endstops() );
119 kernel
->add_module( &msc
);
120 kernel
->add_module( &usbserial
);
121 if( kernel
->config
->value( second_usb_serial_enable_checksum
)->by_default(false)->as_bool() ){
122 kernel
->add_module( new USBSerial(&u
) );
124 kernel
->add_module( &dfu
);
125 kernel
->add_module( &u
);
127 struct SerialMessage message
;
128 message
.message
= "G90";
129 message
.stream
= kernel
->serial
;
130 kernel
->call_event(ON_CONSOLE_LINE_RECEIVED
, &message
);
133 kernel
->call_event(ON_MAIN_LOOP
);
134 kernel
->call_event(ON_IDLE
);