StarBoard Orange - Example application No.2 (Version 0.0.4)

Dependencies:   mbed

Committer:
shintamainjp
Date:
Fri Sep 17 22:05:34 2010 +0000
Revision:
3:469de11d1e1d
Parent:
0:5d79cd4ac81d

        

Who changed what in which revision?

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