Operating System
Dependencies: UnitTest wolfssh mDNS wolfcrypt wolfSSL
This is an embedded operating system for K64F. It includes a ssh server, a web-server and mDNS server. It has POST on boot. The main purpose of the OS is a router for the thing network.
main.cpp
- Committer:
- sPymbed
- Date:
- 2019-06-13
- Revision:
- 2:453e73d66757
- Parent:
- 1:4059ac7ebc65
- Child:
- 3:351ee68a721d
File content as of revision 2:453e73d66757:
#include "mbed.h" #include <EthernetInterface.h> #include <FreescaleIAP.h> #include <drivers/vga.h> #include <gui/desktop.h> //#define DEBUG //#define GRAPHICSMODE const int PORT = 8000; static const char* SERVER_IP = "172.26.10.207"; //IP of server board char screen[3840]; DigitalOut red(LED_RED); DigitalOut blue(LED_BLUE); DigitalOut green(LED_GREEN); class PrintfTCPHandler { public: bool HandleTransmissionControlProtocolMessage(TCPSocket* socket, char* data, uint16_t size) { if(size > 9 && data[0] == 'G' && data[1] == 'E' && data[2] == 'T' && data[3] == ' ' && data[4] == '/' && data[5] == ' ' && data[6] == 'H' && data[7] == 'T' && data[8] == 'T' && data[9] == 'P' ) { socket->send((uint8_t*)"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); socket->close(); } return true; } }; void write(unsigned int n, unsigned int addressOfX, char X){ unsigned int address = n * SECTOR_SIZE; //Write in last sector char *data = (char*)address; //Read // This works in C and C++ char b[SECTOR_SIZE]; b[addressOfX] = X; memcpy(b, data, SECTOR_SIZE * sizeof(char)); // int is a POD erase_sector(address); program_flash(address, b, SECTOR_SIZE); //an integers has four bytes each. } char read(unsigned int address){ char *data = (char*)address; //Read return data[0]; } int main() { red = 1; blue = 0; green = 1; printf("Hello World! --- http://www.AlgorithMan.de\n"); //TaskManager taskManager; /* Task task1(&gdt, taskA); Task task2(&gdt, taskB); taskManager.AddTask(&task1); taskManager.AddTask(&task2); */ //InterruptManager interrupts(0x20, &gdt, &taskManager); //SyscallHandler syscalls(&interrupts, 0x80); printf("Initializing Hardware, Stage 1\n"); #ifdef GRAPHICSMODE Desktop desktop(320, 200, 0x00, 0x00, 0xA8); #endif //DriverManager drvManager; #ifdef GRAPHICSMODE //KeyboardDriver keyboard(&interrupts, &desktop); #else //PrintfKeyboardEventHandler kbhandler; //KeyboardDriver keyboard(&interrupts, &kbhandler); #endif //drvManager.AddDriver(&keyboard); #ifdef GRAPHICSMODE //MouseDriver mouse(&interrupts, &desktop); #else //MouseToConsole mousehandler; //MouseDriver mouse(&interrupts, &mousehandler); #endif //drvManager.AddDriver(&mouse); //PeripheralComponentInterconnectController PCIController; //PCIController.SelectDrivers(&drvManager, &interrupts); #ifdef GRAPHICSMODE VideoGraphicsArray vga; #endif printf("Initializing Hardware, Stage 2\n"); //drvManager.ActivateAll(); printf("Initializing Hardware, Stage 3\n"); #ifdef GRAPHICSMODE vga.SetMode(320, 200, 8); Window win1(&desktop, 10, 10, 20, 20, 0xA8, 0x00, 0x00); desktop.AddChild(&win1); Window win2(&desktop, 40, 15, 30, 30, 0x00, 0xA8, 0x00); desktop.AddChild(&win2); #endif EthernetInterface interface; interface.disconnect(); interface.connect(); // Show the network address const char *ip = interface.get_ip_address(); printf("IP address is: %s\n", ip ? ip : "No IP"); //InternetControlMessageProtocol icmp(&ipv4); //interrupts.Activate(); printf("\n\n\n\n"); PrintfTCPHandler tcphandler; TCPServer server; UDPSocket sockUDP(&interface); //creat Ethernet socket SocketAddress sockAddr(SERVER_IP, PORT); server.open(&interface); server.bind(interface.get_ip_address(), 80); server.listen(); server.set_blocking(false); TCPSocket client; //!< client class SocketAddress clt_addr; int bufferSize = 512; char buffer[bufferSize]; //TransmissionControlProtocolSocket* tcpsocket = tcp.Connect(ip2_be, 1234); //tcpsocket->Send((uint8_t*)"Hello TCP!", 10); //icmp.RequestEchoReply(gip_be); //PrintfUDPHandler udphandler; //UserDatagramProtocolSocket* udpsocket = udp.Listen(1234); //udp.Bind(udpsocket, &udphandler); while (true){ //printf("\nCLIENT - Sending '%i' to server %s\r\n", screen[0], SERVER_IP); //print message to send sockUDP.sendto(SERVER_IP, PORT, screen, sizeof(screen)); server.accept(&client, &clt_addr); int len = client.recv(&buffer, bufferSize); #ifdef DEBUG printf("%d: ", len); for (int i = 0; i < len; i++) printf("%d ", buffer[i]); printf("\r\n"); #endif tcphandler.HandleTransmissionControlProtocolMessage(&client, (char*)buffer, len); wait(0.03333333); } }