A test program for RemoteIR library.

Dependencies:   mbed RemoteIR

Committer:
shintamainjp
Date:
Sat Aug 21 04:46:31 2010 +0000
Revision:
0:d081f6c767da
Child:
1:9d53b768eac1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:d081f6c767da 1 /**
shintamainjp 0:d081f6c767da 2 * Test program.
shintamainjp 0:d081f6c767da 3 *
shintamainjp 0:d081f6c767da 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:d081f6c767da 5 * http://shinta.main.jp/
shintamainjp 0:d081f6c767da 6 */
shintamainjp 0:d081f6c767da 7
shintamainjp 0:d081f6c767da 8 #include <mbed.h>
shintamainjp 0:d081f6c767da 9
shintamainjp 0:d081f6c767da 10 #include "ReceiverIR.h"
shintamainjp 0:d081f6c767da 11 #include "TransmitterIR.h"
shintamainjp 0:d081f6c767da 12 #include "TextLCD.h"
shintamainjp 0:d081f6c767da 13
shintamainjp 0:d081f6c767da 14 #define TEST_LOOP_BACK 0
shintamainjp 0:d081f6c767da 15
shintamainjp 0:d081f6c767da 16 ReceiverIR ir_rx(p17);
shintamainjp 0:d081f6c767da 17 TransmitterIR ir_tx(p21);
shintamainjp 0:d081f6c767da 18 TextLCD lcd(p24, p26, p27, p28, p29, p30);
shintamainjp 0:d081f6c767da 19 BusOut led(LED4, LED3, LED2, LED1);
shintamainjp 0:d081f6c767da 20 Ticker ledTicker;
shintamainjp 0:d081f6c767da 21
shintamainjp 0:d081f6c767da 22 /**
shintamainjp 0:d081f6c767da 23 * Display a splash screen.
shintamainjp 0:d081f6c767da 24 */
shintamainjp 0:d081f6c767da 25 void splash(void) {
shintamainjp 0:d081f6c767da 26 lcd.cls();
shintamainjp 0:d081f6c767da 27 lcd.locate(0, 0);
shintamainjp 0:d081f6c767da 28 lcd.printf("StarBoard Orange");
shintamainjp 0:d081f6c767da 29 lcd.locate(0, 1);
shintamainjp 0:d081f6c767da 30 lcd.printf("mbed NXP LPC1768");
shintamainjp 0:d081f6c767da 31 wait(3);
shintamainjp 0:d081f6c767da 32
shintamainjp 0:d081f6c767da 33 lcd.cls();
shintamainjp 0:d081f6c767da 34 lcd.locate(0, 0);
shintamainjp 0:d081f6c767da 35 lcd.printf("Example app No.2");
shintamainjp 0:d081f6c767da 36 lcd.locate(0, 1);
shintamainjp 0:d081f6c767da 37 lcd.printf(" Remote IR ");
shintamainjp 0:d081f6c767da 38 wait(3);
shintamainjp 0:d081f6c767da 39 }
shintamainjp 0:d081f6c767da 40
shintamainjp 0:d081f6c767da 41 /**
shintamainjp 0:d081f6c767da 42 * Receive.
shintamainjp 0:d081f6c767da 43 *
shintamainjp 0:d081f6c767da 44 * @param format Pointer to a format.
shintamainjp 0:d081f6c767da 45 * @param buf Pointer to a buffer.
shintamainjp 0:d081f6c767da 46 * @param bufsiz Size of the buffer.
shintamainjp 0:d081f6c767da 47 *
shintamainjp 0:d081f6c767da 48 * @return Bit length of the received data.
shintamainjp 0:d081f6c767da 49 */
shintamainjp 0:d081f6c767da 50 int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
shintamainjp 0:d081f6c767da 51 int cnt = 0;
shintamainjp 0:d081f6c767da 52 while (ir_rx.getState() != ReceiverIR::Received) {
shintamainjp 0:d081f6c767da 53 cnt++;
shintamainjp 0:d081f6c767da 54 if (timeout < cnt) {
shintamainjp 0:d081f6c767da 55 return -1;
shintamainjp 0:d081f6c767da 56 }
shintamainjp 0:d081f6c767da 57 }
shintamainjp 0:d081f6c767da 58 return ir_rx.getData(format, buf, bufsiz);
shintamainjp 0:d081f6c767da 59 }
shintamainjp 0:d081f6c767da 60
shintamainjp 0:d081f6c767da 61 /**
shintamainjp 0:d081f6c767da 62 * Transmit.
shintamainjp 0:d081f6c767da 63 *
shintamainjp 0:d081f6c767da 64 * @param format Format.
shintamainjp 0:d081f6c767da 65 * @param buf Pointer to a buffer.
shintamainjp 0:d081f6c767da 66 * @param bitlength Bit length of the data.
shintamainjp 0:d081f6c767da 67 *
shintamainjp 0:d081f6c767da 68 * @return Bit length of the received data.
shintamainjp 0:d081f6c767da 69 */
shintamainjp 0:d081f6c767da 70 int transmit(RemoteIR::Format format, uint8_t *buf, int bitlength, int timeout = 100) {
shintamainjp 0:d081f6c767da 71 int cnt = 0;
shintamainjp 0:d081f6c767da 72 while (ir_tx.getState() != TransmitterIR::Idle) {
shintamainjp 0:d081f6c767da 73 cnt++;
shintamainjp 0:d081f6c767da 74 if (timeout < cnt) {
shintamainjp 0:d081f6c767da 75 return -1;
shintamainjp 0:d081f6c767da 76 }
shintamainjp 0:d081f6c767da 77 }
shintamainjp 0:d081f6c767da 78 return ir_tx.setData(format, buf, bitlength);
shintamainjp 0:d081f6c767da 79 }
shintamainjp 0:d081f6c767da 80
shintamainjp 0:d081f6c767da 81 /**
shintamainjp 0:d081f6c767da 82 * Display a current status.
shintamainjp 0:d081f6c767da 83 */
shintamainjp 0:d081f6c767da 84 void display_status(char *status, int bitlength) {
shintamainjp 0:d081f6c767da 85 lcd.locate(8, 0);
shintamainjp 0:d081f6c767da 86 lcd.printf("%-5.5s:%02d", status, bitlength);
shintamainjp 0:d081f6c767da 87 }
shintamainjp 0:d081f6c767da 88
shintamainjp 0:d081f6c767da 89 /**
shintamainjp 0:d081f6c767da 90 * Display a format of a data.
shintamainjp 0:d081f6c767da 91 */
shintamainjp 0:d081f6c767da 92 void display_format(RemoteIR::Format format) {
shintamainjp 0:d081f6c767da 93 lcd.locate(0, 0);
shintamainjp 0:d081f6c767da 94 switch (format) {
shintamainjp 0:d081f6c767da 95 case RemoteIR::UNKNOWN:
shintamainjp 0:d081f6c767da 96 lcd.printf("????????");
shintamainjp 0:d081f6c767da 97 break;
shintamainjp 0:d081f6c767da 98 case RemoteIR::NEC:
shintamainjp 0:d081f6c767da 99 lcd.printf("NEC ");
shintamainjp 0:d081f6c767da 100 break;
shintamainjp 0:d081f6c767da 101 case RemoteIR::NEC_REPEAT:
shintamainjp 0:d081f6c767da 102 lcd.printf("NEC (R)");
shintamainjp 0:d081f6c767da 103 break;
shintamainjp 0:d081f6c767da 104 case RemoteIR::AEHA:
shintamainjp 0:d081f6c767da 105 lcd.printf("AEHA ");
shintamainjp 0:d081f6c767da 106 break;
shintamainjp 0:d081f6c767da 107 case RemoteIR::AEHA_REPEAT:
shintamainjp 0:d081f6c767da 108 lcd.printf("AEHA (R)");
shintamainjp 0:d081f6c767da 109 break;
shintamainjp 0:d081f6c767da 110 case RemoteIR::SONY:
shintamainjp 0:d081f6c767da 111 lcd.printf("SONY ");
shintamainjp 0:d081f6c767da 112 break;
shintamainjp 0:d081f6c767da 113 }
shintamainjp 0:d081f6c767da 114 }
shintamainjp 0:d081f6c767da 115
shintamainjp 0:d081f6c767da 116 /**
shintamainjp 0:d081f6c767da 117 * Display a data.
shintamainjp 0:d081f6c767da 118 *
shintamainjp 0:d081f6c767da 119 * @param buf Pointer to a buffer.
shintamainjp 0:d081f6c767da 120 * @param bitlength Bit length of a data.
shintamainjp 0:d081f6c767da 121 */
shintamainjp 0:d081f6c767da 122 void display_data(uint8_t *buf, int bitlength) {
shintamainjp 0:d081f6c767da 123 lcd.locate(0, 1);
shintamainjp 0:d081f6c767da 124 const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
shintamainjp 0:d081f6c767da 125 for (int i = 0; i < n; i++) {
shintamainjp 0:d081f6c767da 126 lcd.printf("%02X", buf[i]);
shintamainjp 0:d081f6c767da 127 }
shintamainjp 0:d081f6c767da 128 for (int i = 0; i < 8 - n; i++) {
shintamainjp 0:d081f6c767da 129 lcd.printf("--");
shintamainjp 0:d081f6c767da 130 }
shintamainjp 0:d081f6c767da 131 }
shintamainjp 0:d081f6c767da 132
shintamainjp 0:d081f6c767da 133 void ledfunc(void) {
shintamainjp 0:d081f6c767da 134 led = led + 1;
shintamainjp 0:d081f6c767da 135 }
shintamainjp 0:d081f6c767da 136
shintamainjp 0:d081f6c767da 137 /**
shintamainjp 0:d081f6c767da 138 * Entry point.
shintamainjp 0:d081f6c767da 139 */
shintamainjp 0:d081f6c767da 140 int main(void) {
shintamainjp 0:d081f6c767da 141
shintamainjp 0:d081f6c767da 142 ledTicker.attach(&ledfunc, 0.5);
shintamainjp 0:d081f6c767da 143
shintamainjp 0:d081f6c767da 144 /*
shintamainjp 0:d081f6c767da 145 * Splash.
shintamainjp 0:d081f6c767da 146 */
shintamainjp 0:d081f6c767da 147 splash();
shintamainjp 0:d081f6c767da 148
shintamainjp 0:d081f6c767da 149 /*
shintamainjp 0:d081f6c767da 150 * Initialize.
shintamainjp 0:d081f6c767da 151 */
shintamainjp 0:d081f6c767da 152 led = 0;
shintamainjp 0:d081f6c767da 153 lcd.cls();
shintamainjp 0:d081f6c767da 154 lcd.locate(0, 0);
shintamainjp 0:d081f6c767da 155 lcd.printf("Press a button ");
shintamainjp 0:d081f6c767da 156 lcd.locate(0, 1);
shintamainjp 0:d081f6c767da 157 lcd.printf("on a controller.");
shintamainjp 0:d081f6c767da 158
shintamainjp 0:d081f6c767da 159 /*
shintamainjp 0:d081f6c767da 160 * Execute.
shintamainjp 0:d081f6c767da 161 */
shintamainjp 0:d081f6c767da 162 while (1) {
shintamainjp 0:d081f6c767da 163 uint8_t buf1[32];
shintamainjp 0:d081f6c767da 164 uint8_t buf2[32];
shintamainjp 0:d081f6c767da 165 int bitlength1;
shintamainjp 0:d081f6c767da 166 int bitlength2;
shintamainjp 0:d081f6c767da 167 RemoteIR::Format format;
shintamainjp 0:d081f6c767da 168
shintamainjp 0:d081f6c767da 169 //lcd.cls();
shintamainjp 0:d081f6c767da 170 memset(buf1, 0x00, sizeof(buf1));
shintamainjp 0:d081f6c767da 171 memset(buf2, 0x00, sizeof(buf2));
shintamainjp 0:d081f6c767da 172
shintamainjp 0:d081f6c767da 173 {
shintamainjp 0:d081f6c767da 174 bitlength1 = receive(&format, buf1, sizeof(buf1));
shintamainjp 0:d081f6c767da 175 if (bitlength1 < 0) {
shintamainjp 0:d081f6c767da 176 continue;
shintamainjp 0:d081f6c767da 177 }
shintamainjp 0:d081f6c767da 178 display_status("RECV", bitlength1);
shintamainjp 0:d081f6c767da 179 display_data(buf1, bitlength1);
shintamainjp 0:d081f6c767da 180 display_format(format);
shintamainjp 0:d081f6c767da 181 }
shintamainjp 0:d081f6c767da 182
shintamainjp 0:d081f6c767da 183 #if TEST_LOOP_BACK
shintamainjp 0:d081f6c767da 184 {
shintamainjp 0:d081f6c767da 185 bitlength1 = transmit(format, buf1, bitlength1);
shintamainjp 0:d081f6c767da 186 if (bitlength1 < 0) {
shintamainjp 0:d081f6c767da 187 continue;
shintamainjp 0:d081f6c767da 188 }
shintamainjp 0:d081f6c767da 189 display_status("TRAN", bitlength1);
shintamainjp 0:d081f6c767da 190 display_data(buf1, bitlength1);
shintamainjp 0:d081f6c767da 191 display_format(format);
shintamainjp 0:d081f6c767da 192 }
shintamainjp 0:d081f6c767da 193
shintamainjp 0:d081f6c767da 194 wait_ms(100);
shintamainjp 0:d081f6c767da 195
shintamainjp 0:d081f6c767da 196 {
shintamainjp 0:d081f6c767da 197 bitlength2 = receive(&format, buf2, sizeof(buf2));
shintamainjp 0:d081f6c767da 198 if (bitlength2 < 0) {
shintamainjp 0:d081f6c767da 199 continue;
shintamainjp 0:d081f6c767da 200 }
shintamainjp 0:d081f6c767da 201 display_status("RECV", bitlength2);
shintamainjp 0:d081f6c767da 202 display_data(buf2, bitlength2);
shintamainjp 0:d081f6c767da 203 display_format(format);
shintamainjp 0:d081f6c767da 204 }
shintamainjp 0:d081f6c767da 205
shintamainjp 0:d081f6c767da 206 wait_ms(100);
shintamainjp 0:d081f6c767da 207
shintamainjp 0:d081f6c767da 208 {
shintamainjp 0:d081f6c767da 209 for (int i = 0; i < sizeof(buf1); i++) {
shintamainjp 0:d081f6c767da 210 if (buf1[i] != buf2[i]) {
shintamainjp 0:d081f6c767da 211 display_status("Compare err.");
shintamainjp 0:d081f6c767da 212 wait(1);
shintamainjp 0:d081f6c767da 213 continue;
shintamainjp 0:d081f6c767da 214 }
shintamainjp 0:d081f6c767da 215 }
shintamainjp 0:d081f6c767da 216 }
shintamainjp 0:d081f6c767da 217 #endif
shintamainjp 0:d081f6c767da 218 }
shintamainjp 0:d081f6c767da 219 }