ir-puck

Dependencies:   Puck IRSender mbed

Fork of ir-puck by Nordic Pucks

Committer:
sigveseb
Date:
Wed Jul 23 13:01:27 2014 +0000
Revision:
5:3642c0af497e
Parent:
4:24d9873936e6
Child:
10:35d78d589580
updated to use newer puck 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"
sigveseb 0:c94311378ec1 3 #include "TxIR.hpp"
sigveseb 0:c94311378ec1 4
sigveseb 0:c94311378ec1 5 #define WORD(x, i) ((x)[(i)] << 8 | (x)[(i) + 1])
sigveseb 0:c94311378ec1 6
sigveseb 0:c94311378ec1 7 TxIR txir(p14);
sigveseb 0:c94311378ec1 8 Serial px(USBTX, USBRX);
sigveseb 0:c94311378ec1 9
sigveseb 5:3642c0af497e 10 #define SCR_1 1260, 420
sigveseb 5:3642c0af497e 11 #define SCR_0 420, 1260
sigveseb 5:3642c0af497e 12
sigveseb 5:3642c0af497e 13 #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 14 #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 15 #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 16 #define SCR_PAUSE 0, 20 * 1680
sigveseb 5:3642c0af497e 17
sigveseb 5:3642c0af497e 18 unsigned screen_down_raw_codes[50] = {
sigveseb 5:3642c0af497e 19 SCR_RAW_CODE_DOWN,
sigveseb 5:3642c0af497e 20 SCR_PAUSE,
sigveseb 5:3642c0af497e 21 SCR_RAW_CODE_DOWN
sigveseb 5:3642c0af497e 22 };
sigveseb 5:3642c0af497e 23
sigveseb 5:3642c0af497e 24 unsigned screen_middle_raw_codes[50] = {
sigveseb 5:3642c0af497e 25 SCR_RAW_CODE_MIDDLE,
sigveseb 5:3642c0af497e 26 SCR_PAUSE,
sigveseb 5:3642c0af497e 27 SCR_RAW_CODE_MIDDLE
sigveseb 5:3642c0af497e 28 };
sigveseb 5:3642c0af497e 29
sigveseb 5:3642c0af497e 30 unsigned screen_up_raw_codes[50] = {
sigveseb 5:3642c0af497e 31 SCR_RAW_CODE_UP,
sigveseb 5:3642c0af497e 32 SCR_PAUSE,
sigveseb 5:3642c0af497e 33 SCR_RAW_CODE_UP
sigveseb 5:3642c0af497e 34 };
sigveseb 5:3642c0af497e 35
sigveseb 5:3642c0af497e 36
sigveseb 5:3642c0af497e 37
aleksanb 1:e92c3b50191d 38 void fireIRCode(uint8_t* header, uint8_t* one, uint8_t* zero, uint8_t* ptrail, uint8_t* predata, uint8_t* code)
aleksanb 1:e92c3b50191d 39 {
sigveseb 5:3642c0af497e 40
sigveseb 5:3642c0af497e 41 if(code[0] == 17) {
sigveseb 5:3642c0af497e 42 switch(code[1]) {
sigveseb 5:3642c0af497e 43 case 17: txir.txSeq(26, 50, screen_up_raw_codes); break;
sigveseb 5:3642c0af497e 44 case 18: txir.txSeq(26, 50, screen_middle_raw_codes); break;
sigveseb 5:3642c0af497e 45 case 19: txir.txSeq(26, 50, screen_down_raw_codes); break;
sigveseb 5:3642c0af497e 46 }
sigveseb 5:3642c0af497e 47 return;
sigveseb 5:3642c0af497e 48 }
sigveseb 5:3642c0af497e 49
sigveseb 0:c94311378ec1 50 px.printf("Going to fire.\n");
sigveseb 0:c94311378ec1 51 int raw_codes_length = 67;
sigveseb 0:c94311378ec1 52 unsigned raw_codes[raw_codes_length];
sigveseb 0:c94311378ec1 53 raw_codes[0] = WORD(header, 0);
sigveseb 0:c94311378ec1 54 raw_codes[1] = WORD(header, 2);
sigveseb 0:c94311378ec1 55 int offset = 2;
sigveseb 0:c94311378ec1 56 for(int i = 0; i < 16 * 2; i += 2) {
sigveseb 0:c94311378ec1 57 int bit = predata[i / 16] & 0x80;
sigveseb 0:c94311378ec1 58 uint8_t* signal = bit ? one : zero;
sigveseb 0:c94311378ec1 59 raw_codes[i + offset] = WORD(signal, 0);
sigveseb 0:c94311378ec1 60 raw_codes[i + offset + 1] = WORD(signal, 2);
sigveseb 0:c94311378ec1 61 predata[i / 16] <<= 1;
sigveseb 0:c94311378ec1 62 }
sigveseb 0:c94311378ec1 63 offset = 34;
sigveseb 0:c94311378ec1 64 for(int i = 0; i < 16 * 2; i += 2) {
sigveseb 0:c94311378ec1 65 int bit = code[i / 16] & 0x80;
sigveseb 0:c94311378ec1 66 uint8_t* signal = bit ? one : zero;
sigveseb 0:c94311378ec1 67 raw_codes[i + offset] = WORD(signal, 0);
sigveseb 0:c94311378ec1 68 raw_codes[i + offset + 1] = WORD(signal, 2);
sigveseb 0:c94311378ec1 69 code[i / 16] <<= 1;
sigveseb 0:c94311378ec1 70 }
aleksanb 1:e92c3b50191d 71 raw_codes[66] = WORD(ptrail, 0);
stiaje 4:24d9873936e6 72
stiaje 4:24d9873936e6 73 px.printf("Full sequence received: [%i", raw_codes[0]);
stiaje 4:24d9873936e6 74 for (int i=1; i<67; i++) {
stiaje 4:24d9873936e6 75 px.printf(", %i", raw_codes[i]);
stiaje 4:24d9873936e6 76 }
stiaje 4:24d9873936e6 77 px.printf("]\n");
stiaje 4:24d9873936e6 78
aleksanb 1:e92c3b50191d 79 txir.txSeq(26, 67, raw_codes);
aleksanb 1:e92c3b50191d 80
sigveseb 5:3642c0af497e 81
sigveseb 0:c94311378ec1 82 px.printf("Wrote message :)\n");
sigveseb 0:c94311378ec1 83 }