A test program for RemoteIR library.

Dependencies:   mbed RemoteIR

Files at this revision

API Documentation at this revision

Comitter:
shintamainjp
Date:
Sat Aug 21 04:46:31 2010 +0000
Child:
1:9d53b768eac1
Commit message:

Changed in this revision

RemoteIR.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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