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:
- 1:4059ac7ebc65
- Parent:
- 0:97ba3e2cd071
- Child:
- 2:453e73d66757
File content as of revision 1:4059ac7ebc65:
#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; } }; 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 /* printf("\nS-ATA primary master: "); AdvancedTechnologyAttachment ata0m(true, 0x1F0); ata0m.Identify(); printf("\nS-ATA primary slave: "); AdvancedTechnologyAttachment ata0s(false, 0x1F0); ata0s.Identify(); ata0s.Write28(0, (uint8_t*)"http://www.AlgorithMan.de", 25); ata0s.Flush(); ata0s.Read28(0, 25); printf("\nS-ATA secondary master: "); AdvancedTechnologyAttachment ata1m(true, 0x170); ata1m.Identify(); printf("\nS-ATA secondary slave: "); AdvancedTechnologyAttachment ata1s(false, 0x170); ata1s.Identify(); // third: 0x1E8 // fourth: 0x168 */ 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"); //AddressResolutionProtocol arp(ðerframe); //InternetProtocolProvider ipv4(ðerframe, &arp, gip_be, subnet_be); //InternetControlMessageProtocol icmp(&ipv4); //UserDatagramProtocolProvider udp(&ipv4); //TransmissionControlProtocolProvider tcp(&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.Connect(ip2_be, 1234); //udp.Bind(udpsocket, &udphandler); //udpsocket->Send((uint8_t*)"Hello UDP!", 10); //UserDatagramProtocolSocket* udpsocket = udp.Listen(1234); //udp.Bind(udpsocket, &udphandler); /*unsigned int addressId = 1; unsigned int address = flash_size() - SECTOR_SIZE; //Write in last sector erase_sector(address); program_flash(address, (char*)&addressId, 4); //an integers has four bytes each. unsigned int *data = (unsigned int*)address; //Read*/ 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); } }