ir-puck

Dependencies:   Puck IRSender mbed

Fork of ir-puck by Nordic Pucks

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?

UserRevisionLine numberNew 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 }