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 }
|
1.2.12 written by Dimitri van Heesch,
© 1997-2001