
StarBoard Orange - Example application No.2 (Version 0.0.4)
main.cpp@3:469de11d1e1d, 2010-09-17 (annotated)
- Committer:
- shintamainjp
- Date:
- Fri Sep 17 22:05:34 2010 +0000
- Revision:
- 3:469de11d1e1d
- Parent:
- 0:5d79cd4ac81d
Who changed what in which revision?
User | Revision | Line number | New 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 | } |