ir-puck
Dependencies: Puck IRSender mbed
Fork of ir-puck by
IR.cpp@11:5eef3c1e783e, 2014-07-25 (annotated)
- Committer:
- cristea
- Date:
- Fri Jul 25 09:21:13 2014 +0000
- Revision:
- 11:5eef3c1e783e
- Parent:
- 10:35d78d589580
Cleanup and update IR lib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sigveseb | 0:c94311378ec1 | 1 | #include "mbed.h" |
sigveseb | 0:c94311378ec1 | 2 | #include "IR.h" |
cristea | 11:5eef3c1e783e | 3 | #include "IRSender.h" |
sigveseb | 0:c94311378ec1 | 4 | |
cristea | 10:35d78d589580 | 5 | #define LOG_LEVEL_ERROR |
cristea | 10:35d78d589580 | 6 | #include "Log.h" |
cristea | 10:35d78d589580 | 7 | |
sigveseb | 0:c94311378ec1 | 8 | #define WORD(x, i) ((x)[(i)] << 8 | (x)[(i) + 1]) |
sigveseb | 0:c94311378ec1 | 9 | |
cristea | 11:5eef3c1e783e | 10 | IRSender senderPin(p14); |
sigveseb | 0:c94311378ec1 | 11 | Serial px(USBTX, USBRX); |
sigveseb | 0:c94311378ec1 | 12 | |
sigveseb | 5:3642c0af497e | 13 | #define SCR_1 1260, 420 |
sigveseb | 5:3642c0af497e | 14 | #define SCR_0 420, 1260 |
sigveseb | 5:3642c0af497e | 15 | |
sigveseb | 5:3642c0af497e | 16 | #define SCR_RAW_CODE_DOWN SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1, SCR_0, SCR_0 |
sigveseb | 5:3642c0af497e | 17 | #define SCR_RAW_CODE_MIDDLE SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1, SCR_0 |
sigveseb | 5:3642c0af497e | 18 | #define SCR_RAW_CODE_UP SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1 |
sigveseb | 5:3642c0af497e | 19 | #define SCR_PAUSE 0, 20 * 1680 |
sigveseb | 5:3642c0af497e | 20 | |
sigveseb | 5:3642c0af497e | 21 | unsigned screen_down_raw_codes[50] = { |
sigveseb | 5:3642c0af497e | 22 | SCR_RAW_CODE_DOWN, |
sigveseb | 5:3642c0af497e | 23 | SCR_PAUSE, |
sigveseb | 5:3642c0af497e | 24 | SCR_RAW_CODE_DOWN |
sigveseb | 5:3642c0af497e | 25 | }; |
sigveseb | 5:3642c0af497e | 26 | |
sigveseb | 5:3642c0af497e | 27 | unsigned screen_middle_raw_codes[50] = { |
sigveseb | 5:3642c0af497e | 28 | SCR_RAW_CODE_MIDDLE, |
sigveseb | 5:3642c0af497e | 29 | SCR_PAUSE, |
sigveseb | 5:3642c0af497e | 30 | SCR_RAW_CODE_MIDDLE |
sigveseb | 5:3642c0af497e | 31 | }; |
sigveseb | 5:3642c0af497e | 32 | |
sigveseb | 5:3642c0af497e | 33 | unsigned screen_up_raw_codes[50] = { |
sigveseb | 5:3642c0af497e | 34 | SCR_RAW_CODE_UP, |
sigveseb | 5:3642c0af497e | 35 | SCR_PAUSE, |
sigveseb | 5:3642c0af497e | 36 | SCR_RAW_CODE_UP |
sigveseb | 5:3642c0af497e | 37 | }; |
sigveseb | 5:3642c0af497e | 38 | |
sigveseb | 5:3642c0af497e | 39 | |
sigveseb | 5:3642c0af497e | 40 | |
aleksanb | 1:e92c3b50191d | 41 | void fireIRCode(uint8_t* header, uint8_t* one, uint8_t* zero, uint8_t* ptrail, uint8_t* predata, uint8_t* code) |
aleksanb | 1:e92c3b50191d | 42 | { |
sigveseb | 5:3642c0af497e | 43 | |
sigveseb | 5:3642c0af497e | 44 | if(code[0] == 17) { |
sigveseb | 5:3642c0af497e | 45 | switch(code[1]) { |
cristea | 11:5eef3c1e783e | 46 | case 17: senderPin.irSeq(26, 50, screen_up_raw_codes); break; |
cristea | 11:5eef3c1e783e | 47 | case 18: senderPin.irSeq(26, 50, screen_middle_raw_codes); break; |
cristea | 11:5eef3c1e783e | 48 | case 19: senderPin.irSeq(26, 50, screen_down_raw_codes); break; |
sigveseb | 5:3642c0af497e | 49 | } |
sigveseb | 5:3642c0af497e | 50 | return; |
sigveseb | 5:3642c0af497e | 51 | } |
sigveseb | 5:3642c0af497e | 52 | |
cristea | 10:35d78d589580 | 53 | LOG_INFO("Going to fire.\n"); |
sigveseb | 0:c94311378ec1 | 54 | int raw_codes_length = 67; |
sigveseb | 0:c94311378ec1 | 55 | unsigned raw_codes[raw_codes_length]; |
sigveseb | 0:c94311378ec1 | 56 | raw_codes[0] = WORD(header, 0); |
sigveseb | 0:c94311378ec1 | 57 | raw_codes[1] = WORD(header, 2); |
sigveseb | 0:c94311378ec1 | 58 | int offset = 2; |
sigveseb | 0:c94311378ec1 | 59 | for(int i = 0; i < 16 * 2; i += 2) { |
sigveseb | 0:c94311378ec1 | 60 | int bit = predata[i / 16] & 0x80; |
sigveseb | 0:c94311378ec1 | 61 | uint8_t* signal = bit ? one : zero; |
sigveseb | 0:c94311378ec1 | 62 | raw_codes[i + offset] = WORD(signal, 0); |
sigveseb | 0:c94311378ec1 | 63 | raw_codes[i + offset + 1] = WORD(signal, 2); |
sigveseb | 0:c94311378ec1 | 64 | predata[i / 16] <<= 1; |
sigveseb | 0:c94311378ec1 | 65 | } |
sigveseb | 0:c94311378ec1 | 66 | offset = 34; |
sigveseb | 0:c94311378ec1 | 67 | for(int i = 0; i < 16 * 2; i += 2) { |
sigveseb | 0:c94311378ec1 | 68 | int bit = code[i / 16] & 0x80; |
sigveseb | 0:c94311378ec1 | 69 | uint8_t* signal = bit ? one : zero; |
sigveseb | 0:c94311378ec1 | 70 | raw_codes[i + offset] = WORD(signal, 0); |
sigveseb | 0:c94311378ec1 | 71 | raw_codes[i + offset + 1] = WORD(signal, 2); |
sigveseb | 0:c94311378ec1 | 72 | code[i / 16] <<= 1; |
sigveseb | 0:c94311378ec1 | 73 | } |
aleksanb | 1:e92c3b50191d | 74 | raw_codes[66] = WORD(ptrail, 0); |
stiaje | 4:24d9873936e6 | 75 | |
cristea | 11:5eef3c1e783e | 76 | LOG_INFO("Full sequence received!\n"); |
stiaje | 4:24d9873936e6 | 77 | |
cristea | 11:5eef3c1e783e | 78 | senderPin.irSeq(26, 67, raw_codes); |
aleksanb | 1:e92c3b50191d | 79 | |
sigveseb | 5:3642c0af497e | 80 | |
cristea | 10:35d78d589580 | 81 | LOG_INFO("Wrote message :)\n"); |
sigveseb | 0:c94311378ec1 | 82 | } |