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... |
|
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 } |
|
Get the current status of a device.
Definition at line 265 of file X10Interface.cpp.
00266 { 00267 char data[10], output[20], realout[20]; 00268 int loc; 00269 int n; 00270 time_t temp; 00271 00272 temp = time(0); 00273 00274 send_init(); 00275 00276 //House Code A 00277 SetBits(data, 0, 4, realhouse - 0x40); 00278 //Extended Code 1 00279 SetBits(data, 4, 5, 0x0F); 00280 00281 //Unit Code 00282 SetBits(data, 9, 4, (realnumber - 0x40) >> 1); 00283 00284 //Status Check 00285 SetBits(data, 13, 8, 0x00); 00286 // 00287 SetBits(data, 21, 8, 0x37); 00288 00289 00290 loc = createCompAndAddSig(data, output, 29); 00291 SetBits(output, loc, 20, 0); 00292 // PrintBits(output, 80); 00293 00294 memcpy(realout, "\x80\x09", 2); 00295 memcpy(realout+2, output, 10); 00296 00297 write(fd, realout, 12); 00298 00299 while(1) 00300 { 00301 if((time(0)-temp) > 10) return -1; 00302 loc = read(fd, data, 1); 00303 /*if(loc==1) printf("=%x\n", 0xFF &(int)data[0]);*/ 00304 if((loc==1) && ((data[0] == CARRIAGE)|| (data[0] == 0xa))) 00305 break; 00306 } 00307 00308 n=0; 00309 data[0] = 0; 00310 while(1) 00311 { 00312 if((time(0)-temp) > 10) return -1; 00313 loc = read(fd, data, 1); 00314 if(loc==1) 00315 { 00316 /* printf("=%x\n", 0xFF &(int)data[0]);*/ 00317 if((data[0] == CARRIAGE)|| (data[0] == 0xa)) 00318 break; 00319 output[n] = data[0]; 00320 n++; 00321 } 00322 } 00323 stripSigAndCompress(output, realout, 56); 00324 /*PrintBits(realout, 25);*/ 00325 return GetBits(realout, 15,6)*100/62; 00326 } |
|
Read data from the X10 interface until either a Carriage return is found or th ebuffer is full.
Definition at line 237 of file X10Interface.cpp.
00238 { 00239 char data[10], output[250]; 00240 int n; 00241 int loc; 00242 n=0; 00243 data[0] = 0; 00244 while(1) 00245 { 00246 loc = read(fd, data, 1); 00247 if(loc==1) 00248 { 00249 /* printf("=%x\n", 0xFF &(int)data[0]);*/ 00250 if(data[0] == CARRIAGE) 00251 break; 00252 output[n] = data[0]; 00253 n++; 00254 if(n>=bufSize*2) break; 00255 } 00256 } 00257 00258 return stripSigAndCompress(output, buffer, 8 * n); 00259 } |
|
Send an arbitrary chunk of data to the PowerLinc.
Definition at line 203 of file X10Interface.cpp.
00204 { 00205 char output[25]; 00206 int loc; 00207 time_t temp; 00208 00209 temp = time(0); 00210 00211 send_init(); 00212 00213 loc = createCompAndAddSig(data, output + 2, sizebits); 00214 SetBits(output + 2, loc, 16, 0); 00215 output[0] = 0x80; 00216 output[1] = loc / 8 + 1; 00217 // PrintBits(output, 120); 00218 00219 write(fd, output, loc / 8 + 4); 00220 00221 while(1) 00222 { 00223 if((time(0)-temp) > 5) return; 00224 loc = read(fd, data, 1); 00225 if((loc==1) && ((data[0] == CARRIAGE)|| (data[0] == 0xa))) 00226 break; 00227 // printf("=%x\n", 0xFF &(int)data[0]); 00228 } 00229 } |
|
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)|| (data[0] == 0xa))) 00184 break; 00185 // printf("=%x\n", 0xFF &(int)data[0]); 00186 }*/ 00187 } |
|
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 &&(buf[0]!=0xa)) printf("Expected CARRIAGE got 0x%x\n", (int) buf[0]); 00064 if((time(0)-temp) > 5) return; 00065 } 00066 } |
|
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 } |
|
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 } |