Committer:
bromand
Date:
Mon Aug 22 01:48:39 2011 +0000
Revision:
0:990d96bbd6d0
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bromand 0:990d96bbd6d0 1 #include "mbed.h"
bromand 0:990d96bbd6d0 2 #include "EthernetNetIf.h"
bromand 0:990d96bbd6d0 3 #include "HTTPServer.h"
bromand 0:990d96bbd6d0 4 #include "HTTPRequestHandler.h"
bromand 0:990d96bbd6d0 5 #include "dbg/dbg.h"
bromand 0:990d96bbd6d0 6 #include <string>
bromand 0:990d96bbd6d0 7
bromand 0:990d96bbd6d0 8 EthernetNetIf eth;
bromand 0:990d96bbd6d0 9 HTTPServer svr;
bromand 0:990d96bbd6d0 10
bromand 0:990d96bbd6d0 11 DigitalOut led1(LED1);
bromand 0:990d96bbd6d0 12
bromand 0:990d96bbd6d0 13 struct system
bromand 0:990d96bbd6d0 14 {
bromand 0:990d96bbd6d0 15 bool bOverrideSystem;
bromand 0:990d96bbd6d0 16 bool bIsDoorClosed;
bromand 0:990d96bbd6d0 17 } system1;
bromand 0:990d96bbd6d0 18
bromand 0:990d96bbd6d0 19 struct cat
bromand 0:990d96bbd6d0 20 {
bromand 0:990d96bbd6d0 21 int id;
bromand 0:990d96bbd6d0 22 string name;
bromand 0:990d96bbd6d0 23 } cat1;
bromand 0:990d96bbd6d0 24
bromand 0:990d96bbd6d0 25
bromand 0:990d96bbd6d0 26 class CatDoorHandler : public HTTPRequestHandler
bromand 0:990d96bbd6d0 27 {
bromand 0:990d96bbd6d0 28 public:
bromand 0:990d96bbd6d0 29 CatDoorHandler(const char* rootPath, const char* path, TCPSocket* pTCPSocket): HTTPRequestHandler(rootPath, path, pTCPSocket){};
bromand 0:990d96bbd6d0 30 virtual ~CatDoorHandler(){ DBG("\r\nCatDoorHandler destroyed\r\n");};
bromand 0:990d96bbd6d0 31 static inline HTTPRequestHandler* inst(const char* rootPath, const char* path, TCPSocket* pTCPSocket) { return new CatDoorHandler(rootPath, path, pTCPSocket); } //if we ever could do static virtual functions, this would be one
bromand 0:990d96bbd6d0 32 virtual void doGet()
bromand 0:990d96bbd6d0 33 {
bromand 0:990d96bbd6d0 34 string name = cat1.name;
bromand 0:990d96bbd6d0 35 DBG("\r\nIn CatDoorHandler::doGet()\r\n");
bromand 0:990d96bbd6d0 36 string header = "<html><body><h1>Cat Door System</h1>";
bromand 0:990d96bbd6d0 37 string p1 = "<h2><u>System Status</u></h2>";
bromand 0:990d96bbd6d0 38 string p2 = system1.bOverrideSystem == true ? "Yes" : "No";
bromand 0:990d96bbd6d0 39 string p3 = "<p>Override System: " + p2 + "</p>";
bromand 0:990d96bbd6d0 40 string p4 = system1.bIsDoorClosed == true ? "Yes" : "No";
bromand 0:990d96bbd6d0 41 string p5 = "<p>Door Status: " + p4 + "</p>";
bromand 0:990d96bbd6d0 42 string p6 = "<h2><u>Cats Status</u></h2>";
bromand 0:990d96bbd6d0 43 string p7 = "<p>Is " + cat1.name + " Inside: Yes</p>";
bromand 0:990d96bbd6d0 44 string footer = "</body></html>";
bromand 0:990d96bbd6d0 45 string resp = header + p1 + p3 + p5 + p6 + p7 + footer;
bromand 0:990d96bbd6d0 46 setContentLen( resp.length());
bromand 0:990d96bbd6d0 47 respHeaders()["Connection"] = "close";
bromand 0:990d96bbd6d0 48 writeData(resp.c_str(), resp.length());
bromand 0:990d96bbd6d0 49 DBG("\r\nExit CatDoorHandler::doGet()\r\n");
bromand 0:990d96bbd6d0 50 }
bromand 0:990d96bbd6d0 51 virtual void doPost(){};
bromand 0:990d96bbd6d0 52 virtual void doHead(){};
bromand 0:990d96bbd6d0 53
bromand 0:990d96bbd6d0 54 virtual void onReadable(){}; //Data has been read
bromand 0:990d96bbd6d0 55 virtual void onWriteable()
bromand 0:990d96bbd6d0 56 {
bromand 0:990d96bbd6d0 57 DBG("\r\nCatDoorHandler::onWriteable() event\r\n");
bromand 0:990d96bbd6d0 58 close(); //Data written, we can close the connection
bromand 0:990d96bbd6d0 59 }
bromand 0:990d96bbd6d0 60 virtual void onClose(){}; //Connection is closing
bromand 0:990d96bbd6d0 61
bromand 0:990d96bbd6d0 62 virtual void SetOverrideSystem(bool bOverride)
bromand 0:990d96bbd6d0 63 {
bromand 0:990d96bbd6d0 64 bOverrideSystem = bOverride;
bromand 0:990d96bbd6d0 65 };
bromand 0:990d96bbd6d0 66
bromand 0:990d96bbd6d0 67 virtual void SetDoorStatus(bool bLocked)
bromand 0:990d96bbd6d0 68 {
bromand 0:990d96bbd6d0 69 bDoorStatus = bLocked;
bromand 0:990d96bbd6d0 70 };
bromand 0:990d96bbd6d0 71
bromand 0:990d96bbd6d0 72 virtual void SetIsCatInside(bool bIsInside)
bromand 0:990d96bbd6d0 73 {
bromand 0:990d96bbd6d0 74 bIsCatInside = bIsInside;
bromand 0:990d96bbd6d0 75 };
bromand 0:990d96bbd6d0 76
bromand 0:990d96bbd6d0 77 protected:
bromand 0:990d96bbd6d0 78 bool bOverrideSystem;
bromand 0:990d96bbd6d0 79 bool bDoorStatus;
bromand 0:990d96bbd6d0 80 bool bIsCatInside;
bromand 0:990d96bbd6d0 81
bromand 0:990d96bbd6d0 82 };
bromand 0:990d96bbd6d0 83
bromand 0:990d96bbd6d0 84 int main()
bromand 0:990d96bbd6d0 85 {
bromand 0:990d96bbd6d0 86 //Initialize system parameters
bromand 0:990d96bbd6d0 87 system1.bOverrideSystem = false;
bromand 0:990d96bbd6d0 88 system1.bIsDoorClosed = true; //Initialize default here read from sensor later
bromand 0:990d96bbd6d0 89
bromand 0:990d96bbd6d0 90 //Initialize cat 1 parameters
bromand 0:990d96bbd6d0 91 cat1.id = 1;
bromand 0:990d96bbd6d0 92 cat1.name = "Garfield";
bromand 0:990d96bbd6d0 93
bromand 0:990d96bbd6d0 94 printf("Setting up...\n");
bromand 0:990d96bbd6d0 95 EthernetErr ethErr = eth.setup();
bromand 0:990d96bbd6d0 96 if(ethErr)
bromand 0:990d96bbd6d0 97 {
bromand 0:990d96bbd6d0 98 printf("Error %d in setup.\n", ethErr);
bromand 0:990d96bbd6d0 99 return -1;
bromand 0:990d96bbd6d0 100 }
bromand 0:990d96bbd6d0 101 printf("Setup OK\n");
bromand 0:990d96bbd6d0 102
bromand 0:990d96bbd6d0 103 svr.addHandler<CatDoorHandler>("/"); //Default handler
bromand 0:990d96bbd6d0 104 svr.bind(80);
bromand 0:990d96bbd6d0 105
bromand 0:990d96bbd6d0 106 printf("Listening...\n");
bromand 0:990d96bbd6d0 107
bromand 0:990d96bbd6d0 108 Timer tm;
bromand 0:990d96bbd6d0 109 tm.start();
bromand 0:990d96bbd6d0 110 //Listen indefinitely
bromand 0:990d96bbd6d0 111 while(true)
bromand 0:990d96bbd6d0 112 {
bromand 0:990d96bbd6d0 113
bromand 0:990d96bbd6d0 114 Net::poll();
bromand 0:990d96bbd6d0 115 if(tm.read()>.5)
bromand 0:990d96bbd6d0 116 {
bromand 0:990d96bbd6d0 117 led1=!led1; //Show that we are alive
bromand 0:990d96bbd6d0 118 tm.start();
bromand 0:990d96bbd6d0 119 }
bromand 0:990d96bbd6d0 120 }
bromand 0:990d96bbd6d0 121
bromand 0:990d96bbd6d0 122 return 0;
bromand 0:990d96bbd6d0 123 }