Infrared remote test functions (11/26/2010)
Infrared.cpp@0:e526ff8f7602, 2010-11-26 (annotated)
- Committer:
- AndyHope
- Date:
- Fri Nov 26 18:43:44 2010 +0000
- Revision:
- 0:e526ff8f7602
- Child:
- 1:d1764facee30
Camoson Final Project Version control
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndyHope | 0:e526ff8f7602 | 1 | #include "mbed.h" |
AndyHope | 0:e526ff8f7602 | 2 | #include "Infrared.h" |
AndyHope | 0:e526ff8f7602 | 3 | #include "SDFileSystem.h" |
AndyHope | 0:e526ff8f7602 | 4 | |
AndyHope | 0:e526ff8f7602 | 5 | Infrared::Infrared(PinName pin) : irLed(pin) { // _pin(pin) means pass pin to the DigitalOut constructor |
AndyHope | 0:e526ff8f7602 | 6 | irLed = 0; // default the output to 0 |
AndyHope | 0:e526ff8f7602 | 7 | } |
AndyHope | 0:e526ff8f7602 | 8 | |
AndyHope | 0:e526ff8f7602 | 9 | |
AndyHope | 0:e526ff8f7602 | 10 | void Infrared::header(void) |
AndyHope | 0:e526ff8f7602 | 11 | { |
AndyHope | 0:e526ff8f7602 | 12 | |
AndyHope | 0:e526ff8f7602 | 13 | long float repeat; |
AndyHope | 0:e526ff8f7602 | 14 | |
AndyHope | 0:e526ff8f7602 | 15 | repeat = phead/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 16 | |
AndyHope | 0:e526ff8f7602 | 17 | repeat *= 0.78; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 18 | |
AndyHope | 0:e526ff8f7602 | 19 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 20 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 21 | //pc.printf("%x\n", repeat); |
AndyHope | 0:e526ff8f7602 | 22 | |
AndyHope | 0:e526ff8f7602 | 23 | for(int k = 0; k < repeat; k++) |
AndyHope | 0:e526ff8f7602 | 24 | { |
AndyHope | 0:e526ff8f7602 | 25 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 26 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 27 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 28 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 29 | } // for |
AndyHope | 0:e526ff8f7602 | 30 | |
AndyHope | 0:e526ff8f7602 | 31 | wait(shead); |
AndyHope | 0:e526ff8f7602 | 32 | |
AndyHope | 0:e526ff8f7602 | 33 | return; |
AndyHope | 0:e526ff8f7602 | 34 | } //header |
AndyHope | 0:e526ff8f7602 | 35 | |
AndyHope | 0:e526ff8f7602 | 36 | |
AndyHope | 0:e526ff8f7602 | 37 | /* takes a data input of up to bytes, uses dynamic variables(timings ect), |
AndyHope | 0:e526ff8f7602 | 38 | calculates pulse lengths, encodes data for pulse modulation, |
AndyHope | 0:e526ff8f7602 | 39 | and shifts it out LSB first (sharp TV protocol, can be changed) */ |
AndyHope | 0:e526ff8f7602 | 40 | |
AndyHope | 0:e526ff8f7602 | 41 | void Infrared::strobeSpace(void) |
AndyHope | 0:e526ff8f7602 | 42 | { // ir cycle time, ones, zeroes, and datastream |
AndyHope | 0:e526ff8f7602 | 43 | |
AndyHope | 0:e526ff8f7602 | 44 | unsigned int temp; |
AndyHope | 0:e526ff8f7602 | 45 | long float repeat1, repeat0; |
AndyHope | 0:e526ff8f7602 | 46 | char k; |
AndyHope | 0:e526ff8f7602 | 47 | |
AndyHope | 0:e526ff8f7602 | 48 | repeat1 = pone/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 49 | repeat0 = pzero/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 50 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 51 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 52 | |
AndyHope | 0:e526ff8f7602 | 53 | repeat1 *= 0.78; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 54 | repeat0 *= 0.78; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 55 | |
AndyHope | 0:e526ff8f7602 | 56 | for(char i = 0; i < dataBits; i++) |
AndyHope | 0:e526ff8f7602 | 57 | { |
AndyHope | 0:e526ff8f7602 | 58 | temp = data<<i; // shift out lsb first |
AndyHope | 0:e526ff8f7602 | 59 | |
AndyHope | 0:e526ff8f7602 | 60 | |
AndyHope | 0:e526ff8f7602 | 61 | if(temp & MSB) |
AndyHope | 0:e526ff8f7602 | 62 | { |
AndyHope | 0:e526ff8f7602 | 63 | for(k = 0; k < repeat1; k++) |
AndyHope | 0:e526ff8f7602 | 64 | { |
AndyHope | 0:e526ff8f7602 | 65 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 66 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 67 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 68 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 69 | }// for |
AndyHope | 0:e526ff8f7602 | 70 | |
AndyHope | 0:e526ff8f7602 | 71 | wait(sone); |
AndyHope | 0:e526ff8f7602 | 72 | }// if |
AndyHope | 0:e526ff8f7602 | 73 | |
AndyHope | 0:e526ff8f7602 | 74 | else |
AndyHope | 0:e526ff8f7602 | 75 | { |
AndyHope | 0:e526ff8f7602 | 76 | for(k = 0; k < repeat0; k++) |
AndyHope | 0:e526ff8f7602 | 77 | { |
AndyHope | 0:e526ff8f7602 | 78 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 79 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 80 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 81 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 82 | }// for |
AndyHope | 0:e526ff8f7602 | 83 | |
AndyHope | 0:e526ff8f7602 | 84 | wait(szero); |
AndyHope | 0:e526ff8f7602 | 85 | }// else |
AndyHope | 0:e526ff8f7602 | 86 | |
AndyHope | 0:e526ff8f7602 | 87 | }// for |
AndyHope | 0:e526ff8f7602 | 88 | |
AndyHope | 0:e526ff8f7602 | 89 | return; |
AndyHope | 0:e526ff8f7602 | 90 | }// strobeSpace |
AndyHope | 0:e526ff8f7602 | 91 | |
AndyHope | 0:e526ff8f7602 | 92 | |
AndyHope | 0:e526ff8f7602 | 93 | /* takes a data input of up to bytes, uses dynamic variables(timings ect), |
AndyHope | 0:e526ff8f7602 | 94 | calculates pulse lengths, encodes data for RC6 (manchester) encoding, |
AndyHope | 0:e526ff8f7602 | 95 | and shifts it out MSB first (philips protocol, can be changed) */ |
AndyHope | 0:e526ff8f7602 | 96 | |
AndyHope | 0:e526ff8f7602 | 97 | void Infrared::strobeRC6(void) |
AndyHope | 0:e526ff8f7602 | 98 | { // ir cycle time, ones, zeroes, and datastream |
AndyHope | 0:e526ff8f7602 | 99 | |
AndyHope | 0:e526ff8f7602 | 100 | unsigned long int temp; |
AndyHope | 0:e526ff8f7602 | 101 | long float repeat1, repeat0; |
AndyHope | 0:e526ff8f7602 | 102 | char k; |
AndyHope | 0:e526ff8f7602 | 103 | |
AndyHope | 0:e526ff8f7602 | 104 | repeat1 = pone/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 105 | repeat0 = pzero/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 106 | |
AndyHope | 0:e526ff8f7602 | 107 | repeat1 *= 0.78; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 108 | repeat0 *= 0.78; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 109 | |
AndyHope | 0:e526ff8f7602 | 110 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 111 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 112 | |
AndyHope | 0:e526ff8f7602 | 113 | for(char i = 0; i < dataBits; i++) |
AndyHope | 0:e526ff8f7602 | 114 | { |
AndyHope | 0:e526ff8f7602 | 115 | temp = data<<i; // shift out msb first |
AndyHope | 0:e526ff8f7602 | 116 | |
AndyHope | 0:e526ff8f7602 | 117 | if(temp & MSB) |
AndyHope | 0:e526ff8f7602 | 118 | { |
AndyHope | 0:e526ff8f7602 | 119 | //pc.printf("1"); |
AndyHope | 0:e526ff8f7602 | 120 | for(k = 0; k < repeat1; k++) |
AndyHope | 0:e526ff8f7602 | 121 | { |
AndyHope | 0:e526ff8f7602 | 122 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 123 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 124 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 125 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 126 | }// for |
AndyHope | 0:e526ff8f7602 | 127 | |
AndyHope | 0:e526ff8f7602 | 128 | wait(sone); |
AndyHope | 0:e526ff8f7602 | 129 | }// if |
AndyHope | 0:e526ff8f7602 | 130 | |
AndyHope | 0:e526ff8f7602 | 131 | else |
AndyHope | 0:e526ff8f7602 | 132 | { |
AndyHope | 0:e526ff8f7602 | 133 | //pc.printf("0"); |
AndyHope | 0:e526ff8f7602 | 134 | wait(szero); |
AndyHope | 0:e526ff8f7602 | 135 | |
AndyHope | 0:e526ff8f7602 | 136 | for(k = 0; k < repeat0; k++) |
AndyHope | 0:e526ff8f7602 | 137 | { |
AndyHope | 0:e526ff8f7602 | 138 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 139 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 140 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 141 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 142 | }// for |
AndyHope | 0:e526ff8f7602 | 143 | |
AndyHope | 0:e526ff8f7602 | 144 | }// else |
AndyHope | 0:e526ff8f7602 | 145 | |
AndyHope | 0:e526ff8f7602 | 146 | }// for |
AndyHope | 0:e526ff8f7602 | 147 | |
AndyHope | 0:e526ff8f7602 | 148 | return; |
AndyHope | 0:e526ff8f7602 | 149 | }// strobeRC6 |
AndyHope | 0:e526ff8f7602 | 150 | |
AndyHope | 0:e526ff8f7602 | 151 | |
AndyHope | 0:e526ff8f7602 | 152 | /* calculates and transmits either a leading |
AndyHope | 0:e526ff8f7602 | 153 | or trailing pulse, based on passed variables */ |
AndyHope | 0:e526ff8f7602 | 154 | |
AndyHope | 0:e526ff8f7602 | 155 | void Infrared::pulse(double pulseL) |
AndyHope | 0:e526ff8f7602 | 156 | { |
AndyHope | 0:e526ff8f7602 | 157 | long float repeat; |
AndyHope | 0:e526ff8f7602 | 158 | |
AndyHope | 0:e526ff8f7602 | 159 | repeat = pulseL/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 160 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 161 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 162 | |
AndyHope | 0:e526ff8f7602 | 163 | repeat *= 0.78; // correction factor for loop overheads |
AndyHope | 0:e526ff8f7602 | 164 | |
AndyHope | 0:e526ff8f7602 | 165 | for(int k = 0; k < repeat; k++) |
AndyHope | 0:e526ff8f7602 | 166 | { |
AndyHope | 0:e526ff8f7602 | 167 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 168 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 169 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 170 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 171 | }// for |
AndyHope | 0:e526ff8f7602 | 172 | |
AndyHope | 0:e526ff8f7602 | 173 | return; |
AndyHope | 0:e526ff8f7602 | 174 | }// pulse |
AndyHope | 0:e526ff8f7602 | 175 | |
AndyHope | 0:e526ff8f7602 | 176 | |
AndyHope | 0:e526ff8f7602 | 177 | /* takes a command input and strobes the infrared LEDs */ |
AndyHope | 0:e526ff8f7602 | 178 | |
AndyHope | 0:e526ff8f7602 | 179 | void Infrared::sendCodeDish(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 180 | { |
AndyHope | 0:e526ff8f7602 | 181 | |
AndyHope | 0:e526ff8f7602 | 182 | data = command; |
AndyHope | 0:e526ff8f7602 | 183 | |
AndyHope | 0:e526ff8f7602 | 184 | header(); |
AndyHope | 0:e526ff8f7602 | 185 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 186 | |
AndyHope | 0:e526ff8f7602 | 187 | header(); |
AndyHope | 0:e526ff8f7602 | 188 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 189 | |
AndyHope | 0:e526ff8f7602 | 190 | header(); |
AndyHope | 0:e526ff8f7602 | 191 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 192 | |
AndyHope | 0:e526ff8f7602 | 193 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 194 | |
AndyHope | 0:e526ff8f7602 | 195 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 196 | |
AndyHope | 0:e526ff8f7602 | 197 | return; |
AndyHope | 0:e526ff8f7602 | 198 | }//sendCodeDVR |
AndyHope | 0:e526ff8f7602 | 199 | |
AndyHope | 0:e526ff8f7602 | 200 | |
AndyHope | 0:e526ff8f7602 | 201 | void Infrared::sendCodeGETV(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 202 | { |
AndyHope | 0:e526ff8f7602 | 203 | |
AndyHope | 0:e526ff8f7602 | 204 | data = command; |
AndyHope | 0:e526ff8f7602 | 205 | |
AndyHope | 0:e526ff8f7602 | 206 | header(); |
AndyHope | 0:e526ff8f7602 | 207 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 208 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 209 | |
AndyHope | 0:e526ff8f7602 | 210 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 211 | |
AndyHope | 0:e526ff8f7602 | 212 | header(); |
AndyHope | 0:e526ff8f7602 | 213 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 214 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 215 | |
AndyHope | 0:e526ff8f7602 | 216 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 217 | |
AndyHope | 0:e526ff8f7602 | 218 | return; |
AndyHope | 0:e526ff8f7602 | 219 | }//sendCodeGETV |
AndyHope | 0:e526ff8f7602 | 220 | |
AndyHope | 0:e526ff8f7602 | 221 | void Infrared::sendCodeSharpTV(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 222 | { |
AndyHope | 0:e526ff8f7602 | 223 | |
AndyHope | 0:e526ff8f7602 | 224 | invertCode(inversionMask, command); |
AndyHope | 0:e526ff8f7602 | 225 | |
AndyHope | 0:e526ff8f7602 | 226 | data = code; |
AndyHope | 0:e526ff8f7602 | 227 | |
AndyHope | 0:e526ff8f7602 | 228 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 229 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 230 | |
AndyHope | 0:e526ff8f7602 | 231 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 232 | |
AndyHope | 0:e526ff8f7602 | 233 | data = invCode; |
AndyHope | 0:e526ff8f7602 | 234 | |
AndyHope | 0:e526ff8f7602 | 235 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 236 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 237 | |
AndyHope | 0:e526ff8f7602 | 238 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 239 | |
AndyHope | 0:e526ff8f7602 | 240 | data = code; |
AndyHope | 0:e526ff8f7602 | 241 | |
AndyHope | 0:e526ff8f7602 | 242 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 243 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 244 | |
AndyHope | 0:e526ff8f7602 | 245 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 246 | |
AndyHope | 0:e526ff8f7602 | 247 | data = invCode; |
AndyHope | 0:e526ff8f7602 | 248 | |
AndyHope | 0:e526ff8f7602 | 249 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 250 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 251 | |
AndyHope | 0:e526ff8f7602 | 252 | wait(gap); |
AndyHope | 0:e526ff8f7602 | 253 | |
AndyHope | 0:e526ff8f7602 | 254 | return; |
AndyHope | 0:e526ff8f7602 | 255 | }//sendCodeSharpTV |
AndyHope | 0:e526ff8f7602 | 256 | |
AndyHope | 0:e526ff8f7602 | 257 | |
AndyHope | 0:e526ff8f7602 | 258 | /* Takes the values for the remote timing in the LIRC remote files |
AndyHope | 0:e526ff8f7602 | 259 | (which are in us, Ex. phead = 450) and converts them down to the |
AndyHope | 0:e526ff8f7602 | 260 | proper floating point value */ |
AndyHope | 0:e526ff8f7602 | 261 | |
AndyHope | 0:e526ff8f7602 | 262 | void Infrared::convertTiming() |
AndyHope | 0:e526ff8f7602 | 263 | { |
AndyHope | 0:e526ff8f7602 | 264 | |
AndyHope | 0:e526ff8f7602 | 265 | phead /= 1000000; // convert to u seconds |
AndyHope | 0:e526ff8f7602 | 266 | shead /= 1000000; |
AndyHope | 0:e526ff8f7602 | 267 | pone /= 1000000; |
AndyHope | 0:e526ff8f7602 | 268 | sone /= 1000000; |
AndyHope | 0:e526ff8f7602 | 269 | pzero /= 1000000; |
AndyHope | 0:e526ff8f7602 | 270 | szero /= 1000000; |
AndyHope | 0:e526ff8f7602 | 271 | ptoggle /= 1000000; |
AndyHope | 0:e526ff8f7602 | 272 | stoggle /= 1000000; |
AndyHope | 0:e526ff8f7602 | 273 | ptrail /= 1000000; |
AndyHope | 0:e526ff8f7602 | 274 | plead /= 1000000; |
AndyHope | 0:e526ff8f7602 | 275 | gap /= 1000000; |
AndyHope | 0:e526ff8f7602 | 276 | |
AndyHope | 0:e526ff8f7602 | 277 | /*cycleOn = 100/dutycycle; |
AndyHope | 0:e526ff8f7602 | 278 | irPeriod = 1/frequency; |
AndyHope | 0:e526ff8f7602 | 279 | cycleOn = irPeriod/cycleOn; |
AndyHope | 0:e526ff8f7602 | 280 | cycleOff = cycleOn;*/ |
AndyHope | 0:e526ff8f7602 | 281 | |
AndyHope | 0:e526ff8f7602 | 282 | cycleOn = dutycycle/100; // dutycycle is read in as a percentage value from 0 to 100 |
AndyHope | 0:e526ff8f7602 | 283 | cycleOff = 1-cycleOn; |
AndyHope | 0:e526ff8f7602 | 284 | irPeriod = 1/frequency; |
AndyHope | 0:e526ff8f7602 | 285 | cycleOn = irPeriod*cycleOn; |
AndyHope | 0:e526ff8f7602 | 286 | cycleOff = irPeriod*cycleOff; |
AndyHope | 0:e526ff8f7602 | 287 | |
AndyHope | 0:e526ff8f7602 | 288 | return; |
AndyHope | 0:e526ff8f7602 | 289 | }// convertTiming |
AndyHope | 0:e526ff8f7602 | 290 | |
AndyHope | 0:e526ff8f7602 | 291 | |
AndyHope | 0:e526ff8f7602 | 292 | |
AndyHope | 0:e526ff8f7602 | 293 | /* deciphers which mask is needed for sending |
AndyHope | 0:e526ff8f7602 | 294 | data out msb first with dynamic data lengths */ |
AndyHope | 0:e526ff8f7602 | 295 | |
AndyHope | 0:e526ff8f7602 | 296 | void Infrared::maskBit(void) |
AndyHope | 0:e526ff8f7602 | 297 | { |
AndyHope | 0:e526ff8f7602 | 298 | MSB = (0x01<<(dataBits-1)); |
AndyHope | 0:e526ff8f7602 | 299 | /* uses the dataBits and uses it to shift a one |
AndyHope | 0:e526ff8f7602 | 300 | to the position of the MSB of the datastream */ |
AndyHope | 0:e526ff8f7602 | 301 | |
AndyHope | 0:e526ff8f7602 | 302 | return; |
AndyHope | 0:e526ff8f7602 | 303 | }// maskBit |
AndyHope | 0:e526ff8f7602 | 304 | |
AndyHope | 0:e526ff8f7602 | 305 | |
AndyHope | 0:e526ff8f7602 | 306 | void Infrared::invertCode(int mask, int invertData) |
AndyHope | 0:e526ff8f7602 | 307 | { |
AndyHope | 0:e526ff8f7602 | 308 | |
AndyHope | 0:e526ff8f7602 | 309 | code = invertData; |
AndyHope | 0:e526ff8f7602 | 310 | invCode = invertData; |
AndyHope | 0:e526ff8f7602 | 311 | |
AndyHope | 0:e526ff8f7602 | 312 | for(char i = 0; i < mask; i++) |
AndyHope | 0:e526ff8f7602 | 313 | { |
AndyHope | 0:e526ff8f7602 | 314 | |
AndyHope | 0:e526ff8f7602 | 315 | invCode ^= (0x01<<i); |
AndyHope | 0:e526ff8f7602 | 316 | |
AndyHope | 0:e526ff8f7602 | 317 | }// for |
AndyHope | 0:e526ff8f7602 | 318 | |
AndyHope | 0:e526ff8f7602 | 319 | return; |
AndyHope | 0:e526ff8f7602 | 320 | }// invertCode |
AndyHope | 0:e526ff8f7602 | 321 |