Web Server and send X10 RF orders to X10 RF transceivers Switch On/Off Appliance No weather Rx at the moment...
Dependencies: EthernetNetIf mbed HTTPServer
x10rf.cpp
00001 // Interface Lib to X10 RF transmiter 00002 00003 #include "mbed.h" 00004 00005 DigitalOut led_2(LED2, "led2"); 00006 DigitalOut led_3(LED3, "led3"); 00007 00008 DigitalOut RF_TX(p19); 00009 DigitalOut RF_Alim(p18); 00010 00011 void SendX10RF_bit(unsigned int databit); 00012 void SendX10byte(unsigned int data8); 00013 void SendX10Cmd(unsigned int data); 00014 void SendX10RF(); 00015 00016 00017 //----------------------------------------------------------------------------- 00018 // http://idobartana.com/hakb/x10rf.htm 00019 // ftp://ftp.x10.com/pub/manuals/cm17a_protocol.txt 00020 unsigned int EncodeX10rf(char houseCode, int numberCode, int action) 00021 {// action : 1 : On, 0 : Off, 2 : BRIGHT , 3 : DIM 00022 unsigned int order, add; 00023 switch (houseCode) 00024 { 00025 case 'A' : order= 0x6000; break; 00026 case 'B' : order= 0xE000; break; 00027 case 'C' : order= 0x2000; break; 00028 case 'D' : order= 0xA000; break; 00029 case 'E' : order= 0x1000; break; 00030 case 'F' : order= 0x9000; break; 00031 case 'G' : order= 0x5000; break; 00032 case 'H' : order= 0xD000; break; 00033 case 'I' : order= 0x7000; break; 00034 case 'J' : order= 0xF000; break; 00035 case 'K' : order= 0x3000; break; 00036 case 'L' : order= 0xB000; break; 00037 case 'M' : order= 0x0000; break; 00038 case 'N' : order= 0x8000; break; 00039 case 'O' : order= 0x4000; break; 00040 case 'P' : order= 0xC000; break; 00041 } 00042 switch (numberCode) 00043 { 00044 case 1 : add= 0x0000; break; 00045 case 2 : add= 0x0010; break; 00046 case 3 : add= 0x0008; break; 00047 case 4 : add= 0x0018; break; 00048 case 5 : add= 0x0040; break; 00049 case 6 : add= 0x0050; break; 00050 case 7 : add= 0x0048; break; 00051 case 8 : add= 0x0058; break; 00052 case 9 : add= 0x0400; break; 00053 case 10: add= 0x0410; break; 00054 case 11: add= 0x0408; break; 00055 case 12: add= 0x0418; break; 00056 case 13: add= 0x0440; break; 00057 case 14: add= 0x0450; break; 00058 case 15: add= 0x0448; break; 00059 case 16: add= 0x0458; break; 00060 } 00061 order |= add; 00062 if (action==0) order |= 0x0020; 00063 return order; 00064 } 00065 //----------------------------------------------------------------------------- 00066 void SendX10rf(char houseCode, int numberCode, int action) 00067 { // action : 1 : On, 0 : Off, 2 : BRIGHT , 3 : DIM 00068 printf( "h=%c U=%d R=%d Order=%X\r\n", houseCode, numberCode, action, EncodeX10rf(houseCode, numberCode, action)); 00069 // SendX10Cmd(0x6010); // A2 ON 00070 // SendX10Cmd(0x6000); // A1 ON 00071 SendX10Cmd( EncodeX10rf(houseCode, numberCode, action)); 00072 } 00073 //----------------------------------------------------------------------------- 00074 void SendX10RF_bit(unsigned int databit) 00075 { 00076 // envoi un 1 00077 RF_TX=1; 00078 wait_us(560); // 0.56 ms 00079 RF_TX=0; 00080 wait_us(560); // 0.56 ms 00081 // si c'est un 0 00082 if (!databit) wait_us(1120); // 0.56*2 = 1.12 ms si un zero 00083 } 00084 //----------------------------------------------------------------------------- 00085 void SendX10byte(unsigned int data8) 00086 { 00087 unsigned int j, k; 00088 for (j=0; j<8; j++) 00089 { 00090 k=(data8 & 0x0080 )==0x0080; 00091 SendX10RF_bit(k); 00092 data8=data8 << 1; 00093 } 00094 } 00095 //----------------------------------------------------------------------------- 00096 void SendX10Cmd(unsigned int data) 00097 { 00098 unsigned int Cmd8; 00099 RF_Alim=1; // Alimente le transmetteur RE8=ON 00100 // wait_ms(20); // >20 ms 00101 wait_ms(10); // >10 ms 00102 wait_ms(10); // >10 ms 00103 // en-tête 00104 RF_TX=1; 00105 wait_us(8960); // 8.96 ms 00106 RF_TX=0; 00107 wait_us(4500); // 4.5 ms 00108 Cmd8=data>>8; // send les Hi 00109 SendX10byte(~Cmd8); 00110 SendX10byte(Cmd8); 00111 Cmd8=(data) & 0xFF; // send les Low 00112 SendX10byte(~Cmd8); 00113 SendX10byte(Cmd8); 00114 SendX10RF_bit(1); // 1 à la fin ?? 00115 wait_us(1120); // 1.12 ms 00116 RF_Alim=0; // Eteint transmetteur RE8=OFF 00117 } 00118 //----------------------------------------------------------------------------- 00119 void SendX10RF() 00120 { 00121 // SendX10Cmd(0x6000); // A1 ON 00122 // SendX10Cmd(0x6020); // A1 OFF 00123 SendX10Cmd(0x6010); // A2 ON 00124 // SendX10Cmd(0x6030); // A2 OFF 00125 // SendX10Cmd(0x6090); // A2 DIM+ 00126 // SendX10Cmd(0x60B0); // A2 DIM- 00127 00128 //http://idobartana.com/hakb/x10rf.htm 00129 //10101111 11011101 01010101 11011111 10101101 01010101 <-A1 OFF cmd (as seen on RF, RIGHT bit first !) 00130 //00000100 11111011 00000110 11111001 A1 OFF (as RIGHT bit first !) 00131 // byte 1 byte 2 byte 3 byte 4 00132 //bit function 00133 //0 always 0 00134 //1 always 0 00135 //2 always 0 00136 //3 bit B1 of unit number 00137 //4 bit B0 of unit number 00138 //5 1 for OFF command. DIM B2 ON/OFF B0 B1 <--(unit number -1= 0bB2B1B0 ) 00139 //6 bit B2 of unit number ------------------>| 00140 //7 1 for DIM (if bit 5=1) or BRIGHT (if bit 5=0) command 00141 00142 // à l'envers aussi mais bytes inversées 00143 //A- 00001 ON 00144 //00032: 11111001 00000110 11111111 00000000 0x6000 00145 //A- 00001 OFF 00146 //00032: 11111001 00000110 11111011 00000100 0x6020 00147 //A- 00002 ON 00148 //00032: 11111001 00000110 11110111 00001000 0x6080 00149 //A- 00002 OFF 00150 //00032: 11111001 00000110 11110011 00001100 0x60C0 00151 //A- 00002 DIM+ 00152 //00032: 11111001 00000110 11110111 00001000 0x6090 00153 //http://camelspit.org/modified-x10-rf-transmitter/ 00154 } 00155 //---------------------------------------------------------------------
Generated on Wed Jul 13 2022 16:37:51 by 1.7.2