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

rwil::X10 Namespace Reference

This namespace contains functions for blocking access to the x10 network. More...


Functions

void send_init ()
 Sends the initialize command to the PowerLinc. Automatically called by the other functions. More...

void send_X10 (char realhouse, char realnumber, char command)
 Sends a simple X10 command. More...

int createCompAndAddSig (char *input, char *output, int inputlength)
 Complement the the bits and add the signature as required. More...

void send_Dim_X10 (char realhouse, char realnumber, int percent)
 Send a dim command to a device. More...

int stripSigAndCompress (char *input, char *output, int inputlength)
 Remove the signature and uncomplement the bits. More...

void send_arbitrary (char data[10], int sizebits)
 Send an arbitrary chunk of data to the PowerLinc. More...

int readFromX10 (char *buffer, int bufSize)
 Read data from the X10 interface until either a Carriage return is found or th ebuffer is full. More...

int get_status_X10 (char realhouse, char realnumber)
 Get the current status of a device. More...


Detailed Description

This namespace contains functions for blocking access to the x10 network.

Function Documentation

int rwil::X10::createCompAndAddSig char *    input,
char *    output,
int    inputlength
 

Complement the the bits and add the signature as required.

Definition at line 114 of file X10Interface.cpp.

00115     {
00116       int inPos= 0;
00117       int outPos = 0;
00118       int bitLength = inputlength;
00119         
00120       SetBit(output, 0, 1);
00121       SetBit(output, 1, 1);
00122       SetBit(output, 2, 1);
00123       SetBit(output, 3, 0);
00124         
00125       outPos = 4;
00126         
00127       for(;inPos < bitLength; inPos++)
00128         {       
00129           SetBit(output, outPos, input[inPos/8] & (1 << (7-inPos%8)) ? 1 : 0);
00130           outPos++;
00131           SetBit(output, outPos, input[inPos/8] & (1 << (7-inPos%8)) ? 0 : 1);
00132           outPos++;
00133         }
00134       return outPos; /*Not sure if this is right*/
00135     }

int rwil::X10::get_status_X10 char    realhouse,
char    realnumber
 

Get the current status of a device.

Definition at line 266 of file X10Interface.cpp.

00267     {
00268       char data[10], output[20], realout[20];
00269       int loc;
00270       int n;
00271       time_t temp;
00272 
00273       temp = time(0);
00274 
00275       send_init();
00276         
00277       //House Code A
00278       SetBits(data, 0, 4, realhouse - 0x40);
00279       //Extended Code 1
00280       SetBits(data, 4, 5, 0x0F);
00281         
00282       //Unit Code
00283       SetBits(data, 9, 4, (realnumber - 0x40) >> 1);    
00284         
00285       //Status Check
00286       SetBits(data, 13, 8, 0x00);
00287       //
00288       SetBits(data, 21, 8, 0x37);
00289         
00290         
00291       loc = createCompAndAddSig(data, output, 29);
00292       SetBits(output, loc, 20, 0);
00293       //        PrintBits(output, 80);
00294 
00295       memcpy(realout, "\x80\x09", 2);
00296       memcpy(realout+2, output, 10);
00297 
00298       write(fd, realout, 12);
00299         
00300       while(1)
00301         {
00302           if((time(0)-temp) > 10) return -1;
00303           loc = read(fd, data, 1);
00304           /*if(loc==1)  printf("=%x\n", 0xFF &(int)data[0]);*/
00305           if((loc==1) && (data[0] == CARRIAGE))
00306             break;
00307         }
00308         
00309       n=0;
00310       data[0] = 0;
00311       while(1)
00312         {
00313           if((time(0)-temp) > 10) return -1;
00314           loc = read(fd, data, 1);
00315           if(loc==1)
00316             {
00317               /*                        printf("=%x\n", 0xFF &(int)data[0]);*/
00318               if(data[0] == CARRIAGE)
00319                 break;
00320               output[n] = data[0];
00321               n++;
00322             }
00323         }
00324       stripSigAndCompress(output, realout, 56);
00325       /*PrintBits(realout, 25);*/
00326       return GetBits(realout, 15,6)*100/62;
00327     }

int rwil::X10::readFromX10 char *    buffer,
int    bufSize
 

Read data from the X10 interface until either a Carriage return is found or th ebuffer is full.

Definition at line 238 of file X10Interface.cpp.

00239     {
00240       char data[10], output[250];
00241       int n;
00242       int loc;
00243       n=0;
00244       data[0] = 0;
00245       while(1)
00246         {
00247           loc = read(fd, data, 1);
00248           if(loc==1)
00249             {
00250               /*                        printf("=%x\n", 0xFF &(int)data[0]);*/
00251               if(data[0] == CARRIAGE)
00252                 break;
00253               output[n] = data[0];
00254               n++;
00255               if(n>=bufSize*2) break;
00256             }
00257         }
00258         
00259       return stripSigAndCompress(output, buffer, 8 * n);
00260     }

void rwil::X10::send_arbitrary char    data[10],
int    sizebits
 

Send an arbitrary chunk of data to the PowerLinc.

Definition at line 204 of file X10Interface.cpp.

00205     {
00206       char output[25];
00207       int loc;
00208       time_t temp;
00209 
00210       temp = time(0);
00211         
00212       send_init();
00213         
00214       loc = createCompAndAddSig(data, output + 2, sizebits);
00215       SetBits(output + 2, loc, 16, 0);
00216       output[0] = 0x80;
00217       output[1] = loc / 8 + 1;
00218       //    PrintBits(output, 120);
00219 
00220       write(fd, output, loc / 8 + 4);
00221         
00222       while(1)
00223         {
00224           if((time(0)-temp) > 5) return;
00225           loc = read(fd, data, 1);
00226           if((loc==1) && (data[0] == CARRIAGE))
00227             break;
00228           //    printf("=%x\n", 0xFF &(int)data[0]);
00229         }
00230     }

