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

Dependencies:   EthernetInterface mbed-rtos mbed

Committer:
davisw00
Date:
Sat Sep 06 23:47:21 2014 +0000
Revision:
2:3637af74f7f0
Parent:
0:427a14ebab60
Implemented Channel commands.  Wait for response is not working; therefore commands are followed by a 50ms wait

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davisw00 0:427a14ebab60 1 #include "AquosHTTP.h"
davisw00 0:427a14ebab60 2
davisw00 0:427a14ebab60 3
davisw00 2:3637af74f7f0 4 AquosHTTP::AquosHTTP(DebugPort *dbg, AquosTV* tv) {
davisw00 0:427a14ebab60 5 m_dbg = dbg;
davisw00 2:3637af74f7f0 6 m_tv = tv;
davisw00 0:427a14ebab60 7 init();
davisw00 0:427a14ebab60 8 }
davisw00 0:427a14ebab60 9
davisw00 0:427a14ebab60 10 void AquosHTTP::arrayinit(char* ary) {
davisw00 0:427a14ebab60 11 memset(ary,0,sizeof(char)*BUF_SIZE);
davisw00 0:427a14ebab60 12 }
davisw00 0:427a14ebab60 13 void AquosHTTP::init() {
davisw00 0:427a14ebab60 14 arrayinit(m_buffer);
davisw00 0:427a14ebab60 15 arrayinit(m_response);
davisw00 0:427a14ebab60 16 }
davisw00 0:427a14ebab60 17
davisw00 0:427a14ebab60 18 AquosHTTP::~AquosHTTP() {
davisw00 0:427a14ebab60 19 m_eth.disconnect();
davisw00 0:427a14ebab60 20 }
davisw00 0:427a14ebab60 21
davisw00 0:427a14ebab60 22 AquosHTTP& AquosHTTP::init(const char* ipaddr, const char* netmask, const char* gateway) {
davisw00 0:427a14ebab60 23 int ret;
davisw00 0:427a14ebab60 24 init();
davisw00 0:427a14ebab60 25 ret = m_eth.init(ipaddr,netmask,gateway);
davisw00 0:427a14ebab60 26 if(ret<0) {
davisw00 0:427a14ebab60 27 m_dbg->send("EthernetInterface failed initialization",1);
davisw00 0:427a14ebab60 28 } else {
davisw00 0:427a14ebab60 29 m_dbg->send("EthernetInterface initialized: ");
davisw00 0:427a14ebab60 30 m_dbg->send(m_eth.getIPAddress());
davisw00 0:427a14ebab60 31 m_dbg->send("\n\r");
davisw00 0:427a14ebab60 32 }
davisw00 0:427a14ebab60 33
davisw00 2:3637af74f7f0 34 ret = -1;
davisw00 2:3637af74f7f0 35 while(ret<0) {
davisw00 2:3637af74f7f0 36 wait(0.1);
davisw00 2:3637af74f7f0 37 m_eth.connect(1000); //usually fails, so no throw
davisw00 2:3637af74f7f0 38 wait(0.1);
davisw00 2:3637af74f7f0 39 //m_server.set_blocking(true);
davisw00 2:3637af74f7f0 40 ret = m_server.bind(80);
davisw00 2:3637af74f7f0 41 if(ret<0) {
davisw00 2:3637af74f7f0 42 m_dbg->send("Server failed to bind");
davisw00 2:3637af74f7f0 43 } else {
davisw00 2:3637af74f7f0 44 ret = m_server.listen(1);
davisw00 2:3637af74f7f0 45 if(ret<0) m_dbg->send("Server failed to listen");
davisw00 2:3637af74f7f0 46 }
davisw00 2:3637af74f7f0 47 }
davisw00 0:427a14ebab60 48 return *this;
davisw00 0:427a14ebab60 49 }
davisw00 0:427a14ebab60 50
davisw00 0:427a14ebab60 51
davisw00 0:427a14ebab60 52 AquosHTTP& AquosHTTP::waitForRequest() {
davisw00 0:427a14ebab60 53 int n;
davisw00 0:427a14ebab60 54 int ret;
davisw00 0:427a14ebab60 55 ret = m_server.accept(m_client);
davisw00 0:427a14ebab60 56 if(ret<0) {
davisw00 0:427a14ebab60 57 m_dbg->send("Error accepting client request");
davisw00 0:427a14ebab60 58 return *this;
davisw00 0:427a14ebab60 59 }
davisw00 0:427a14ebab60 60 n = m_client.receive(m_buffer,BUF_SIZE-1);
davisw00 0:427a14ebab60 61 if(n>=BUF_SIZE-1) {
davisw00 0:427a14ebab60 62 m_dbg->send("Request exceeds buffer ... ignoring");
davisw00 0:427a14ebab60 63 return *this;
davisw00 0:427a14ebab60 64 }
davisw00 0:427a14ebab60 65 m_buffer[BUF_SIZE-1] = '\0';
davisw00 0:427a14ebab60 66 m_buffer[n] = '\0';
davisw00 0:427a14ebab60 67 return *this;
davisw00 0:427a14ebab60 68 }
davisw00 0:427a14ebab60 69
davisw00 0:427a14ebab60 70 const char* AquosHTTP::getRequest() const {return m_buffer; }
davisw00 0:427a14ebab60 71
davisw00 0:427a14ebab60 72 int AquosHTTP::setResponse(const char* msg) {
davisw00 0:427a14ebab60 73 snprintf(m_response,BUF_SIZE-1,"<html><body>%s for:<br/><pre>%s</pre></body></html>\n",msg,m_buffer);
davisw00 0:427a14ebab60 74 return strlen(m_response);
davisw00 0:427a14ebab60 75 }
davisw00 0:427a14ebab60 76
davisw00 0:427a14ebab60 77 AquosHTTP& AquosHTTP::returnSuccess() {
davisw00 0:427a14ebab60 78 int msglen = setResponse("SUCCESS!");
davisw00 0:427a14ebab60 79 char* buf = new char[msglen + 256];
davisw00 0:427a14ebab60 80 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);
davisw00 0:427a14ebab60 81 m_client.send(buf,strlen(buf));
davisw00 0:427a14ebab60 82 m_client.close();
davisw00 0:427a14ebab60 83 delete [] buf;
davisw00 0:427a14ebab60 84 return *this;
davisw00 0:427a14ebab60 85 }
davisw00 0:427a14ebab60 86
davisw00 2:3637af74f7f0 87
davisw00 2:3637af74f7f0 88
davisw00 0:427a14ebab60 89 AquosHTTP& AquosHTTP::returnFailure() {
davisw00 0:427a14ebab60 90 int msglen = setResponse("FAILED!");
davisw00 0:427a14ebab60 91 char* buf = new char[msglen + 256];
davisw00 0:427a14ebab60 92 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);
davisw00 0:427a14ebab60 93 m_client.send(buf,strlen(buf));
davisw00 0:427a14ebab60 94 m_client.close();
davisw00 0:427a14ebab60 95 delete [] buf;
davisw00 0:427a14ebab60 96 return *this;
davisw00 2:3637af74f7f0 97 }
davisw00 2:3637af74f7f0 98
davisw00 2:3637af74f7f0 99 AquosHTTP& AquosHTTP::returnHelp() {
davisw00 2:3637af74f7f0 100 int helplen = strlen(gblHelp);
davisw00 2:3637af74f7f0 101 char* buf = new char[helplen+256];
davisw00 2:3637af74f7f0 102 snprintf(buf,helplen+255,"HTTP/1.1 200 OK\r\nContent-Length: %i\r\nConnection: close\r\nContent-type: text/html\r\n\r\n%s",helplen,gblHelp);
davisw00 2:3637af74f7f0 103 m_client.send(buf,strlen(buf));
davisw00 2:3637af74f7f0 104 m_client.close();
davisw00 2:3637af74f7f0 105 delete [] buf;
davisw00 2:3637af74f7f0 106 return *this;
davisw00 0:427a14ebab60 107 }