Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TextLCD RemoteIR
Fork of RemoteIR_TestProgram by
Revision 0:d081f6c767da, committed 2010-08-21
- Comitter:
- shintamainjp
- Date:
- Sat Aug 21 04:46:31 2010 +0000
- Child:
- 1:9d53b768eac1
- Commit message:
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RemoteIR.lib Sat Aug 21 04:46:31 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/shintamainjp/code/RemoteIR/#268cc2ab63bd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Sat Aug 21 04:46:31 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sat Aug 21 04:46:31 2010 +0000
@@ -0,0 +1,219 @@
+/**
+ * Test program.
+ *
+ * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
+ * http://shinta.main.jp/
+ */
+
+#include <mbed.h>
+
+#include "ReceiverIR.h"
+#include "TransmitterIR.h"
+#include "TextLCD.h"
+
+#define TEST_LOOP_BACK 0
+
+ReceiverIR ir_rx(p17);
+TransmitterIR ir_tx(p21);
+TextLCD lcd(p24, p26, p27, p28, p29, p30);
+BusOut led(LED4, LED3, LED2, LED1);
+Ticker ledTicker;
+
+/**
+ * Display a splash screen.
+ */
+void splash(void) {
+ lcd.cls();
+ lcd.locate(0, 0);
+ lcd.printf("StarBoard Orange");
+ lcd.locate(0, 1);
+ lcd.printf("mbed NXP LPC1768");
+ wait(3);
+
+ lcd.cls();
+ lcd.locate(0, 0);
+ lcd.printf("Example app No.2");
+ lcd.locate(0, 1);
+ lcd.printf(" Remote IR ");
+ wait(3);
+}
+
+/**
+ * Receive.
+ *
+ * @param format Pointer to a format.
+ * @param buf Pointer to a buffer.
+ * @param bufsiz Size of the buffer.
+ *
+ * @return Bit length of the received data.
+ */
+int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
+ int cnt = 0;
+ while (ir_rx.getState() != ReceiverIR::Received) {
+ cnt++;
+ if (timeout < cnt) {
+ return -1;
+ }
+ }
+ return ir_rx.getData(format, buf, bufsiz);
+}
+
+/**
+ * Transmit.
+ *
+ * @param format Format.
+ * @param buf Pointer to a buffer.
+ * @param bitlength Bit length of the data.
+ *
+ * @return Bit length of the received data.
+ */
+int transmit(RemoteIR::Format format, uint8_t *buf, int bitlength, int timeout = 100) {
+ int cnt = 0;
+ while (ir_tx.getState() != TransmitterIR::Idle) {
+ cnt++;
+ if (timeout < cnt) {
+ return -1;
+ }
+ }
+ return ir_tx.setData(format, buf, bitlength);
+}
+
+/**
+ * Display a current status.
+ */
+void display_status(char *status, int bitlength) {
+ lcd.locate(8, 0);
+ lcd.printf("%-5.5s:%02d", status, bitlength);
+}
+
+/**
+ * Display a format of a data.
+ */
+void display_format(RemoteIR::Format format) {
+ lcd.locate(0, 0);
+ switch (format) {
+ case RemoteIR::UNKNOWN:
+ lcd.printf("????????");
+ break;
+ case RemoteIR::NEC:
+ lcd.printf("NEC ");
+ break;
+ case RemoteIR::NEC_REPEAT:
+ lcd.printf("NEC (R)");
+ break;
+ case RemoteIR::AEHA:
+ lcd.printf("AEHA ");
+ break;
+ case RemoteIR::AEHA_REPEAT:
+ lcd.printf("AEHA (R)");
+ break;
+ case RemoteIR::SONY:
+ lcd.printf("SONY ");
+ break;
+ }
+}
+
+/**
+ * Display a data.
+ *
+ * @param buf Pointer to a buffer.
+ * @param bitlength Bit length of a data.
+ */
+void display_data(uint8_t *buf, int bitlength) {
+ lcd.locate(0, 1);
+ const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
+ for (int i = 0; i < n; i++) {
+ lcd.printf("%02X", buf[i]);
+ }
+ for (int i = 0; i < 8 - n; i++) {
+ lcd.printf("--");
+ }
+}
+
+void ledfunc(void) {
+ led = led + 1;
+}
+
+/**
+ * Entry point.
+ */
+int main(void) {
+
+ ledTicker.attach(&ledfunc, 0.5);
+
+ /*
+ * Splash.
+ */
+ splash();
+
+ /*
+ * Initialize.
+ */
+ led = 0;
+ lcd.cls();
+ lcd.locate(0, 0);
+ lcd.printf("Press a button ");
+ lcd.locate(0, 1);
+ lcd.printf("on a controller.");
+
+ /*
+ * Execute.
+ */
+ while (1) {
+ uint8_t buf1[32];
+ uint8_t buf2[32];
+ int bitlength1;
+ int bitlength2;
+ RemoteIR::Format format;
+
+ //lcd.cls();
+ memset(buf1, 0x00, sizeof(buf1));
+ memset(buf2, 0x00, sizeof(buf2));
+
+ {
+ bitlength1 = receive(&format, buf1, sizeof(buf1));
+ if (bitlength1 < 0) {
+ continue;
+ }
+ display_status("RECV", bitlength1);
+ display_data(buf1, bitlength1);
+ display_format(format);
+ }
+
+#if TEST_LOOP_BACK
+ {
+ bitlength1 = transmit(format, buf1, bitlength1);
+ if (bitlength1 < 0) {
+ continue;
+ }
+ display_status("TRAN", bitlength1);
+ display_data(buf1, bitlength1);
+ display_format(format);
+ }
+
+ wait_ms(100);
+
+ {
+ bitlength2 = receive(&format, buf2, sizeof(buf2));
+ if (bitlength2 < 0) {
+ continue;
+ }
+ display_status("RECV", bitlength2);
+ display_data(buf2, bitlength2);
+ display_format(format);
+ }
+
+ wait_ms(100);
+
+ {
+ for (int i = 0; i < sizeof(buf1); i++) {
+ if (buf1[i] != buf2[i]) {
+ display_status("Compare err.");
+ wait(1);
+ continue;
+ }
+ }
+ }
+#endif
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Aug 21 04:46:31 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da