void rwil::X10::send_Dim_X10 char    realhouse,
char    realnumber,
int    percent
 

Send a dim command to a device.

Definition at line 138 of file X10Interface.cpp.

00139     {
00140       char data[10], output[20], realout[20];
00141       int loc;
00142       int brightsend;
00143       time_t temp;
00144       //      printf("Send Dim %c %c %d\n", realhouse, realnumber, percent);
00145       temp = time(0);
00146 
00147       send_init();
00148         
00149       //House Code A
00150       SetBits(data, 0, 4, realhouse - 0x40);
00151       //Extended Code 1
00152       SetBits(data, 4, 5, 0x0F);
00153         
00154       //Unit Code
00155       SetBits(data, 9, 4, (realnumber - 0x40) >> 1);    
00156         
00157       //Full on is 0x3f ...  0x20 is about 50%
00158       if(percent < 0) brightsend = 0;
00159       else if(percent > 100) brightsend = 0x3f;
00160       else brightsend = percent * 62 /100;
00161         
00162         
00163       SetBits(data, 13, 8, brightsend);
00164       //PresetDim
00165       SetBits(data, 21, 8, 0x31);
00166         
00167       send_arbitrary(data, 29);
00168 
00169       loc = createCompAndAddSig(data, output, 29);
00170       SetBits(output, loc, 20, 0);
00171       //        PrintBits(output, 80);
00172 
00173       memcpy(realout, "\x80\x09", 2);
00174       memcpy(realout+2, output, 10);
00175       //        PrintBits(realout, 120);
00176 
00177       /*        write(fd, realout, 12);
00178         
00179                 while(1)
00180                 {
00181                 if((time(0)-temp) > 5) return;
00182                 loc = read(fd, data, 1);
00183                 if((loc==1) && (data[0] == CARRIAGE))
00184                 break;
00185                 //      printf("=%x\n", 0xFF &(int)data[0]);
00186                 }*/
00187     }

void rwil::X10::send_init  
 

Sends the initialize command to the PowerLinc. Automatically called by the other functions.

Definition at line 29 of file X10Interface.cpp.

00030     {
00031       int n=0;
00032       char buf[10];
00033       time_t temp;
00034 
00035       temp = time(0);
00036 
00037       if(fd==0)
00038         {
00039           open_port();
00040           configure_port();
00041         }
00042 
00043     writetwo:
00044       sleep(1);
00045 
00046       while(n<1)
00047         {       n=write(fd, "\002", 1);
00048         if(n < 1) printf("Write \\x02 failed"); }
00049       //        write(fd, "\x63\x46\x4c\x45\x41", 5);
00050 
00051       buf[0]=0x20;
00052       while(buf[0]!=0x06)
00053         {       
00054           if((time(0)-temp) > 5) return;
00055           n=read(fd, buf, 1);
00056           errno=0;
00057           if(buf[0]==0x15) goto writetwo;
00058           //            printf("%d&%d*%d=",fd, (int)buf[0], n);
00059         }
00060       while((buf[0]!=CARRIAGE) &&(buf[0]!=0xa))
00061         {
00062           n=read(fd, buf, 1);
00063           if(buf[0]!=CARRIAGE && n ==1) printf("Expected CARRIAGE got 0x%x\n", (int) buf[0]);
00064           if((time(0)-temp) > 5) return;
00065         }
00066     }

void rwil::X10::send_X10 char    realhouse,
char    realnumber,
char    command
 

Sends a simple X10 command.

Definition at line 69 of file X10Interface.cpp.

00070     {
00071       int n, x;
00072       char buf[11];
00073       time_t temp;
00074       temp = time(0);
00075       //        printf("before init --");
00076       send_init();
00077 
00078 
00079       //        printf(" and after\n");
00080 
00081       buf[0] = 0x63;
00082       buf[1] = realhouse;
00083       buf[2] = realnumber;
00084       buf[3] = command;
00085       buf[4] = 0x41;
00086       //        for(n=0;n<5;n++) printf("%X.", buf[n]);
00087       //        printf("here\n");
00088 
00089       n= write(fd, buf, 5);
00090       if(n!=5) printf("Write failed\n");
00091         
00092       buf[2] = 0;
00093       while(buf[2] != command)
00094         {
00095           n = 0;
00096           while(n<5)
00097             {
00098               x= read(fd, buf+n, 1);
00099               if((time(0)-temp) > 5) return;
00100               if(x ==1)
00101                 {
00102                   //                            printf("%x>", (unsigned)buf[n]);
00103                   n++;
00104                 }
00105             }
00106         }
00107     }

int rwil::X10::stripSigAndCompress char *    input,
char *    output,
int    inputlength
 

Remove the signature and uncomplement the bits.

Definition at line 190 of file X10Interface.cpp.

00191     {
00192       int inPos = 12;
00193       int outPos = 0;
00194         
00195       for(;inPos < inputlength; inPos+=2)
00196         {
00197           SetBit(output, outPos, input[inPos/8] & (1 << (7-inPos%8)) ? 1 : 0);
00198           outPos++;
00199         }
00200       return outPos;
00201     }


Generated on Thu Jan 17 15:51:21 2002 for RWIL - Real World Interface Library by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001