Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

X10Device.cpp

Go to the documentation of this file.
00001 #include "X10Device.h"
00002 namespace rwil {
00003   ExecuteReturns::Returns X10Device::ExecuteMessage(const Message & msg)
00004   {
00005     char house, number;
00006     char temp[2];
00007     temp[1] = '\0';
00008     temp[0]= m_house;
00009     house = GetRealHouse(temp);
00010     number = GetRealNumber(m_number);
00011     if(msg.GetCommand()=="dim")
00012       {
00013         int percent = StringToInt(msg.GetParam("percent"));
00014         assert((percent >= 0) && (percent <= 100));
00015         if(!SupportsDim()) assert(0);
00016         X10::send_Dim_X10(house, number, percent);
00017         int real_percent = X10::get_status_X10(house, number);
00018         if((real_percent < 0) || (abs(percent-real_percent) > 3))
00019           {
00020             return ExecuteReturns::PleaseRetry;
00021           }
00022         brightness = real_percent;
00023       }
00024     if(msg.GetCommand()=="off")
00025       {
00026 
00027         if(!SupportsDim()) 
00028           {
00029             X10::send_X10(house, number, 'G');
00030           }
00031         else
00032           {
00033             X10::send_Dim_X10(house, number, 0);
00034           }
00035         int real_percent = X10::get_status_X10(house, number);
00036         if((real_percent < 0) || (abs(real_percent) > 3))
00037           {
00038             return ExecuteReturns::PleaseRetry;
00039           }
00040         brightness = 0;
00041       }
00042     if(msg.GetCommand()=="on")
00043       {
00044         if(!SupportsDim()) 
00045           {
00046             X10::send_X10(house, number, 'E');
00047           }
00048         else
00049           {
00050             X10::send_Dim_X10(house, number, 100);
00051           }
00052         int real_percent = X10::get_status_X10(house, number);
00053         if((real_percent < 0) || (abs(100-real_percent) > 3))
00054           {
00055             return ExecuteReturns::PleaseRetry;
00056           }
00057         brightness = 100;
00058       }
00059 
00060     m_output.Add(EncapsulatingMessage("success", msg));
00061     return ExecuteReturns::DontRetry;
00062   }
00063 
00064   char X10Device::GetRealHouse(std::string house) const
00065   {
00066     char chouse = house[0];
00067     switch(chouse)
00068       {
00069       case 'a' : case 'A' : return 'F';
00070       case 'b' : case 'B' : return 'N';
00071       case 'c' : case 'C' : return 'B';
00072       case 'd' : case 'D' : return 'J';
00073       case 'e' : case 'E' : return 'A';
00074       case 'f' : case 'F' : return 'I';
00075       case 'g' : case 'G' : return 'E';
00076       case 'h' : case 'H' : return 'M';
00077       case 'i' : case 'I' : return 'G';
00078       case 'j' : case 'J' : return 'O';
00079       case 'k' : case 'K' : return 'C';
00080       case 'l' : case 'L' : return 'K';
00081       case 'm' : case 'M' : return '@';
00082       case 'n' : case 'N' : return 'H';
00083       case 'o' : case 'O' : return 'D';
00084       case 'p' : case 'P' : return 'L';
00085       }
00086     assert(0); //should never get here
00087   }
00088 
00089   char X10Device::GetRealNumber(int unitnumber) const
00090   {
00091     switch(unitnumber)
00092       {
00093       case 1 : return 'L';
00094       case 2 : return '\\';
00095       case 3 : return 'D';
00096       case 4 : return 'T';
00097       case 5 : return 'B';
00098       case 6 : return 'R';
00099       case 7 : return 'J';
00100       case 8 : return 'Z';
00101       case 9 : return 'N';
00102       case 10 : return '^';
00103       case 11 : return 'F';
00104       case 12 : return 'V';
00105       case 13 : return '@';
00106       case 14 : return 'P';
00107       case 15 : return 'H';
00108       case 16 : return 'X';
00109       }
00110     assert(0); //should never get here  
00111   }
00112 
00113   void X10Device::SetHouse(std::string house) { m_house = house[0]; }
00114   void X10Device::SetNumber(int number) { m_number = number; }
00115 
00116   bool X10Device::SupportsDim() {return true; }
00117   std::string X10Device::GetStatus() const { return IntToString(brightness); }
00118   X10Device::X10Device(const std::string &name, MessageList& output, char house, int number) : Device(name, output), m_house(house), m_number(number) {}
00119 }

Generated on Tue Apr 9 13:53:08 2002 for RWIL - Real World Interface Library by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001