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:
Tue Jul 29 23:01:55 2014 +0000
Revision:
0:427a14ebab60
Child:
1:64bfc05e387d
Initial working copy of HTTP-to-RS232 server for a Sharp Aquos TV

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davisw00 0:427a14ebab60 1 #include "AquosTV.h"
davisw00 0:427a14ebab60 2
davisw00 0:427a14ebab60 3 AquosTV::AquosTV(DebugPort* dbg) {
davisw00 0:427a14ebab60 4 m_dbg = dbg;
davisw00 0:427a14ebab60 5 init();
davisw00 0:427a14ebab60 6 }
davisw00 0:427a14ebab60 7
davisw00 0:427a14ebab60 8 AquosTV::~AquosTV() {
davisw00 0:427a14ebab60 9 delete m_tv;
davisw00 0:427a14ebab60 10 }
davisw00 0:427a14ebab60 11
davisw00 0:427a14ebab60 12 void AquosTV::init() {
davisw00 0:427a14ebab60 13 m_tv = new Serial(PTC17,PTC16);
davisw00 0:427a14ebab60 14 m_tv->baud(9600);
davisw00 0:427a14ebab60 15 m_tv->format(8,SerialBase::None,1);
davisw00 0:427a14ebab60 16 memset(httpcmd,0,sizeof(char)*BUF_SIZE);
davisw00 0:427a14ebab60 17 memset(rs232cmd,0,sizeof(char)*BUF_SIZE);
davisw00 0:427a14ebab60 18 }
davisw00 0:427a14ebab60 19
davisw00 0:427a14ebab60 20 bool AquosTV::processCommand(const char* httpin) {
davisw00 0:427a14ebab60 21 int i;
davisw00 0:427a14ebab60 22 int j;
davisw00 0:427a14ebab60 23 bool ret=false;
davisw00 0:427a14ebab60 24
davisw00 0:427a14ebab60 25 char request[BUF_SIZE];
davisw00 0:427a14ebab60 26 strncpy(httpcmd,httpin,BUF_SIZE-1);
davisw00 0:427a14ebab60 27 httpcmd[AQUOSBUF-1] = '\0';
davisw00 0:427a14ebab60 28 rs232cmd[0]='\0';
davisw00 0:427a14ebab60 29 if(httpcmd[0] == 'G' && httpcmd[1] == 'E' && httpcmd[2]=='T' && httpcmd[3]==' ' && httpcmd[4]=='/') {
davisw00 0:427a14ebab60 30 for(i=5;httpcmd[i]!=' '&&httpcmd[i]!='\0'&&i<AQUOSBUF-1;++i) {
davisw00 0:427a14ebab60 31 request[i-5]=(httpcmd[i] | 0x20); //make lower case
davisw00 0:427a14ebab60 32 }
davisw00 0:427a14ebab60 33 request[i-5]='\0';
davisw00 0:427a14ebab60 34 m_dbg->send("\n\rReceived Command Request: ");
davisw00 0:427a14ebab60 35 m_dbg->send(request);
davisw00 0:427a14ebab60 36 m_dbg->send("\n\r");
davisw00 0:427a14ebab60 37
davisw00 0:427a14ebab60 38 if(strncmp(request,"poweron",BUF_SIZE-1)==0) {
davisw00 0:427a14ebab60 39 strncpy(rs232cmd,"POWR1 \r",BUF_SIZE-1);
davisw00 0:427a14ebab60 40 ret = true;
davisw00 0:427a14ebab60 41 }
davisw00 0:427a14ebab60 42 else if(strncmp(request,"poweroff",BUF_SIZE-1)==0) {
davisw00 0:427a14ebab60 43 strncpy(rs232cmd,"POWR0 \r",BUF_SIZE-1);
davisw00 0:427a14ebab60 44 ret = true;
davisw00 0:427a14ebab60 45 }
davisw00 0:427a14ebab60 46 else if(strncmp(request,"selecttv",BUF_SIZE-1)==0) {
davisw00 0:427a14ebab60 47 strncpy(rs232cmd,"ITVD0 \r",BUF_SIZE-1);
davisw00 0:427a14ebab60 48 ret = true;
davisw00 0:427a14ebab60 49 }
davisw00 0:427a14ebab60 50 else if(strncmp(request,"input",5)==0) {
davisw00 0:427a14ebab60 51 i=request[5]-'0';
davisw00 0:427a14ebab60 52 if(i>0 && i<10) {
davisw00 0:427a14ebab60 53 snprintf(rs232cmd,BUF_SIZE-1,"IAVD%i \r",i);
davisw00 0:427a14ebab60 54 ret = true;
davisw00 0:427a14ebab60 55 }
davisw00 0:427a14ebab60 56 }
davisw00 0:427a14ebab60 57 else if(strncmp(request,"volume",6)==0) {
davisw00 0:427a14ebab60 58 i=request[6]-'0';
davisw00 0:427a14ebab60 59 j=request[7]-'0';
davisw00 0:427a14ebab60 60 if(i>=0&&i<10) {
davisw00 0:427a14ebab60 61 if(j>=0&&j<10) {
davisw00 0:427a14ebab60 62 i = 10*i + j;
davisw00 0:427a14ebab60 63 }
davisw00 0:427a14ebab60 64 snprintf(rs232cmd,BUF_SIZE-1,"VOLM%02i \r",i);
davisw00 0:427a14ebab60 65 ret = true;
davisw00 0:427a14ebab60 66 }
davisw00 0:427a14ebab60 67 }
davisw00 0:427a14ebab60 68 }
davisw00 0:427a14ebab60 69
davisw00 0:427a14ebab60 70 if(ret) {
davisw00 0:427a14ebab60 71 m_dbg->send("\n\rCommand Interpreted: ");
davisw00 0:427a14ebab60 72 m_dbg->send(rs232cmd);
davisw00 0:427a14ebab60 73 m_dbg->send("\n");
davisw00 0:427a14ebab60 74 m_tv->printf(rs232cmd);
davisw00 0:427a14ebab60 75 }
davisw00 0:427a14ebab60 76 else {
davisw00 0:427a14ebab60 77 m_dbg->send("Unknown Command Request\n\r");
davisw00 0:427a14ebab60 78 }
davisw00 0:427a14ebab60 79 return ret;
davisw00 0:427a14ebab60 80 }
davisw00 0:427a14ebab60 81
davisw00 0:427a14ebab60 82 const char* AquosTV::tvcmd() { return rs232cmd; }
davisw00 0:427a14ebab60 83 const char* AquosTV::http() { return httpcmd; }