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

Dependencies:   EthernetInterface mbed-rtos mbed

AquosTV.cpp

Committer:
davisw00
Date:
2014-07-29
Revision:
1:64bfc05e387d
Parent:
0:427a14ebab60
Child:
2:3637af74f7f0

File content as of revision 1:64bfc05e387d:

#include "AquosTV.h"

AquosTV::AquosTV(DebugPort* dbg) {
    m_dbg = dbg;
    init();
}

AquosTV::~AquosTV() {
    delete m_tv;
}

void AquosTV::init() {
    m_tv = new Serial(PTC17,PTC16);
    m_tv->baud(9600);
    m_tv->format(8,SerialBase::None,1);
    memset(httpcmd,0,sizeof(char)*BUF_SIZE);
    memset(rs232cmd,0,sizeof(char)*BUF_SIZE);
    m_tv->printf("RSPW1   \r");  //--- enable rs232 commands for power on/off
}
        
bool AquosTV::processCommand(const char* httpin) {
    int i;
    int j;
    bool ret=false;
    
    char request[BUF_SIZE];
    strncpy(httpcmd,httpin,BUF_SIZE-1);
    httpcmd[AQUOSBUF-1] = '\0';
    rs232cmd[0]='\0';
    if(httpcmd[0] == 'G' && httpcmd[1] == 'E' && httpcmd[2]=='T' && httpcmd[3]==' ' && httpcmd[4]=='/') {
        for(i=5;httpcmd[i]!=' '&&httpcmd[i]!='\0'&&i<AQUOSBUF-1;++i) {
            request[i-5]=(httpcmd[i] | 0x20);  //make lower case
        }
        request[i-5]='\0';
        m_dbg->send("\n\rReceived Command Request:  ");
        m_dbg->send(request);
        m_dbg->send("\n\r");
            
        if(strncmp(request,"poweron",BUF_SIZE-1)==0) {
            strncpy(rs232cmd,"POWR1   \r",BUF_SIZE-1);
            ret = true;
        }
        else if(strncmp(request,"poweroff",BUF_SIZE-1)==0) {
            strncpy(rs232cmd,"POWR0   \r",BUF_SIZE-1);
            ret = true;
        }
        else if(strncmp(request,"selecttv",BUF_SIZE-1)==0) {
            strncpy(rs232cmd,"ITVD0   \r",BUF_SIZE-1);
            ret = true;
        }
        else if(strncmp(request,"input",5)==0) {
            i=request[5]-'0';
            if(i>0 && i<10) {
                 snprintf(rs232cmd,BUF_SIZE-1,"IAVD%i   \r",i);
                ret = true;
            }
        }
        else if(strncmp(request,"volume",6)==0) {
            i=request[6]-'0';
            j=request[7]-'0';
            if(i>=0&&i<10) {
                if(j>=0&&j<10) {
                    i = 10*i + j;
                }
                snprintf(rs232cmd,BUF_SIZE-1,"VOLM%02i  \r",i);
                ret = true;
            }
        }
    }
    
    if(ret) {
        m_dbg->send("\n\rCommand Interpreted:  ");
        m_dbg->send(rs232cmd);
        m_dbg->send("\n");
        m_tv->printf(rs232cmd);
    }
    else {
        m_dbg->send("Unknown Command Request\n\r");
    }
    return ret;
}
        
const char* AquosTV::tvcmd()  { return rs232cmd; }
const char* AquosTV::http() { return httpcmd; }