Operating System
Dependencies: UnitTest wolfssh mDNS wolfcrypt wolfSSL
main.cpp
00001 #include "mbed.h" 00002 #include <EthernetInterface.h> 00003 #include <drivers/vga.h> 00004 #include <gui/desktop.h> 00005 #include "mDNSResponder.h" 00006 #include "UnitTest.h" 00007 #include <user_settings.h> 00008 #include <string> 00009 00010 #define MAXDATASIZE (1024*4) 00011 00012 //#define GRAPHICSMODE 00013 00014 const int PORT = 8000; 00015 static const char* SERVER_IP = "172.26.10.207"; //IP of server board 00016 char screen[3840]; 00017 00018 DigitalOut red(LED_RED); 00019 DigitalOut blue(LED_BLUE); 00020 DigitalOut green(LED_GREEN); 00021 FlashIAP flash; 00022 Serial pc(USBTX, USBRX); 00023 00024 class PrintfTCPHandler 00025 { 00026 public: 00027 bool HandleTransmissionControlProtocolMessage(TCPSocket* socket, char* data, uint16_t size) 00028 { 00029 if(size > 9 00030 && data[0] == 'G' 00031 && data[1] == 'E' 00032 && data[2] == 'T' 00033 && data[3] == ' ' 00034 && data[4] == '/' 00035 && data[5] == ' ' 00036 && data[6] == 'H' 00037 && data[7] == 'T' 00038 && data[8] == 'T' 00039 && data[9] == 'P' 00040 ) 00041 { 00042 unsigned int address = flash.get_flash_size() - 4096; //Write in last sector 00043 char *data = (char*)address; //Read 00044 socket->send("HTTP/1.1 200 OK\r\nServer: MyOS\r\nContent-Type: text/html\r\n\r\n<html><head><title>My Operating System</title></head><body><b>My Operating System</b> http://www.AlgorithMan.de</body></html>\r\n", 184); 00045 socket->close(); 00046 } else { 00047 socket->close(); 00048 } 00049 00050 return true; 00051 } 00052 }; 00053 00054 void write(unsigned int n, unsigned int addressOfX, char X){ 00055 unsigned int address = n * 4096; //Write in n sector 00056 char *data = (char*)address; //Read 00057 char b[4096]; 00058 b[addressOfX] = X; 00059 memcpy(b, data, 4096 * sizeof(char)); //int is a POD 00060 flash.erase(address, flash.get_sector_size(address)); 00061 flash.program(b, address, 4096); 00062 } 00063 00064 void write(char *data, unsigned int size){ 00065 unsigned int address = flash.get_flash_size() - 4096; //Write in last sector 00066 flash.erase(address, flash.get_sector_size(address)); 00067 flash.program(data, address, size); 00068 } 00069 00070 char read(unsigned int address){ 00071 char *data = (char*)address; //Read 00072 return data[0]; 00073 } 00074 00075 EthernetInterface interface; 00076 00077 void http() { 00078 PrintfTCPHandler tcphandler; 00079 TCPSocket server; 00080 server.open(&interface); 00081 server.bind(80); 00082 server.listen(1); 00083 TCPSocket *client; 00084 int bufferSize = 512; 00085 char buffer[bufferSize]; 00086 00087 while (true) { 00088 client = server.accept(); 00089 int len = client->recv(&buffer, bufferSize); 00090 00091 #ifdef DEBUG 00092 printf("%d: ", len); 00093 for (int i = 0; i < len; i++) 00094 printf("%d ", buffer[i]); 00095 printf("\r\n"); 00096 #endif 00097 00098 tcphandler.HandleTransmissionControlProtocolMessage(client, (char*)buffer, len); 00099 wait(0.03333333); 00100 } 00101 } 00102 00103 void mDNS() { 00104 mDNSResponder mdns(interface); 00105 mdns.announce(interface.get_ip_address()); 00106 while (true) { 00107 mdns.MDNS_process(); 00108 wait(0.03333333); 00109 } 00110 } 00111 00112 volatile char c = '\0'; // Initialized to the NULL character 00113 00114 void onCharReceived() 00115 { 00116 //c = pc.getc(); 00117 pc.putc(c); 00118 } 00119 00120 int main() { 00121 //pc.attach(&onCharReceived); 00122 pc.baud(115200); 00123 red = 1; 00124 blue = 0; 00125 green = 1; 00126 00127 UnitTest unitest; 00128 00129 unitest.assertOn(red, 1); 00130 00131 pc.printf("Hello World! --- http://www.AlgorithMan.de\n\r"); 00132 00133 //write("HTTP/1.1 200 OK\r\nServer: MyOS\r\nContent-Type: text/html\r\n\r\n<html><head><title>My Operating System</title></head><body><b>My Operating System</b> http://www.AlgorithMan.de</body></html>\r\n", 184); 00134 00135 Thread task1; 00136 Thread task2; 00137 00138 //InterruptManager interrupts(0x20, &gdt, &taskManager); 00139 00140 pc.printf("Initializing Hardware, Stage 1\n\r"); 00141 00142 #ifdef GRAPHICSMODE 00143 Desktop desktop(320, 200, 0x00, 0x00, 0xA8); 00144 #endif 00145 00146 00147 #ifdef GRAPHICSMODE 00148 //KeyboardDriver keyboard(&interrupts, &desktop); 00149 #else 00150 //PrintfKeyboardEventHandler kbhandler; 00151 //KeyboardDriver keyboard(&interrupts, &kbhandler); 00152 #endif 00153 00154 00155 #ifdef GRAPHICSMODE 00156 //MouseDriver mouse(&interrupts, &desktop); 00157 #else 00158 //MouseToConsole mousehandler; 00159 //MouseDriver mouse(&interrupts, &mousehandler); 00160 #endif 00161 00162 #ifdef GRAPHICSMODE 00163 VideoGraphicsArray vga; 00164 #endif 00165 00166 pc.printf("Initializing Hardware, Stage 2\n\r"); 00167 00168 #ifdef GRAPHICSMODE 00169 vga.SetMode(320, 200, 8); 00170 Window win1(&desktop, 10, 10, 20, 20, 0xA8, 0x00, 0x00); 00171 desktop.AddChild(&win1); 00172 Window win2(&desktop, 40, 15, 30, 30, 0x00, 0xA8, 0x00); 00173 desktop.AddChild(&win2); 00174 #endif 00175 00176 interface.connect(); 00177 00178 // Show the network address 00179 const char *ip = interface.get_ip_address(); 00180 pc.printf("IP address is: %s\n\r", ip ? ip : "No IP"); 00181 00182 //interrupts.Activate(); 00183 00184 //UDPSocket sockUDP; 00185 //sockUDP.open(&interface); 00186 00187 //TransmissionControlProtocolSocket* tcpsocket = tcp.Connect(ip2_be, 1234); 00188 //tcpsocket->Send((uint8_t*)"Hello TCP!", 10); 00189 00190 //PrintfUDPHandler udphandler; 00191 00192 //UserDatagramProtocolSocket* udpsocket = udp.Listen(1234); 00193 //udp.Bind(udpsocket, &udphandler); 00194 task1.start(mDNS); 00195 task2.start(http); 00196 string input; 00197 while (true){ 00198 //sockUDP.sendto(SERVER_IP, PORT, screen, sizeof(screen)); 00199 char c = pc.getc(); 00200 if (c == ';'){ 00201 pc.printf("%s\n\r", input.c_str()); 00202 input.clear(); 00203 } else { 00204 input += c; 00205 } 00206 wait(0.03333333); 00207 } 00208 }
Generated on Thu Jul 14 2022 03:24:47 by 1.7.2