This application translates HTTP GET requests into the proper RS232 commands to control a Sharp Aquos TV
Dependencies: EthernetInterface mbed-rtos mbed
AquosHTTP.cpp
- Committer:
- davisw00
- Date:
- 2014-09-06
- Revision:
- 2:3637af74f7f0
- Parent:
- 0:427a14ebab60
File content as of revision 2:3637af74f7f0:
#include "AquosHTTP.h" AquosHTTP::AquosHTTP(DebugPort *dbg, AquosTV* tv) { m_dbg = dbg; m_tv = tv; 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"); } ret = -1; while(ret<0) { 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"); } else { ret = m_server.listen(1); if(ret<0) m_dbg->send("Server failed to listen"); } } 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; } AquosHTTP& AquosHTTP::returnHelp() { int helplen = strlen(gblHelp); char* buf = new char[helplen+256]; 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); m_client.send(buf,strlen(buf)); m_client.close(); delete [] buf; return *this; }