This application translates HTTP GET requests into the proper RS232 commands to control a Sharp Aquos TV

Dependencies:   EthernetInterface mbed-rtos mbed

Revision:
0:427a14ebab60
Child:
2:3637af74f7f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AquosHTTP.cpp	Tue Jul 29 23:01:55 2014 +0000
@@ -0,0 +1,89 @@
+ #include "AquosHTTP.h"
+ 
+  
+AquosHTTP::AquosHTTP(DebugPort *dbg) { 
+     m_dbg = dbg;
+    init(); 
+}
+
+void AquosHTTP::arrayinit(char* ary) {
+    memset(ary,0,sizeof(char)*BUF_SIZE);
+}
+void AquosHTTP::init() {
+    arrayinit(m_buffer);
+    arrayinit(m_response);
+}
+
+AquosHTTP::~AquosHTTP() { 
+    m_eth.disconnect();
+}
+
+AquosHTTP& AquosHTTP::init(const char* ipaddr, const char* netmask, const char* gateway) {
+    int ret;
+    init();
+    ret = m_eth.init(ipaddr,netmask,gateway);
+    if(ret<0) { 
+        m_dbg->send("EthernetInterface failed initialization",1);
+    } else {
+        m_dbg->send("EthernetInterface initialized:  ");
+        m_dbg->send(m_eth.getIPAddress());
+        m_dbg->send("\n\r");
+    }
+    
+    wait(0.1);
+    m_eth.connect(1000);  //usually fails, so no throw
+    wait(0.1); 
+    //m_server.set_blocking(true);
+    ret = m_server.bind(80);
+    if(ret<0) m_dbg->send("Server failed to bind",1);
+    ret = m_server.listen(1);
+    if(ret<0) m_dbg->send("Server failed to listen",1);
+    
+    return *this;
+}
+    
+     
+AquosHTTP& AquosHTTP::waitForRequest() {
+    int n;
+    int ret;
+    ret = m_server.accept(m_client);
+    if(ret<0) {
+        m_dbg->send("Error accepting client request");
+        return *this;
+    }
+    n = m_client.receive(m_buffer,BUF_SIZE-1);
+    if(n>=BUF_SIZE-1) {
+        m_dbg->send("Request exceeds buffer ... ignoring");
+        return *this;
+    }
+    m_buffer[BUF_SIZE-1] = '\0';
+    m_buffer[n] = '\0';
+    return *this;
+}
+
+const char* AquosHTTP::getRequest() const {return m_buffer; }
+
+int AquosHTTP::setResponse(const char* msg) {
+    snprintf(m_response,BUF_SIZE-1,"<html><body>%s for:<br/><pre>%s</pre></body></html>\n",msg,m_buffer);
+    return strlen(m_response);
+}
+
+AquosHTTP& AquosHTTP::returnSuccess() {
+    int msglen = setResponse("SUCCESS!");
+    char* buf = new char[msglen + 256];
+    snprintf(buf,msglen+255,"HTTP/1.1 200 OK\r\nContent-Length: %i\r\nConnection: close\r\nContent-type: text/html\r\n\r\n%s",msglen,m_response);
+    m_client.send(buf,strlen(buf));
+    m_client.close(); 
+    delete [] buf;
+    return *this;
+}
+
+AquosHTTP& AquosHTTP::returnFailure() {
+    int msglen = setResponse("FAILED!");
+    char* buf = new char[msglen + 256];
+    snprintf(buf,msglen+255,"HTTP/1.1 501 Not Implemented\r\nContent-Length: %i\r\nConnection: close\r\nContent-type: text/html\r\n\r\n%s",msglen,m_response);
+    m_client.send(buf,strlen(buf));
+    m_client.close(); 
+    delete [] buf;
+    return *this;
+}
\ No newline at end of file