Merge pull request #123 from logxen/button
[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/utils/button/ButtonPool.h"
15 #include "modules/robot/Player.h"
16 #include "modules/utils/simpleshell/SimpleShell.h"
17 #include "modules/utils/configurator/Configurator.h"
18 #include "modules/utils/currentcontrol/CurrentControl.h"
19 #include "modules/utils/pausebutton/PauseButton.h"
20 // #include "libs/ChaNFSSD/SDFileSystem.h"
21 #include "libs/Config.h"
22 #include "libs/nuts_bolts.h"
23 #include "libs/utils.h"
24
25 // Debug
26 #include "libs/SerialMessage.h"
27
28 #include "libs/USBDevice/USB.h"
29 #include "libs/USBDevice/USBMSD/USBMSD.h"
30 #include "libs/USBDevice/USBMSD/SDCard.h"
31 #include "libs/USBDevice/USBSerial/USBSerial.h"
32 #include "libs/USBDevice/DFU.h"
33
34 #include "libs/SDFAT.h"
35
36 #include "libs/Watchdog.h"
37
38 #define second_usb_serial_enable_checksum CHECKSUM("second_usb_serial_enable")
39
40 // Watchdog wd(5000000, WDT_MRI);
41
42 // #include "libs/USBCDCMSC/USBCDCMSC.h"
43 // SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC17xx specific : comment if you are not using a SD card ( for example with a mBed ).
44 SDCard sd(P0_9, P0_8, P0_7, P0_6);
45 //LocalFileSystem local("local"); // LPC17xx specific : comment if you are not running a mBed
46 // USBCDCMSC cdcmsc(&sd); // LPC17xx specific : Composite serial + msc USB device
47
48 USB u;
49
50 USBSerial usbserial(&u);
51 USBMSD msc(&u, &sd);
52 DFU dfu(&u);
53
54 SDFAT mounter("sd", &sd);
55
56 char buf[512];
57
58 GPIO leds[5] = {
59 GPIO(P1_18),
60 GPIO(P1_19),
61 GPIO(P1_20),
62 GPIO(P1_21),
63 GPIO(P4_28)
64 };
65
66 int main() {
67 for (int i = 0; i < 5; i++)
68 {
69 leds[i].output();
70 leds[i] = (i & 1) ^ 1;
71 }
72
73 sd.disk_initialize();
74
75 Kernel* kernel = new Kernel();
76
77 kernel->streams->printf("Smoothie ( grbl port ) version 0.7.2 \r\n");
78
79 // kernel->streams->printf("Disk Status: %d, Type: %d\n", sd.disk_status(), sd.card_type());
80 // if (sd.disk_status() == 0) {
81 // uint16_t s1;
82 // uint8_t s2;
83 // char suffix;
84 // if (sd.disk_sectors() >= (1<<21)) {
85 // s1 = sd.disk_sectors() >> 21;
86 // s2 = ((sd.disk_sectors() * 10) >> 21) - (s1 * 10);
87 // suffix = 'G';
88 // }
89 // else if (sd.disk_sectors() >= (1<<11)) {
90 // s1 = sd.disk_sectors() >> 11;
91 // s2 = ((sd.disk_sectors() * 10) >> 11) - (s1 * 10);
92 // suffix = 'M';
93 // }
94 // else if (sd.disk_sectors() >= (1<< 1)) {
95 // s1 = sd.disk_sectors() >> 1;
96 // s2 = ((sd.disk_sectors() * 10) >> 1) - (s1 * 10);
97 // suffix = 'K';
98 // }
99 // else {
100 // s1 = sd.disk_sectors() << 9;
101 // s2 = 0;
102 // suffix = ' ';
103 // }
104 // kernel->streams->printf("Card has %lu blocks; %llu bytes; %d.%d%cB\n", sd.disk_sectors(), sd.disk_size(), s1, s2, suffix);
105 // }
106
107 kernel->add_module( new Laser() );
108 // kernel->add_module( &wd );
109 kernel->add_module( new Extruder() );
110 kernel->add_module( new SimpleShell() );
111 kernel->add_module( new Configurator() );
112 kernel->add_module( new CurrentControl() );
113 kernel->add_module( new TemperatureControlPool() );
114 kernel->add_module( new SwitchPool() );
115 kernel->add_module( new ButtonPool() );
116 kernel->add_module( new PauseButton() );
117 kernel->add_module( new Endstops() );
118
119 u.init();
120
121 kernel->add_module( &msc );
122 kernel->add_module( &usbserial );
123 if( kernel->config->value( second_usb_serial_enable_checksum )->by_default(false)->as_bool() ){
124 kernel->add_module( new USBSerial(&u) );
125 }
126 kernel->add_module( &dfu );
127 kernel->add_module( &u );
128
129 struct SerialMessage message;
130 message.message = "G90";
131 message.stream = kernel->serial;
132 kernel->call_event(ON_CONSOLE_LINE_RECEIVED, &message );
133
134 while(1){
135 kernel->call_event(ON_MAIN_LOOP);
136 kernel->call_event(ON_IDLE);
137 }
138 }