Merge pull request #109 from logxen/edge
[clinton/Smoothieware.git] / src / main.cpp
1 /*
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/>.
6 */
7
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"
23
24 // Debug
25 #include "libs/SerialMessage.h"
26
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"
32
33 #include "libs/SDFAT.h"
34
35 #include "libs/Watchdog.h"
36
37 #define second_usb_serial_enable_checksum CHECKSUM("second_usb_serial_enable")
38
39 // Watchdog wd(5000000, WDT_MRI);
40
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
46
47 USB u;
48
49 USBSerial usbserial(&u);
50 USBMSD msc(&u, &sd);
51 DFU dfu(&u);
52
53 SDFAT mounter("sd", &sd);
54
55 char buf[512];
56
57 GPIO leds[5] = {
58 GPIO(P1_18),
59 GPIO(P1_19),
60 GPIO(P1_20),
61 GPIO(P1_21),
62 GPIO(P4_28)
63 };
64
65 int main() {
66 for (int i = 0; i < 5; i++)
67 {
68 leds[i].output();
69 leds[i] = (i & 1) ^ 1;
70 }
71
72 sd.disk_initialize();
73
74 Kernel* kernel = new Kernel();
75
76 kernel->streams->printf("Smoothie ( grbl port ) version 0.7.2 \r\n");
77
78 // kernel->streams->printf("Disk Status: %d, Type: %d\n", sd.disk_status(), sd.card_type());
79 // if (sd.disk_status() == 0) {
80 // uint16_t s1;
81 // uint8_t s2;
82 // char suffix;
83 // if (sd.disk_sectors() >= (1<<21)) {
84 // s1 = sd.disk_sectors() >> 21;
85 // s2 = ((sd.disk_sectors() * 10) >> 21) - (s1 * 10);
86 // suffix = 'G';
87 // }
88 // else if (sd.disk_sectors() >= (1<<11)) {
89 // s1 = sd.disk_sectors() >> 11;
90 // s2 = ((sd.disk_sectors() * 10) >> 11) - (s1 * 10);
91 // suffix = 'M';
92 // }
93 // else if (sd.disk_sectors() >= (1<< 1)) {
94 // s1 = sd.disk_sectors() >> 1;
95 // s2 = ((sd.disk_sectors() * 10) >> 1) - (s1 * 10);
96 // suffix = 'K';
97 // }
98 // else {
99 // s1 = sd.disk_sectors() << 9;
100 // s2 = 0;
101 // suffix = ' ';
102 // }
103 // kernel->streams->printf("Card has %lu blocks; %llu bytes; %d.%d%cB\n", sd.disk_sectors(), sd.disk_size(), s1, s2, suffix);
104 // }
105
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() );
116
117 u.init();
118
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) );
123 }
124 kernel->add_module( &dfu );
125 kernel->add_module( &u );
126
127 struct SerialMessage message;
128 message.message = "G90";
129 message.stream = kernel->serial;
130 kernel->call_event(ON_CONSOLE_LINE_RECEIVED, &message );
131
132 while(1){
133 kernel->call_event(ON_MAIN_LOOP);
134 kernel->call_event(ON_IDLE);
135 }
136 }