Last active
September 20, 2021 19:53
-
-
Save probonopd/5793692 to your computer and use it in GitHub Desktop.
Send Pronto Hex via an IR LED connected to Arduino Pin D9. Make sure you do not send a blank (" ") as the last character. Applied fix for Leonardo from https://github.com/probonopd/arduino-infrared-pronto/pull/1 to sendandreceive.ino -- TODO: Fix sendRaw to specify length as "sizeof(signal)/sizeof(int)" as in http://forum.arduino.cc/index.php?PH…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <IRremote.h> | |
// http://www.pjrc.com/teensy/td_libs_IRremote.html | |
// If one keypress results in multiple codes being output, then | |
// change in IRremoteInt.h: | |
// #define _GAP 50000 | |
int RECV_PIN = 8; | |
IRrecv irrecv(RECV_PIN); | |
decode_results results; | |
// Compare two tick values, returning 0 if newval is shorter, | |
// 1 if newval is equal, and 2 if newval is longer | |
// Use a tolerance of 20% | |
int compare(unsigned int oldval, unsigned int newval) { | |
if (newval < oldval * .8) { | |
return 0; | |
} | |
else if (oldval < newval * .8) { | |
return 2; | |
} | |
else { | |
return 1; | |
} | |
} | |
// Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param | |
#define FNV_PRIME_32 16777619 | |
#define FNV_BASIS_32 2166136261 | |
/* Converts the raw code values into a 32-bit hash code. | |
* Hopefully this code is unique for each button. | |
*/ | |
unsigned long decodeHash(decode_results *results) { | |
unsigned long hash = FNV_BASIS_32; | |
for (int i = 1; i+2 < results->rawlen; i++) { | |
int value = compare(results->rawbuf[i], results->rawbuf[i+2]); | |
// Add value into the hash | |
hash = (hash * FNV_PRIME_32) ^ value; | |
} | |
return hash; | |
} | |
void setup() | |
{ | |
Serial.begin(57600); | |
Serial.println("READY"); | |
irrecv.enableIRIn(); // Start the receiver | |
} | |
int c = 1; | |
void dump(decode_results *results) { | |
int count = results->rawlen; | |
Serial.println(c); | |
c++; | |
Serial.println("Hash: "); | |
unsigned long hash = decodeHash(results); | |
Serial.println(hash, HEX); | |
Serial.println("For IR Scope/IrScrutinizer: "); | |
for (int i = 1; i < count; i++) { | |
if ((i % 2) == 1) { | |
Serial.print("+"); | |
Serial.print(results->rawbuf[i]*USECPERTICK, DEC); | |
} | |
else { | |
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); | |
} | |
Serial.print(" "); | |
} | |
Serial.println("-127976"); | |
Serial.println("For Arduino sketch: "); | |
Serial.print("unsigned int raw["); | |
Serial.print(count, DEC); | |
Serial.print("] = {"); | |
for (int i = 1; i < count; i++) { | |
if ((i % 2) == 1) { | |
Serial.print(results->rawbuf[i]*USECPERTICK, DEC); | |
} | |
else { | |
Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC); | |
} | |
Serial.print(","); | |
} | |
Serial.print("};"); | |
Serial.println(""); | |
Serial.print("irsend.sendRaw(raw,"); | |
Serial.print(count, DEC); | |
Serial.print(",38);"); | |
Serial.println(""); | |
Serial.println(""); | |
} | |
#include <avr/interrupt.h> | |
#include <stdio.h> | |
#include <avr/pgmspace.h> | |
#include <stdint.h> | |
#include <avr/io.h> | |
#define IR_PORT PORTB | |
// #define IR_PIN PINB | |
// #define IR_DDR DDRB | |
// #define IR_BV _BV(1) | |
#define IR_OCR OCR1A | |
#define IR_TCCRnA TCCR1A | |
#define IR_TCCRnB TCCR1B | |
#define IR_TCNTn TCNT1 | |
#define IR_TIFRn TIFR1 | |
#define IR_TIMSKn TIMSK1 | |
#define IR_TOIEn TOIE1 | |
#define IR_ICRn ICR1 | |
#define IR_OCRn OCR1A | |
#define IR_COMn0 COM1A0 | |
#define IR_COMn1 COM1A1 | |
#define PRONTO_IR_SOURCE 0 // Pronto code byte 0 | |
#define PRONTO_FREQ_CODE 1 // Pronto code byte 1 | |
#define PRONTO_SEQUENCE1_LENGTH 2 // Pronto code byte 2 | |
#define PRONTO_SEQUENCE2_LENGTH 3 // Pronto code byte 3 | |
#define PRONTO_CODE_START 4 // Pronto code byte 4 | |
static const uint16_t *ir_code = NULL; | |
static uint16_t ir_cycle_count = 0; | |
static uint32_t ir_total_cycle_count = 0; | |
static uint8_t ir_seq_index = 0; | |
static uint8_t ir_led_state = 0; | |
void ir_on() | |
{ | |
IR_TCCRnA |= (1<<IR_COMn1) + (1<<IR_COMn0); | |
ir_led_state = 1; | |
} | |
void ir_off() | |
{ | |
IR_TCCRnA &= ((~(1<<IR_COMn1)) & (~(1<<IR_COMn0)) ); | |
ir_led_state = 0; | |
} | |
void ir_toggle() | |
{ | |
if (ir_led_state) | |
ir_off(); | |
else | |
ir_on(); | |
} | |
void ir_start(uint16_t *code) | |
{ | |
ir_code = code; | |
// IR_PORT &= ~IR_BV; // Turn output off (atmega328 only) | |
digitalWrite(9,LOW); // Turn output off | |
// IR_DDR |= IR_BV; // Set it as output (atmega328 only) | |
pinMode(9,OUTPUT); // Set it as output | |
IR_TCCRnA = 0x00; // Reset the pwm | |
IR_TCCRnB = 0x00; | |
//printf_P(PSTR("FREQ CODE: %hd\r\n"), code[PRONTO_FREQ_CODE]); | |
uint16_t top = ( (F_CPU/1000000.0) * code[PRONTO_FREQ_CODE] * 0.241246 ) - 1; | |
//printf_P(PSTR("top: %hu\n\r"), top); | |
IR_ICRn = top; | |
IR_OCRn = top >> 1; | |
IR_TCCRnA = (1<<WGM11); | |
IR_TCCRnB = (1<<WGM13) | (1<<WGM12); | |
IR_TCNTn = 0x0000; | |
IR_TIFRn = 0x00; | |
IR_TIMSKn = 1 << IR_TOIEn; | |
ir_seq_index = PRONTO_CODE_START; | |
ir_cycle_count = 0; | |
ir_on(); | |
IR_TCCRnB |= (1<<CS10); | |
} | |
#define TOTAL_CYCLES 80000 // Turns off after this number of | |
// cycles. About 2 seconds | |
// FIXME: Turn off after having sent | |
ISR(TIMER1_OVF_vect) { | |
uint16_t sequenceIndexEnd; | |
uint16_t repeatSequenceIndexStart; | |
ir_total_cycle_count++; | |
ir_cycle_count++; | |
if (ir_cycle_count== ir_code[ir_seq_index]) { | |
ir_toggle(); | |
ir_cycle_count = 0; | |
ir_seq_index++; | |
sequenceIndexEnd = PRONTO_CODE_START + | |
(ir_code[PRONTO_SEQUENCE1_LENGTH]<<1) + | |
(ir_code[PRONTO_SEQUENCE2_LENGTH]<<1); | |
repeatSequenceIndexStart = PRONTO_CODE_START + | |
(ir_code[PRONTO_SEQUENCE1_LENGTH]<<1); | |
if (ir_seq_index >= sequenceIndexEnd ) { | |
ir_seq_index = repeatSequenceIndexStart; | |
if(ir_total_cycle_count>TOTAL_CYCLES) { | |
ir_off(); | |
TCCR1B &= ~(1<<CS10); | |
} | |
} | |
} | |
} | |
void ir_stop() | |
{ | |
IR_TCCRnA = 0x00; // Reset the pwm | |
IR_TCCRnB = 0x00; | |
} | |
const uint16_t inputLength = 512; | |
void loop() { | |
if (irrecv.decode(&results)) { | |
dump(&results); | |
irrecv.resume(); // Receive the next value | |
} | |
if ( Serial.available() > 0 ) | |
{ | |
static char input[inputLength]; | |
static uint16_t i; | |
char c = Serial.read(); | |
if ( c != '\r' && c != '\n' && i < inputLength-1) | |
input[i++] = c; | |
else | |
{ | |
input[i] = '\0'; | |
i = 0; | |
uint16_t array[80]; | |
uint16_t j = 0; | |
if ( !strncmp(input, "SEND", 4) ) | |
{ | |
char* p = input+4; | |
while ( (p = strchr(p, ' ')) != NULL ) | |
array[j++] = strtol(p, &p, 16); | |
ir_start(array); | |
Serial.print("SENT "); | |
for ( uint8_t i = 0; i < j; i++ ) | |
{ | |
Serial.print ("0x"); | |
Serial.print (array[i], HEX); | |
Serial.print(" "); | |
} | |
Serial.println(); | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:100000000C9463000C948B000C948B000C948B006C | |
:100010000C948B000C948B000C948B000C94660E4B | |
:100020000C948B000C948B000C948B000C948B0024 | |
:100030000C948B000C94DA030C948B000C948B00C2 | |
:100040000C94230F0C948B000C9439100C94871093 | |
:100050000C948B000C948B000C948B000C948B00F4 | |
:100060000C948B000C948B000000000024002700EF | |
:100070002A0000000000250028002B0000000000DE | |
:1000800023002600290004040404040404040202DA | |
:100090000202020203030303030301020408102007 | |
:1000A0004080010204081020010204081020000012 | |
:1000B0000007000201000003040600000000000029 | |
:1000C00000007804F31111241FBECFEFD8E0DEBF8B | |
:1000D000CDBF11E0A0E0B1E0E2E9FCE202C0059092 | |
:1000E0000D92A039B107D9F715E0A0E9B1E001C040 | |
:1000F0001D92AE32B107E1F710E0C6ECD0E004C0CB | |
:100100002297FE010E943816C23CD107C9F70E940F | |
:1001100049120C9447160C940000EF92FF920F9333 | |
:10012000DF93CF93CDB7DEB760970FB6F894DEBFFD | |
:100130000FBECDBFA82F002309F461C07E01089433 | |
:10014000E11CF11C88E0F70111928A95E9F72983F7 | |
:100150003A834B835C836D837E83AF83988780E291 | |
:10016000801BE82FFF27E7FDF0954D815E816F81B1 | |
:100170007885181684F01D861E861F86188A8827A3 | |
:1001800099278E1B9F0B04C07695679557954795C9 | |
:100190008A95D2F728C0202F332727FD3095DB0121 | |
:1001A000CA01022E04C0B695A795979587950A9423 | |
:1001B000D2F78D879E87AF87B88B04C0440F551F39 | |
:1001C000661F771FEA95D2F789819A81AB81BC813E | |
:1001D00004C0B695A795979587952A95D2F7482B91 | |
:1001E000592B6A2B7B2B49875A876B877C872985FC | |
:1001F0003A854B855C856D857E85AF8598898A2F8C | |
:1002000060960FB6F894DEBF0FBECDBFCF91DF91E1 | |
:100210000F91FF90EF900895EF92FF920F93DF936D | |
:10022000CF93CDB7DEB760970FB6F894DEBF0FBEA1 | |
:10023000CDBFA82F002309F461C07E010894E11C02 | |
:10024000F11C88E0F70111928A95E9F729833A8336 | |
:100250004B835C836D837E83AF83988780E2801BB2 | |
:10026000E82FFF27E7FDF09549815A816B817C815A | |
:10027000181684F019861A861B861C8688279927EB | |
:100280008E1B9F0B04C0440F551F661F771F8A9556 | |
:10029000D2F728C0202F332727FD3095DB01CA0174 | |
:1002A000022E04C0880F991FAA1FBB1F0A94D2F701 | |
:1002B00089879A87AB87BC8704C0769567955795E1 | |
:1002C0004795EA95D2F78D819E81AF81B88504C0AC | |
:1002D000880F991FAA1FBB1F2A95D2F7482B592BAD | |
:1002E0006A2B7B2B4D875E876F87788B29853A85B4 | |
:1002F0004B855C856D857E85AF8598898A2F609654 | |
:100300000FB6F894DEBF0FBECDBFCF91DF910F9136 | |
:10031000FF90EF9008952F923F925F926F927F929D | |
:100320008F929F92AF92BF92CF92DF92EF92FF9205 | |
:100330000F931F93CF93DF938C011B01EA0161158B | |
:10034000710519F0FB0191838083209749F0CE015C | |
:100350000297839728F020E030E040E050E0F6C0BC | |
:10036000F801A1908F018A2D90E00E943C16892B04 | |
:10037000B9F7FDE2AF1631F4F801A1908F015524D1 | |
:10038000539407C0FBE2AF1619F4F801A1908F0156 | |
:100390005524209719F0C031D105C1F4F0E3AF1610 | |
:1003A00079F4F8018081883711F0883549F4F80133 | |
:1003B000A1800E5F1F4FF2E05F2AC0E1D0E006C0CF | |
:1003C000209721F480E3A816E9F427C0C830D105AE | |
:1003D00031F1C930D10524F4C230D10531F50CC05A | |
:1003E000CA30D10589F0C031D105F9F4C12CD12C26 | |
:1003F000E12CB8E0FB2E28C0C12CD12CE12CA0E4CC | |
:10040000FA2E22C0CAE0D0E0FCECCF2EFCECDF2EAE | |
:10041000FCECEF2EFCE0FF2E17C0C8E0D0E0C12CB2 | |
:10042000D12CE12CE0E1FE2E0FC09E01442737FDC8 | |
:100430004095542F60E070E080E090E80E94141630 | |
:10044000C901DA016C017D0120E030E040E050E0BC | |
:1004500060E03E01882477FC8094982C70EDB72EE4 | |
:10046000BA0CE9E0EB1570F48A2D81548A3118F446 | |
:1004700099ECB92E06C08A2D81568A3150F589EA49 | |
:10048000B82EBA0C8B2D90E08C179D0714F56F3F9A | |
:10049000E1F0C216D306E406F506B0F0CA01B901D0 | |
:1004A000A40193010E94F5159B01AC012B0D311D98 | |
:1004B000411D511D2130F0E03F07F0E04F07F0E80B | |
:1004C0005F0710F461E001C06FEFF801A1908F01A8 | |
:1004D000C5CF2114310481F0662331F00150104062 | |
:1004E000F1011183008308C051FE1AC00250104070 | |
:1004F000F1011183008314C067FF12C050FC05C0D6 | |
:100500002FEF3FEF4FEF5FE704C020E030E040E027 | |
:1005100050E882E290E090932D0580932C0516C060 | |
:1005200050FE08C050954095309521953F4F4F4F54 | |
:100530005F4F0CC057FF0AC082E290E090932D05F8 | |
:1005400080932C052FEF3FEF4FEF5FE7B901CA0112 | |
:10055000DF91CF911F910F91FF90EF90DF90CF909F | |
:10056000BF90AF909F908F907F906F905F903F90E3 | |
:100570002F900895FC018191861721F08823D9F7E7 | |
:10058000992708953197CF010895FB01DC0141506F | |
:10059000504030F08D910190801919F40020B9F786 | |
:1005A000881B990B08952F923F924F925F926F9202 | |
:1005B0007F928F929F92AF92BF92CF92DF92EF92F3 | |
:1005C000FF920F931F93DF93CF9300D000D0CDB74E | |
:1005D000DEB79C838B83FC010484F585E02DFA83D0 | |
:1005E000E98375ECA72E7DE9B72E7CE1C72E71E873 | |
:1005F000D72E63E0462E512C52E0252E312C60C0C0 | |
:10060000EB81FC8122853385D901A20DB31DED90CC | |
:10061000FC90C201880F991F280F391FF9016081D2 | |
:10062000718180E090E00E94E0143B014C0100E009 | |
:1006300010E0C801B7010E94E0147B018C012DEC91 | |
:100640003CEC4CE45FE30E9492159B01AC01C401B9 | |
:10065000B3010E94431488231CF400E010E018C08A | |
:10066000C401B3012DEC3CEC4CE45FE30E94921515 | |
:100670009B01AC01C801B7010E944314082F112748 | |
:1006800007FD10950027110F001F11270F5F1F4F47 | |
:10069000C601B50123E931E040E051E00E94F515C3 | |
:1006A0005801CC24B7FCC094DC2CA626B726C8265B | |
:1006B000D9260894411C511C82E090E0280E391E76 | |
:1006C000E981FA814E165F060CF49ACFB501C60196 | |
:1006D0000F900F900F900F90CF91DF911F910F917E | |
:1006E000FF90EF90DF90CF90BF90AF909F908F9052 | |
:1006F0007F906F905F904F903F902F900895EF9272 | |
:10070000FF920F931F93FC019093A8038093A7037C | |
:100710002998219A00E810E0D8011C92A1E8EA2E5D | |
:10072000F12CD7011C926281738180E090E00E94DD | |
:10073000E01420E030E040E851E40E94921521E30B | |
:1007400039E047E75EE30E94921520E030E040E8A0 | |
:100750005FE30E94DE130E94B4149B017093870034 | |
:100760006093860036952795309389002093880002 | |
:1007700082E0F801808388E1D7018C931092850094 | |
:100780001092840016BA91E090936F0084E08093F9 | |
:10079000A9031092A6031092A5038081806C808328 | |
:1007A0009093AA038C9181608C931F910F91FF907D | |
:1007B000EF9008951F920F920FB60F921124EF92AF | |
:1007C000FF920F931F932F933F934F935F938F93BA | |
:1007D0009F93AF93BF93EF93FF93E090A103F090AB | |
:1007E000A2030091A3031091A4030894E11CF11C3F | |
:1007F000011D111DE092A103F092A2030093A30337 | |
:100800001093A4038091A5039091A6030196909361 | |
:10081000A6038093A503A091A703B091A8034091DC | |
:10082000A903E42FF0E0EE0FFF1FEA0FFB1F20816A | |
:1008300031818217930709F048C08091AA03882369 | |
:1008400041F0809180008F73809380001092AA0302 | |
:1008500008C080918000806C8093800081E080934C | |
:10086000AA031092A6031092A503242F2F5F2093B2 | |
:10087000A90314964D915C911597440F551F30E0D4 | |
:1008800016968D919C911797880F991F840F951F2D | |
:10089000049628173907C8F04C5F5F4F4093A903AF | |
:1008A00081E8E81688E3F80681E0080780E0180789 | |
:1008B00060F0809180008F73809380001092AA0373 | |
:1008C000809181008E7F80938100FF91EF91BF9195 | |
:1008D000AF919F918F915F914F913F912F911F9178 | |
:1008E0000F91FF90EF900F900FBE0F901F901895F3 | |
:1008F00060917B0170917C0180E991E00E94D106BA | |
:1009000008958F929F92AF92BF92CF92DF92EF9213 | |
:10091000FF920F931F93CF93DF937C01DC011C9612 | |
:10092000CD90DC901D9760917D0170917E018AE0F1 | |
:1009300095E04AE050E00E94A91380917D019091DA | |
:100940007E01019690937E0180937D018AE095E07F | |
:1009500060E071E00E94CB13C7010E94D302AB019B | |
:10096000BC018AE095E020E130E00E9431138AE08A | |
:1009700095E067E071E00E94CB1301E010E0C2E077 | |
:10098000D0E05EEC852E5FEF952E42E3A42EB12CD5 | |
:100990003EC000FF1DC08AE095E066E171E00E9464 | |
:1009A000C813D7011A96ED91FC911B97EC0FFD1F10 | |
:1009B000808191818A9DB0018B9D700D9A9D700DF3 | |
:1009C00011248AE095E04AE050E00E94451316C0E9 | |
:1009D000D7011A96ED91FC911B97EC0FFD1F8081BA | |
:1009E0009181889DB001899D700D989D700D112495 | |
:1009F0008AE095E04AE050E00E9496138AE095E094 | |
:100A000068E171E00E94C8130F5F1F4F22960C151A | |
:100A10001D050CF4BECF8AE095E06AE171E00E940A | |
:100A2000CB138AE095E06BE171E00E94CB138AE082 | |
:100A300095E060E371E00E94C8138AE095E0B6019A | |
:100A40004AE050E00E9496138AE095E062E471E08B | |
:100A50000E94C81301E010E0C2E0D0E032E3A32E10 | |
:100A6000B12C33C0D7011A96ED91FC911B9700FF72 | |
:100A700012C0EC0FFD1F808191818A9DB0018B9D7A | |
:100A8000700D9A9D700D11248AE095E04AE050E0C7 | |
:100A90000E94451311C0EC0FFD1F808191818A9D3A | |
:100AA000B0018B9D700D9A9D700D11248AE095E028 | |
:100AB0004AE050E00E9496138AE095E068E471E015 | |
:100AC0000E94C8130F5F1F4F22960C151D0554F28C | |
:100AD0008AE095E06AE471E00E94C8138AE095E03C | |
:100AE0006AE171E00E94CB138AE095E06DE471E069 | |
:100AF0000E94C8138AE095E0B6014AE050E00E94E7 | |
:100B000096138AE095E061E671E00E94C8138AE0DE | |
:100B100095E06AE171E00E94CB138AE095E06AE11A | |
:100B200071E00E94CB13DF91CF911F910F91FF9045 | |
:100B3000EF90DF90CF90BF90AF909F908F900895EF | |
:100B4000AF92BF92CF92DF92EF92FF920F931F93DB | |
:100B5000DF93CF93CDB7DEB7C25AD0400FB6F8942B | |
:100B6000DEBF0FBECDBF80E991E061E971E00E9478 | |
:100B7000F10D892B41F081E991E00E94810480E927 | |
:100B800091E00E94D6068AE095E00E94491118166D | |
:100B900019060CF08AC08AE095E00E947A118D3027 | |
:100BA000A9F08A3099F020919F013091A00191E045 | |
:100BB0002F3F390758F4F901EF55FE4F80832F5F1F | |
:100BC0003F4F3093A00120939F016FC0E0919F01A0 | |
:100BD000F091A001EF55FE4F10821092A0011092EB | |
:100BE0009F0181EA91E067E671E044E050E00E94F5 | |
:100BF000C502009709F059C085EA91E09A8389837C | |
:100C00008E010D5F1F4FCC24DD247E010894E11C72 | |
:100C1000F11C0DC0C901B70140E150E00E948B01F9 | |
:100C2000F801619371938F010894C11CD11C8981D3 | |
:100C30009A8160E270E00E94BA029C019A838983E3 | |
:100C4000009741F7CE0103960E947F038AE095E06A | |
:100C50006CE671E00E94C813FF245E010894A11C99 | |
:100C6000B11C1AC08AE095E062E771E00E94C813E7 | |
:100C7000000F111F0A0D1B1DF801628173818AE0AC | |
:100C800095E040E150E00E9445138AE095E068E17C | |
:100C900071E00E94C813F3940F2D10E00C151D0590 | |
:100CA00008F38AE095E00E948212CE55DF4F0FB61E | |
:100CB000F894DEBF0FBECDBFCF91DF911F910F9192 | |
:100CC000FF90EF90DF90CF90BF90AF9008950F937B | |
:100CD0001F930AE015E0C80140E051EE60E070E0CB | |
:100CE0000E94C210C80165E771E00E94CB1380E941 | |
:100CF00091E00E94080F1F910F910895DF92EF92EB | |
:100D0000FF920F931F93CF93DF93EC01882777FD1A | |
:100D10008095982F0E94E2147B018C0120E030E046 | |
:100D200040E45FE30E94921520E030E048E452E4A2 | |
:100D30000E9447140E94AF14C617D70714F4DD248D | |
:100D40001CC0DD24C801B70120E030E040EA5FE3C9 | |
:100D50000E94921520E030E048E452E40E944714DB | |
:100D600020E030E040E85FE30E94DF130E94AF1410 | |
:100D70006C177D0714F0DD24D3948D2D90E0DF9166 | |
:100D8000CF911F910F91FF90EF90DF9008956C59D4 | |
:100D90007F4F0E947E060895645670400E947E0632 | |
:100DA00008956093AB031092AD03089582E08093A1 | |
:100DB000AC03109278040895AF92BF92CF92DF9265 | |
:100DC000EF92FF920F931F93CF93DF936B01DB01A1 | |
:100DD0001A96CD91DC911B978A819B8168E273E220 | |
:100DE0000E94C706892B09F480C080917804843062 | |
:100DF00009F08CC08C819D816AEC78E00E94CC0661 | |
:100E0000892B09F483C08E819F8160E372E00E9488 | |
:100E1000C706892B09F47AC0F601118610868FEF78 | |
:100E20009FEFAFEFBFEF84839583A683B78381E005 | |
:100E300090E09183808354C08C819D8164E971E14D | |
:100E40000E94CC06892B09F450C02696EE24FF247C | |
:100E5000870123E0A22EB12C8881998160E372E0A2 | |
:100E60000E94C706892B09F440C08A819B8160E4F7 | |
:100E700076E00E94CC06892B69F0EE0CFF1C001F67 | |
:100E8000111F81E090E0A0E0B0E0E82AF92A0A2BE7 | |
:100E90001B2B0CC08A819B8160E372E00E94CC0610 | |
:100EA000892B19F1EE0CFF1C001F111F249691E4F1 | |
:100EB000A916B10429F0A2E0B0E0AA0EBB1ECCCF67 | |
:100EC00080E290E0F60191878087D6011496ED923A | |
:100ED000FD920D931C93179781E090E08D939C9366 | |
:100EE00021E030E040E050E004C020E030E040E0AD | |
:100EF00050E0B901CA01DF91CF911F910F91FF908E | |
:100F0000EF90DF90CF90BF90AF90089580917804DC | |
:100F1000843458F391CFAF92BF92CF92DF92EF9289 | |
:100F2000FF920F931F93CF93DF936B01809178040F | |
:100F30008A3108F480C0DB011A96CD91DC911B97B1 | |
:100F400088819981845F914080F4FB01118610862D | |
:100F50008FEF9FEFAFEFBFEF84839583A683B783B7 | |
:100F600089E090E09183808361C08A819B8160E603 | |
:100F700079E00E94C706892B09F45DC02696EE240D | |
:100F8000FF24870162E0A62EB12C30C02297888111 | |
:100F90009981229668E572E00E94CC06892B79F14E | |
:100FA0008881998160EB74E00E94C706892B69F003 | |
:100FB000EE0CFF1C001F111F81E090E0A0E0B0E0EC | |
:100FC000E82AF92A0A2B1B2B0CC08881998168E535 | |
:100FD00072E00E94C706892B71F1EE0CFF1C001F06 | |
:100FE000111FA2E0B0E0AA0EBB1E249680917804E7 | |
:100FF00095012F5F3F4F90E0281739073CF2C5015C | |
:10100000019795958795F601918780870C971CF439 | |
:101010001186108610C0D6011496ED92FD920D93A4 | |
:101020001C93179782E090E08D939C9321E030E031 | |
:1010300040E050E004C020E030E040E050E0B90182 | |
:10104000CA01DF91CF911F910F91FF90EF90DF9038 | |
:10105000CF90BF90AF900895AF92BF92CF92DF92A2 | |
:10106000EF92FF920F931F93CF93DF936B018091C9 | |
:1010700078048A3108F489C0DB011A96CD91DC919D | |
:101080001B97888199818052934080F4FB011186DF | |
:1010900010868FEF9FEFAFEFBFEF84839583A6831A | |
:1010A000B78389E090E0918380836AC08A819B81C5 | |
:1010B0006CEA7DE00E94C706892B09F466C08C812A | |
:1010C0009D816CEA7DE00E94C706892B09F45DC012 | |
:1010D0002896EE24FF248701A3E0AA2EB12C30C06D | |
:1010E000229788819981229666EB73E00E94CC0654 | |
:1010F000892B79F18881998160E679E00E94C706A1 | |
:10110000892B69F0EE0CFF1C001F111F81E090E09D | |
:10111000A0E0B0E0E82AF92A0A2B1B2B0CC088813A | |
:1011200099816CEB72E00E94C706892B71F1EE0C7D | |
:10113000FF1C001F111FA2E0B0E0AA0EBB1E2496E8 | |
:101140008091780495012F5F3F4F90E02817390771 | |
:101150003CF2C501019795958795F60191878087A7 | |
:101160000C971CF41186108610C0D6011496ED92CF | |
:10117000FD920D931C93179789E090E08D939C93BB | |
:1011800021E030E040E050E004C020E030E040E00A | |
:1011900050E0B901CA01DF91CF911F910F91FF90EB | |
:1011A000EF90DF90CF90BF90AF9008956F927F92B5 | |
:1011B0008F929F92AF92BF92CF92DF92EF92FF9267 | |
:1011C0000F931F93CF93DF934B018091780482326A | |
:1011D00008F47AC0DB011A96CD91DC911B978A81C5 | |
:1011E0009B816EE571E00E94C706892B09F46CC0F3 | |
:1011F00036E0A32EB12CAC0EBD1EEE24FF248701D9 | |
:1012000022E0C22ED12C37C0E50122978881998136 | |
:101210006EE977E00E94C706892B69F0EE0CFF1C8F | |
:10122000001F111F81E090E0A0E0B0E0E82AF92A59 | |
:101230000A2B1B2B0DC0888199816EEE72E00E94F3 | |
:10124000C706892B09F440C0EE0CFF1C001F111FBC | |
:10125000D5018D919C916EE571E00E94CC06E4E091 | |
:10126000F0E0AE0EBF1E892B11F463010FC022E027 | |
:1012700030E0C20ED31E36010894611C711C8091AF | |
:10128000780490E0681679060CF4BECFC601019789 | |
:1012900095958795D40119969C938E9318974097AE | |
:1012A0002CF419961C921E9218970EC0F401E48239 | |
:1012B000F582068317838AE090E09183808321E0A2 | |
:1012C00030E040E050E004C020E030E040E050E09A | |
:1012D000B901CA01DF91CF911F910F91FF90EF905B | |
:1012E000DF90CF90BF90AF909F908F907F906F9046 | |
:1012F00008956F927F928F929F92AF92BF92CF92FA | |
:10130000DF92EF92FF920F931F93CF93DF93FB0136 | |
:101310003A0159016801DA012D913C918485958546 | |
:101320002817390724F071E0E72EF12C56C0C901C7 | |
:10133000880F991F0284F385E02DE80FF91F808143 | |
:101340009181982E892E20FD06C00CE91FEF51E0F7 | |
:10135000E52EF12C04C004E610E0EE24FF24B801D1 | |
:101360006C0D7D1D892D982D0E947E06892B19F00C | |
:1013700021E030E020C0E601CC0FDD1FB8016C0F8A | |
:101380007D1F892D982D0E947E06892B19F022E061 | |
:1013900030E011C0CC0DDD1D0C0F1D1F892D982DC7 | |
:1013A000B8010E947E06892B21F4EE24EA94FE2CDB | |
:1013B00014C023E030E0F501808191810196918392 | |
:1013C0008083821793074CF011821082D3018D9194 | |
:1013D0009C91119701968D939C93C701DF91CF91BA | |
:1013E0001F910F91FF90EF90DF90CF90BF90AF9043 | |
:1013F0009F908F907F906F9008952F923F924F9281 | |
:101400005F926F927F928F929F92AF92BF92CF9294 | |
:10141000DF92EF92FF920F931F93DF93CF9300D051 | |
:1014200000D000D0CDB7DEB71C015B0180917804FD | |
:101430008D3008F47EC081E090E09A8389831C821D | |
:101440001B82A3E08A2E912C8C0E9D1EC1012E01C1 | |
:101450000894411C511CA201940109E713E00E9469 | |
:101460007909892B09F065C0C101B501A201940178 | |
:101470000E947909019709F05CC0C101B501A20180 | |
:1014800094010E947909892B09F053C0CC24DD24F2 | |
:10149000760166247724C4018D829E832FC0C1010A | |
:1014A000B501A2012D813E8109E713E00E9479096F | |
:1014B0004C01C101B501A2012D813E810E94790933 | |
:1014C00021E08216910479F4892B99F5CC0CDD1C6E | |
:1014D000EE1CFF1C81E090E0A0E0B0E0C82AD92A11 | |
:1014E000EA2AFB2A08C0892821F5019711F5CC0CBE | |
:1014F000DD1CEE1CFF1C0894611C711C809178049B | |
:1015000090E029813A81281739074CF2D5011996C4 | |
:101510007C926E921897F501C482D582E682F7829A | |
:1015200083E090E09183808321E030E040E050E070 | |
:1015300004C020E030E040E050E0B901CA01269646 | |
:101540000FB6F894DEBF0FBECDBFCF91DF911F91D4 | |
:101550000F91FF90EF90DF90CF90BF90AF909F9052 | |
:101560008F907F906F905F904F903F902F90089555 | |
:101570002F923F924F925F926F927F928F929F92A3 | |
:10158000AF92BF92CF92DF92EF92FF920F931F9391 | |
:10159000DF93CF93CDB7DEB728970FB6F894DEBFB1 | |
:1015A0000FBECDBF1C014B01DB011C968D919C91A0 | |
:1015B0001D97181619060CF0C4C081E090E09A83BC | |
:1015C00089831A960D911C911B97F8018281938152 | |
:1015D0006AE67AE00E94C706892B09F4B2C082E06D | |
:1015E00090E09A838983D80114968D919C911597E8 | |
:1015F00069E773E00E94CC06892B09F4A2C083E05E | |
:1016000090E09A8389831C821B8203E0A02EB12C78 | |
:10161000AC0EBD1EC101B4013E010894611C711CD9 | |
:10162000A30195010CEB11E00E947909892B09F0C7 | |
:1016300088C0C101B401A30195010E9479090197F5 | |
:1016400009F07FC0CC24DD24760144245524C50153 | |
:10165000AD829E83C3016F82988756C0C101B401D9 | |
:101660004F8158852D813E810CEB11E00E94790954 | |
:101670003C01B3E04B16510461F4C101B4014F8148 | |
:1016800058852D813E810E9479096816790609F0F6 | |
:1016900058C0C101B4014F8158852D813E810CEBAA | |
:1016A00011E00E9479095C01E3E04E16510459F4FF | |
:1016B000C101B4014F8158852D813E810E94790975 | |
:1016C000A816B906F1F56114710489F4F1E0AF16BA | |
:1016D000B104B9F5CC0CDD1CEE1CFF1C81E090E0E0 | |
:1016E000A0E0B0E0C82AD92AEA2AFB2A0AC091E081 | |
:1016F0006916710431F5AB2821F5CC0CDD1CEE1C0C | |
:10170000FF1C0894411C511C29813A81D4011C966C | |
:101710008D919C911D97281739070CF49FCF19962E | |
:101720005C924E921897F401C482D582E682F782C9 | |
:1017300084E090E09183808321E030E040E050E05D | |
:1017400004C020E030E040E050E0B901CA01289632 | |
:101750000FB6F894DEBF0FBECDBFCF91DF911F91C2 | |
:101760000F91FF90EF90DF90CF90BF90AF909F9040 | |
:101770008F907F906F905F904F903F902F90089543 | |
:101780006F927F928F929F92AF92BF92CF92DF9291 | |
:10179000EF92FF920F931F93CF93DF937B01FB0197 | |
:1017A000C285D3858A819B816EEA7DE00E94C7064F | |
:1017B000892B09F474C08C819D8166ED76E00E94CE | |
:1017C000C706892B09F46BC0269600E010E0DD24E3 | |
:1017D000CC24992488247724662483E0A82EB12C75 | |
:1017E0008881998166EF71E00E94C706892B09F410 | |
:1017F00056C08A819B816CED74E00E94CC06892BD7 | |
:1018000069F098014D2D5C2D692D782D872D962D31 | |
:1018100001E00E940C01022F016013C08A819B81AC | |
:1018200060E971E00E94CC06892BC9F198014D2D29 | |
:101830005C2D692D782D872D962D01E00E940C01DD | |
:10184000022F132FD42EC52E962E872E782E692E7A | |
:101850002496F1E6AF16B10429F082E090E0A80EDC | |
:10186000B91EBECFC801F701048395834683578311 | |
:101870009801872D962D00E20E948D00C901F70185 | |
:101880002283938387E090E09183808380E390E0DC | |
:101890009187808721E030E040E050E004C020E004 | |
:1018A00030E040E050E0B901CA01DF91CF911F91D3 | |
:1018B0000F91FF90EF90DF90CF90BF90AF909F90EF | |
:1018C0008F907F906F9008958F929F92AF92BF926A | |
:1018D000CF92DF92EF92FF920F931F93CF93DF93FC | |
:1018E0006B0180917804823209F0B2C0DB011A9654 | |
:1018F000CD91DC911B978A819B8168E572E00E9403 | |
:10190000C706892B09F4A4C08091780421E030E057 | |
:10191000281B3109220F331FC21BD30B88819981E9 | |
:1019200068E572E00E94C706892B09F491C0F601B0 | |
:10193000118610868FEF9FEFAFEFBFEF8483958303 | |
:10194000A683B78388E090E09183808369C080910B | |
:101950007804813208F469C0D50114968D919C9168 | |
:10196000159760EA7FE00E94CC06892B09F45DC0E0 | |
:10197000E5012696EE24FF24870133E0832E912C87 | |
:101980008881998168E572E00E94C706892B09F475 | |
:101990004CC08A819B8160E476E00E94CC06892B52 | |
:1019A00069F0EE0CFF1C001F111F81E090E0A0E029 | |
:1019B000B0E0E82AF92A0A2B1B2B0CC08A819B81F4 | |
:1019C00066E272E00E94CC06892B79F1EE0CFF1CD6 | |
:1019D000001F111FA2E0B0E08A0E9B1E2496B3E206 | |
:1019E0008B16910469F6E6E4F0E0AE0EBF1ED50159 | |
:1019F0008D919C9168E572E00E94C706892BA9F041 | |
:101A000080E190E0F60191878087D6011496ED92EF | |
:101A1000FD920D931C93179788E090E08D939C9313 | |
:101A200021E030E040E050E004C020E030E040E061 | |
:101A300050E0B901CA01DF91CF911F910F91FF9042 | |
:101A4000EF90DF90CF90BF90AF909F908F900895D0 | |
:101A5000F601A284B384D50112968D919C911397BF | |
:101A600060E47FE10E94C706892B09F070CFDDCFCB | |
:101A70002F923F924F925F926F927F928F929F929E | |
:101A8000AF92BF92CF92DF92EF92FF920F931F938C | |
:101A9000DF93CF9300D0CDB7DEB71B01FB01848568 | |
:101AA0009585863091052CF420E030E040E050E050 | |
:101AB00081C0F5ECAF2EFDE9BF2EFCE1CF2EF1E8A1 | |
:101AC000DF2EE6E04E2E512C9C01220F331F3A836D | |
:101AD000298359C0F101A285B385F2013497EA0F39 | |
:101AE000FB1FE080F180A40DB51D6D917C9180E01D | |
:101AF00090E00E94E0143B014C0100E010E0C801BE | |
:101B0000B7010E94E0147B018C012DEC3CEC4CE40D | |
:101B10005FE30E9492159B01AC01C401B3010E94D6 | |
:101B2000431488231CF400E010E018C0C401B30182 | |
:101B30002DEC3CEC4CE45FE30E9492159B01AC0160 | |
:101B4000C801B7010E944314082F112707FD109503 | |
:101B50000027110F001F11270F5F1F4FC601B5018E | |
:101B600023E931E040E051E00E94F5155801CC2412 | |
:101B7000B7FCC094DC2CA626B726C826D92622E0BE | |
:101B800030E0420E531E89819A814816590609F0A9 | |
:101B9000A1CFF101A482B582C682D78280E290E013 | |
:101BA000918780878FEF9FEF9183808321E030E0E2 | |
:101BB00040E050E0B901CA010F900F90CF91DF9142 | |
:101BC0001F910F91FF90EF90DF90CF90BF90AF905B | |
:101BD0009F908F907F906F905F904F903F902F904D | |
:101BE00008950F931F93CF93DF938C01EB0180EB4C | |
:101BF00093E09B878A87809178048C871D868091EB | |
:101C0000AC03853009F057C0C8010E94DC0661159D | |
:101C100071058105910509F051C0C801BE010E94FE | |
:101C20008B07611571058105910509F047C0C80151 | |
:101C3000BE010E942C086115710581059105F1F521 | |
:101C4000C801BE010E94D608611571058105910584 | |
:101C5000A9F5C801BE010E94FD0961157105810544 | |
:101C6000910561F5C801BE010E94B80A61157105B0 | |
:101C70008105910519F5C801BE010E94C00B6115CF | |
:101C8000710581059105D1F4C801BE010E94640C63 | |
:101C9000611571058105910589F4C801BE010E9495 | |
:101CA000380D611571058105910541F482E080933D | |
:101CB000AC031092780420E030E002C021E030E074 | |
:101CC000C901DF91CF911F910F9108951F920F923B | |
:101CD0000FB60F9211242F933F934F935F936F93FF | |
:101CE0007F938F939F93AF93BF93EF93FF938091D5 | |
:101CF000AB030E94E50F482F8091AE039091AF0394 | |
:101D000001969093AF038093AE038091780484365C | |
:101D100018F085E08093AC038091AC038330D1F060 | |
:101D2000843020F4823009F059C006C0843071F14B | |
:101D3000853009F053C04CC0442309F04FC0809156 | |
:101D4000AE039091AF038436910508F443C010921E | |
:101D500078041EC0413009F041C080917804E82F1A | |
:101D6000F0E02091AE033091AF03EE0FFF1FE55579 | |
:101D7000FC4F368325838F5F809378041092AF03E6 | |
:101D80001092AE0384E08093AC0328C04423B9F4DE | |
:101D900080917804E82FF0E02091AE033091AF03FA | |
:101DA000EE0FFF1FE555FC4F368325838F5F809331 | |
:101DB00078041092AF031092AE0383E0E4CF8091D9 | |
:101DC000AE039091AF038536910540F085E0DBCFFF | |
:101DD000442321F41092AF031092AE038091AD031F | |
:101DE000882329F0442311F42D9A01C02D98FF91E6 | |
:101DF000EF91BF91AF919F918F917F916F915F9183 | |
:101E00004F913F912F910F900FBE0F901F901895FB | |
:101E1000F89492E09093B0009093B10084E68093A0 | |
:101E2000B300E2EBF0E01082E081909370007894D0 | |
:101E300082E08093AC03109278048091AB0360E061 | |
:101E40000E94A60F08951F920F920FB60F921124B1 | |
:101E50002F933F938F939F93AF93BF9380917D0474 | |
:101E600090917E04A0917F04B09180043091810410 | |
:101E70000196A11DB11D232F2D5F2D3720F02D5769 | |
:101E80000196A11DB11D2093810480937D04909340 | |
:101E90007E04A0937F04B093800480917904909194 | |
:101EA0007A04A0917B04B0917C040196A11DB11D20 | |
:101EB0008093790490937A04A0937B04B0937C047C | |
:101EC000BF91AF919F918F913F912F910F900FBE36 | |
:101ED0000F901F901895789484B5826084BD84B566 | |
:101EE000816084BD85B5826085BD85B5816085BD15 | |
:101EF000EEE6F0E0808181608083E1E8F0E010822E | |
:101F0000808182608083808181608083E0E8F0E06E | |
:101F1000808181608083E1EBF0E080818460808358 | |
:101F2000E0EBF0E0808181608083EAE7F0E080818F | |
:101F300084608083808182608083808181608083EF | |
:101F40008081806880831092C1000895CF93DF93D1 | |
:101F5000482F50E0CA0186569F4FFC0134914A57E2 | |
:101F60005F4FFA018491882369F190E0880F991FEF | |
:101F7000FC01E859FF4FA591B491FC01EE58FF4FC9 | |
:101F8000C591D491662351F42FB7F8948C91932F77 | |
:101F9000909589238C93888189230BC0623061F4EA | |
:101FA0002FB7F8948C91932F909589238C938881E7 | |
:101FB000832B88832FBF06C09FB7F8948C91832B07 | |
:101FC0008C939FBFDF91CF910895682F70E0CB0174 | |
:101FD00082559F4FFC012491CB0186569F4FFC01F7 | |
:101FE00044916A577F4FFB019491992319F420E0A3 | |
:101FF00030E03CC0222351F1233071F0243028F42A | |
:102000002130A1F0223011F514C02630B1F0273074 | |
:10201000C1F02430D9F404C0809180008F7703C0D0 | |
:10202000809180008F7D8093800010C084B58F7771 | |
:1020300002C084B58F7D84BD09C08091B0008F77C8 | |
:1020400003C08091B0008F7D8093B000892F90E015 | |
:10205000880F991F84589F4FFC01A591B4918C91D2 | |
:1020600020E030E0842311F021E030E0C901089540 | |
:1020700008951F920F920FB60F9211242F933F9342 | |
:102080004F938F939F93EF93FF938091C00082FDB6 | |
:102090001DC04091C6002091C2043091C3042F5F3F | |
:1020A0003F4F2F7330708091C4049091C50428175E | |
:1020B000390771F0E091C204F091C304EE57FB4F71 | |
:1020C00040833093C3042093C20402C08091C600B1 | |
:1020D000FF91EF919F918F914F913F912F910F9091 | |
:1020E0000FBE0F901F901895E0911605F0911705FF | |
:1020F000E05CFF4F8191919120813181821B930B94 | |
:102100008F739070892B11F00E94381008951F92E0 | |
:102110000F920FB60F9211242F933F938F939F939B | |
:10212000EF93FF93209106053091070580910805F4 | |
:10213000909109052817390731F48091C1008F7DEE | |
:102140008093C10014C0E0910805F0910905EA539D | |
:10215000FB4F2081809108059091090501968F73AE | |
:10216000907090930905809308052093C600FF9115 | |
:10217000EF919F918F913F912F910F900FBE0F90F4 | |
:102180001F901895AF92BF92DF92EF92FF920F933C | |
:102190001F93CF93DF93EC017A018B01DD24403054 | |
:1021A00081EE580780E0680780E0780711F0DD24B1 | |
:1021B000D39491E0A92EB12CEC89FD89DD2069F042 | |
:1021C000C50108A002C0880F991F0A94E2F7808316 | |
:1021D00060E079E08DE390E005C0108260E874E88B | |
:1021E0008EE190E0A80197010E9414162150304022 | |
:1021F00040405040569547953795279580E12030CF | |
:10220000380720F0DD2011F0DD24D6CFE889F989E8 | |
:102210003083EA89FB89208319A2EE89FF894081F6 | |
:1022200021E030E0C9010C8C02C0880F991F0A948C | |
:10223000E2F7482B4083EE89FF894081C9010D8C6C | |
:1022400002C0880F991F0A94E2F7482B4083EE8959 | |
:10225000FF894081C9010E8C02C0880F991F0A9422 | |
:10226000E2F7482B4083EE89FF8980810F8C02C002 | |
:10227000220F331F0A94E2F7209528232083DF9151 | |
:10228000CF911F910F91FF90EF90DF90BF90AF9093 | |
:102290000895DC011C96ED91FC911D97E05CFF4FC9 | |
:1022A0002191319180819181281B390B2F733070DE | |
:1022B000C9010895DC011C96ED91FC911D97E05C2D | |
:1022C000FF4F20813181E054F040DF01AE5BBF4F12 | |
:1022D0008D919C9111972817390719F42FEF3FEF33 | |
:1022E00007C08D919C91E80FF91F8081282F30E065 | |
:1022F000C9010895DC011C96ED91FC911D97E05CED | |
:10230000FF4F20813181E054F040DF01AE5BBF4FD1 | |
:102310008D919C9111972817390719F42FEF3FEFF2 | |
:1023200010C08D919C911197E80FF91F20818D911C | |
:102330009C91119701968F73907011969C938E9338 | |
:1023400030E0C9010895DC0191968C919197882322 | |
:1023500039F05496ED91FC915597808186FFF9CF25 | |
:1023600091961C920895CF93DF93EC01EE85FF8543 | |
:10237000E05CFF4F20813181E054F0402F5F3F4F00 | |
:102380002F733070DF01AE5BBF4F8D919C91119721 | |
:1023900028173907D1F3E05CFF4F80819181E05429 | |
:1023A000F040E80FF91F6083EE85FF85E05CFF4F8A | |
:1023B00031832083EE89FF89208181E090E00F8CBA | |
:1023C00002C0880F991F0A94E2F7282B208381E02E | |
:1023D00089A3EC89FD8980818064808381E090E01D | |
:1023E000DF91CF91089510920D0510920C0588EEA3 | |
:1023F00093E0A0E0B0E080930E0590930F05A093CA | |
:102400001005B093110583E891E090930B0580933C | |
:102410000A0582E894E0909317058093160586ECF0 | |
:1024200094E0909319058093180585EC90E09093C3 | |
:102430001B0580931A0584EC90E090931D05809312 | |
:102440001C0580EC90E090931F0580931E0581ECA5 | |
:1024500090E0909321058093200582EC90E090938A | |
:1024600023058093220586EC90E0909325058093C8 | |
:10247000240584E08093260583E08093270587E088 | |
:102480008093280585E08093290581E080932A05C3 | |
:102490000895CF93DF930E946B0F0E946706C4E7F5 | |
:1024A000D0E10E94A0052097E1F30E947410F9CFBB | |
:1024B000CF92DF92EF92FF920F931F93CF93DF9310 | |
:1024C0007C016B018A01C0E0D0E00FC0D6016D91A4 | |
:1024D0006D01D701ED91FC910190F081E02DC701D4 | |
:1024E0000995C80FD91F015010400115110571F74A | |
:1024F000CE01DF91CF911F910F91FF90EF90DF9070 | |
:10250000CF900895EF92FF920F931F938C01DC01FF | |
:10251000ED91FC910190F081E02D6DE009957C0139 | |
:10252000D801ED91FC910190F081E02DC8016AE0A5 | |
:1025300009959C012E0D3F1DC9011F910F91FF9020 | |
:10254000EF900895CF93DF93EC016115710519F4B5 | |
:1025500020E030E00FC0DB010D900020E9F711977B | |
:10256000A61BB70BE881F9810280F381E02DAD0154 | |
:1025700009959C01C901DF91CF9108954F925F9217 | |
:102580007F928F929F92AF92BF92CF92DF92EF9203 | |
:10259000FF920F931F93DF93CF93CDB7DEB7A19731 | |
:1025A0000FB6F894DEBF0FBECDBF2C01742ECB0149 | |
:1025B000223008F42AE019A231E2C32ED12CCC0E2D | |
:1025C000DD1E822E9924AA24BB24672D752FA50118 | |
:1025D00094010E94141679018A01C801B701A5016E | |
:1025E00094010E94F515472D461B0894C108D10897 | |
:1025F0004A3014F4405D01C0495CF6014083E114A7 | |
:10260000F1040105110521F07E2C5F2DC801DDCFFD | |
:10261000C201B6010E94A212A1960FB6F894DEBFC5 | |
:102620000FBECDBFCF91DF911F910F91FF90EF9023 | |
:10263000DF90CF90BF90AF909F908F907F905F90F2 | |
:102640004F900895DC012115310541F4ED91FC9185 | |
:102650000190F081E02D642F099508950E94BE122B | |
:102660000895EF92FF920F931F937C010E94221313 | |
:102670008C01C7010E9482129C01200F311FC901E9 | |
:102680001F910F91FF90EF900895EF92FF920F939B | |
:102690001F939A017B0100E010E0B801A7010E949E | |
:1026A00022131F910F91FF90EF900895CF92DF9228 | |
:1026B000EF92FF920F931F93CF93DF93EC016A0188 | |
:1026C0007B012115310541F4E881F9810190F08108 | |
:1026D000E02D642F09951FC02A303105D1F477FF12 | |
:1026E00017C0E881F9810190F081E02D6DE2099534 | |
:1026F0008C0144275527BA014C195D096E097F09E1 | |
:10270000CE012AE00E94BE129801280F391F04C092 | |
:102710002AE00E94BE129C01C901DF91CF911F9156 | |
:102720000F91FF90EF90DF90CF900895EF92FF927E | |
:102730000F931F937B019A010027F7FC0095102F40 | |
:10274000B801A7010E9456131F910F91FF90EF90BF | |
:102750000895CF92DF92EF92FF920F931F936C0137 | |
:102760007B019A010027F7FC0095102FB801A70103 | |
:102770000E9456138C01C6010E948212080F191F75 | |
:10278000C8011F910F91FF90EF90DF90CF900895B7 | |
:102790000E94A2120895EF92FF920F931F937C0163 | |
:1027A0000E94A2128C01C7010E948212080F191FF9 | |
:1027B000C8011F910F91FF90EF9008955058BB27CB | |
:1027C000AA270ED075C166D130F06BD120F031F45C | |
:1027D0009F3F11F41EF45BC10EF4E095E7FB51C17D | |
:1027E000E92F77D180F3BA1762077307840795073B | |
:1027F00018F071F49EF58FC10EF4E0950B2EBA2FF0 | |
:10280000A02D0B01B90190010C01CA01A0011124F6 | |
:10281000FF27591B99F0593F50F4503E68F11A16A2 | |
:10282000F040A22F232F342F4427585FF3CF469533 | |
:1028300037952795A795F0405395C9F77EF41F1655 | |
:10284000BA0B620B730B840BBAF09150A1F0FF0F1F | |
:10285000BB1F661F771F881FC2F70EC0BA0F621F0B | |
:10286000731F841F48F4879577956795B795F795FB | |
:102870009E3F08F0B3CF9395880F08F09927EE0F8D | |
:10288000979587950895D9D008F481E008950CD0E4 | |
:102890000FC107D140F0FED030F021F45F3F19F0B6 | |
:1028A000F0C0511139C1F3C014D198F39923C9F381 | |
:1028B0005523B1F3951B550BBB27AA276217730746 | |
:1028C000840738F09F5F5F4F220F331F441FAA1FFA | |
:1028D000A9F333D00E2E3AF0E0E830D091505040BA | |
:1028E000E695001CCAF729D0FE2F27D0660F771F68 | |
:1028F000881FBB1F261737074807AB07B0E809F04A | |
:10290000BB0B802DBF01FF2793585F4F2AF09E3FDE | |
:10291000510568F0B6C000C15F3FECF3983EDCF3B0 | |
:10292000869577956795B795F7959F5FC9F7880F57 | |
:10293000911D9695879597F90895E1E0660F771FA9 | |
:10294000881FBB1F621773078407BA0720F0621B3A | |
:10295000730B840BBA0BEE1F88F7E095089504D033 | |
:102960006894B111D9C00895BCD088F09F5790F0F9 | |
:10297000B92F9927B751A0F0D1F0660F771F881FA4 | |
:10298000991F1AF0BA95C9F712C0B13081F0C3D0BF | |
:10299000B1E00895C0C0672F782F8827B85F39F05D | |
:1029A000B93FCCF3869577956795B395D9F73EF403 | |
:1029B00090958095709561957F4F8F4F9F4F0895AB | |
:1029C000E89409C097FB3EF49095809570956195C9 | |
:1029D0007F4F8F4F9F4F9923A9F0F92F96E9BB277F | |
:1029E0009395F695879577956795B795F111F8CFFB | |
:1029F000FAF4BB0F11F460FF1BC06F5F7F4F8F4F66 | |
:102A00009F4F16C0882311F096E911C0772321F05B | |
:102A10009EE8872F762F05C0662371F096E8862FF3 | |
:102A200070E060E02AF09A95660F771F881FDAF74A | |
:102A3000880F9695879597F90895990F0008550F77 | |
:102A4000AA0BE0E8FEEF16161706E807F907C0F034 | |
:102A500012161306E407F50798F0621B730B840B3C | |
:102A6000950B39F40A2661F0232B242B252B21F416 | |
:102A700008950A2609F4A140A6958FEF811D811DB6 | |
:102A8000089597F99F6780E870E060E008959FEFF0 | |
:102A900080EC089500240A941616170618060906F5 | |
:102AA000089500240A9412161306140605060895C4 | |
:102AB000092E0394000C11F4882352F0BB0F40F44C | |
:102AC000BF2B11F460FF04C06F5F7F4F8F4F9F4F8C | |
:102AD000089557FD9058440F551F59F05F3F71F00E | |
:102AE0004795880F97FB991F61F09F3F79F0879575 | |
:102AF0000895121613061406551FF2CF4695F1DFFE | |
:102B000008C0161617061806991FF1CF869571058D | |
:102B1000610508940895E894BB2766277727CB01C1 | |
:102B200097F908950BD0C4CFB5DF28F0BADF18F0BD | |
:102B3000952309F0A6CFABCF1124EECFCADFA0F3C7 | |
:102B4000959FD1F3950F50E0551F629FF001729F42 | |
:102B5000BB27F00DB11D639FAA27F00DB11DAA1F61 | |
:102B6000649F6627B00DA11D661F829F2227B00DAE | |
:102B7000A11D621F739FB00DA11D621F839FA00D39 | |
:102B8000611D221F749F3327A00D611D231F849F89 | |
:102B9000600D211D822F762F6A2F11249F575040E0 | |
:102BA0008AF0E1F088234AF0EE0FFF1FBB1F661F7B | |
:102BB000771F881F91505040A9F79E3F510570F034 | |
:102BC00060CFAACF5F3FECF3983EDCF38695779514 | |
:102BD0006795B795F795E7959F5FC1F7FE2B880F2F | |
:102BE000911D9695879597F90895629FD001739FDF | |
:102BF000F001829FE00DF11D649FE00DF11D929F99 | |
:102C0000F00D839FF00D749FF00D659FF00D9927D7 | |
:102C1000729FB00DE11DF91F639FB00DE11DF91FFB | |
:102C2000BD01CF0111240895A1E21A2EAA1BBB1BDE | |
:102C3000FD010DC0AA1FBB1FEE1FFF1FA217B30788 | |
:102C4000E407F50720F0A21BB30BE40BF50B661F9E | |
:102C5000771F881F991F1A9469F760957095809562 | |
:102C600090959B01AC01BD01CF010895EE0FFF1FB0 | |
:102C70000590F491E02D0994911106C0803219F06D | |
:102C800089508550D0F70895992788270895F8949A | |
:022C9000FFCF74 | |
:102C9200486173683A2000466F722049522053639C | |
:102CA2006F70653A20002B00200000466F722041B1 | |
:102CB200726475696E6F20736B657463683A200085 | |
:102CC200756E7369676E656420696E7420726177D0 | |
:102CD2005B005D203D207B002C007D3B0069727310 | |
:102CE200656E642E73656E64526177287261772C0B | |
:102CF200002C3338293B0053454E440053454E5473 | |
:102D0200200030780052454144590008000100007B | |
:102D1200000000B311581249117A115A11A311007F | |
:00000001FF |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Send Pronto Hex via an IR LED connected to Arduino Pin D9. | |
Make sure you do not send a blank (" ") as the last character. | |
Send the following command over the serial line: | |
# Sony12, device = 1, obc = 47 | |
SEND 0000 0067 0000 000d 0060 0018 0030 0018 0030 0018 0030 0018 0030 0018 0018 0018 0030 0018 0018 0018 0030 0018 0018 0018 0018 0018 0018 0018 0018 03de | |
or | |
# RC5, device = 11, obc = 64 | |
SEND 0000 0073 0000 000B 0040 0020 0020 0020 0020 0040 0040 0040 0020 0020 0040 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0CC8 | |
Based on https://github.com/stephenong/Arduino-IR-Remote-Control-Player | |
*/ | |
#include <avr/interrupt.h> | |
#include <stdio.h> | |
#include <avr/pgmspace.h> | |
#include <stdint.h> | |
#include <avr/io.h> | |
#define IR_PORT PORTB | |
#define IR_PIN PINB | |
#define IR_DDR DDRB | |
#define IR_BV _BV(1) | |
#define IR_OCR OCR1A | |
#define IR_TCCRnA TCCR1A | |
#define IR_TCCRnB TCCR1B | |
#define IR_TCNTn TCNT1 | |
#define IR_TIFRn TIFR1 | |
#define IR_TIMSKn TIMSK1 | |
#define IR_TOIEn TOIE1 | |
#define IR_ICRn ICR1 | |
#define IR_OCRn OCR1A | |
#define IR_COMn0 COM1A0 | |
#define IR_COMn1 COM1A1 | |
#define PRONTO_IR_SOURCE 0 // Pronto code byte 0 | |
#define PRONTO_FREQ_CODE 1 // Pronto code byte 1 | |
#define PRONTO_SEQUENCE1_LENGTH 2 // Pronto code byte 2 | |
#define PRONTO_SEQUENCE2_LENGTH 3 // Pronto code byte 3 | |
#define PRONTO_CODE_START 4 // Pronto code byte 4 | |
static const uint16_t *ir_code = NULL; | |
static uint16_t ir_cycle_count = 0; | |
static uint32_t ir_total_cycle_count = 0; | |
static uint8_t ir_seq_index = 0; | |
static uint8_t ir_led_state = 0; | |
void ir_on() | |
{ | |
IR_TCCRnA |= (1<<IR_COMn1) + (1<<IR_COMn0); | |
ir_led_state = 1; | |
} | |
void ir_off() | |
{ | |
IR_TCCRnA &= ((~(1<<IR_COMn1)) & (~(1<<IR_COMn0)) ); | |
ir_led_state = 0; | |
} | |
void ir_toggle() | |
{ | |
if (ir_led_state) | |
ir_off(); | |
else | |
ir_on(); | |
} | |
void ir_start(uint16_t *code) | |
{ | |
ir_code = code; | |
IR_PORT &= ~IR_BV; // Turn output off | |
IR_DDR |= IR_BV; // Set it as output | |
IR_TCCRnA = 0x00; // Reset the pwm | |
IR_TCCRnB = 0x00; | |
//printf_P(PSTR("FREQ CODE: %hd\r\n"), code[PRONTO_FREQ_CODE]); | |
uint16_t top = ( (F_CPU/1000000.0) * code[PRONTO_FREQ_CODE] * 0.241246 ) - 1; | |
//printf_P(PSTR("top: %hu\n\r"), top); | |
IR_ICRn = top; | |
IR_OCRn = top >> 1; | |
IR_TCCRnA = (1<<WGM11); | |
IR_TCCRnB = (1<<WGM13) | (1<<WGM12); | |
IR_TCNTn = 0x0000; | |
IR_TIFRn = 0x00; | |
IR_TIMSKn = 1 << IR_TOIEn; | |
ir_seq_index = PRONTO_CODE_START; | |
ir_cycle_count = 0; | |
ir_on(); | |
IR_TCCRnB |= (1<<CS10); | |
} | |
#define TOTAL_CYCLES 80000 // Turns off after this number of | |
// cycles. About 2 seconds | |
// FIXME: Turn off after having sent | |
ISR(TIMER1_OVF_vect) { | |
uint16_t sequenceIndexEnd; | |
uint16_t repeatSequenceIndexStart; | |
ir_total_cycle_count++; | |
ir_cycle_count++; | |
if (ir_cycle_count== ir_code[ir_seq_index]) { | |
ir_toggle(); | |
ir_cycle_count = 0; | |
ir_seq_index++; | |
sequenceIndexEnd = PRONTO_CODE_START + | |
(ir_code[PRONTO_SEQUENCE1_LENGTH]<<1) + | |
(ir_code[PRONTO_SEQUENCE2_LENGTH]<<1); | |
repeatSequenceIndexStart = PRONTO_CODE_START + | |
(ir_code[PRONTO_SEQUENCE1_LENGTH]<<1); | |
if (ir_seq_index >= sequenceIndexEnd ) { | |
ir_seq_index = repeatSequenceIndexStart; | |
if(ir_total_cycle_count>TOTAL_CYCLES) { | |
ir_off(); | |
TCCR1B &= ~(1<<CS10); | |
} | |
} | |
} | |
} | |
void ir_stop() | |
{ | |
IR_TCCRnA = 0x00; // Reset the pwm | |
IR_TCCRnB = 0x00; | |
} | |
const uint16_t inputLength = 512; | |
void setup() { | |
Serial.begin(9600); | |
Serial.println("READY"); | |
} | |
void loop() | |
{ | |
if ( Serial.available() > 0 ) | |
{ | |
static char input[inputLength]; | |
static uint16_t i; | |
char c = Serial.read(); | |
if ( c != '\r' && c != '\n' && i < inputLength-1) | |
input[i++] = c; | |
else | |
{ | |
input[i] = '\0'; | |
i = 0; | |
uint16_t array[80]; | |
uint16_t j = 0; | |
if ( !strncmp(input, "SEND", 4) ) | |
{ | |
char* p = input+4; | |
while ( (p = strchr(p, ' ')) != NULL ) | |
array[j++] = strtol(p, &p, 16); | |
ir_start(array); | |
Serial.print("SENT "); | |
for ( uint8_t i = 0; i < j; i++ ) | |
{ | |
Serial.print ("0x"); | |
Serial.print (array[i], HEX); | |
Serial.print(" "); | |
} | |
Serial.println(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just saw this requires the library from http://www.pjrc.com/teensy/td_libs_IRremote.html to be installed. Alternatively there is https://github.com/z3t0/Arduino-IRremote , though in both cases note the following potential issue: https://github.com/z3t0/Arduino-IRremote/issues/98
This code can be used with the setup here (based on trying), but you may need to tweak things slightly: https://learn.sparkfun.com/tutorials/ir-control-kit-hookup-guide