This application translates HTTP GET requests into the proper RS232 commands to control a Sharp Aquos TV
Dependencies: EthernetInterface mbed-rtos mbed
AquosTV.cpp@0:427a14ebab60, 2014-07-29 (annotated)
- 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?
User | Revision | Line number | New 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; } |