Multi IoT BoardのIRテストプログラム

Dependencies:   mbed TextLCD RemoteIR

Fork of RemoteIR_TestProgram by Shinichiro Nakamura

Committer:
jksoft
Date:
Tue Sep 20 11:48:53 2016 +0000
Revision:
6:d1233e2387f9
Parent:
5:40750d5779ca
Multi IoT Board Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 2:9e3081533f70 1 /**
shintamainjp 5:40750d5779ca 2 * RemoteIR library - Test program.
shintamainjp 2:9e3081533f70 3 *
shintamainjp 2:9e3081533f70 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 2:9e3081533f70 5 * http://shinta.main.jp/
shintamainjp 2:9e3081533f70 6 */
shintamainjp 2:9e3081533f70 7
shintamainjp 2:9e3081533f70 8 #include <mbed.h>
shintamainjp 2:9e3081533f70 9
shintamainjp 2:9e3081533f70 10 #include "ReceiverIR.h"
shintamainjp 2:9e3081533f70 11 #include "TransmitterIR.h"
shintamainjp 2:9e3081533f70 12
shintamainjp 4:a96406427829 13 #define TEST_LOOP_BACK 0
shintamainjp 2:9e3081533f70 14
jksoft 6:d1233e2387f9 15 ReceiverIR ir_rx(PA_2);
jksoft 6:d1233e2387f9 16 TransmitterIR ir_tx(PF_0);
jksoft 6:d1233e2387f9 17 Serial pc(USBTX,USBRX);
shintamainjp 2:9e3081533f70 18
shintamainjp 2:9e3081533f70 19 /**
shintamainjp 2:9e3081533f70 20 * Receive.
shintamainjp 2:9e3081533f70 21 *
shintamainjp 2:9e3081533f70 22 * @param format Pointer to a format.
shintamainjp 2:9e3081533f70 23 * @param buf Pointer to a buffer.
shintamainjp 2:9e3081533f70 24 * @param bufsiz Size of the buffer.
shintamainjp 2:9e3081533f70 25 *
shintamainjp 2:9e3081533f70 26 * @return Bit length of the received data.
shintamainjp 2:9e3081533f70 27 */
shintamainjp 2:9e3081533f70 28 int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
shintamainjp 2:9e3081533f70 29 int cnt = 0;
shintamainjp 2:9e3081533f70 30 while (ir_rx.getState() != ReceiverIR::Received) {
shintamainjp 2:9e3081533f70 31 cnt++;
shintamainjp 2:9e3081533f70 32 if (timeout < cnt) {
shintamainjp 2:9e3081533f70 33 return -1;
shintamainjp 2:9e3081533f70 34 }
shintamainjp 2:9e3081533f70 35 }
shintamainjp 2:9e3081533f70 36 return ir_rx.getData(format, buf, bufsiz * 8);
shintamainjp 2:9e3081533f70 37 }
shintamainjp 2:9e3081533f70 38
shintamainjp 2:9e3081533f70 39 /**
shintamainjp 2:9e3081533f70 40 * Transmit.
shintamainjp 2:9e3081533f70 41 *
shintamainjp 2:9e3081533f70 42 * @param format Format.
shintamainjp 2:9e3081533f70 43 * @param buf Pointer to a buffer.
shintamainjp 2:9e3081533f70 44 * @param bitlength Bit length of the data.
shintamainjp 2:9e3081533f70 45 *
shintamainjp 2:9e3081533f70 46 * @return Bit length of the received data.
shintamainjp 2:9e3081533f70 47 */
shintamainjp 2:9e3081533f70 48 int transmit(RemoteIR::Format format, uint8_t *buf, int bitlength, int timeout = 100) {
shintamainjp 2:9e3081533f70 49 int cnt = 0;
shintamainjp 2:9e3081533f70 50 while (ir_tx.getState() != TransmitterIR::Idle) {
shintamainjp 2:9e3081533f70 51 cnt++;
shintamainjp 2:9e3081533f70 52 if (timeout < cnt) {
shintamainjp 2:9e3081533f70 53 return -1;
shintamainjp 2:9e3081533f70 54 }
shintamainjp 2:9e3081533f70 55 }
shintamainjp 2:9e3081533f70 56 return ir_tx.setData(format, buf, bitlength);
shintamainjp 2:9e3081533f70 57 }
shintamainjp 2:9e3081533f70 58
shintamainjp 2:9e3081533f70 59 /**
shintamainjp 2:9e3081533f70 60 * Display a current status.
shintamainjp 2:9e3081533f70 61 */
shintamainjp 2:9e3081533f70 62 void display_status(char *status, int bitlength) {
jksoft 6:d1233e2387f9 63 pc.printf("%-5.5s:%02d\r\n", status, bitlength);
shintamainjp 2:9e3081533f70 64 }
shintamainjp 2:9e3081533f70 65
shintamainjp 2:9e3081533f70 66 /**
shintamainjp 2:9e3081533f70 67 * Display a format of a data.
shintamainjp 2:9e3081533f70 68 */
shintamainjp 2:9e3081533f70 69 void display_format(RemoteIR::Format format) {
jksoft 6:d1233e2387f9 70
shintamainjp 2:9e3081533f70 71 switch (format) {
shintamainjp 2:9e3081533f70 72 case RemoteIR::UNKNOWN:
jksoft 6:d1233e2387f9 73 pc.printf("????????\r\n");
shintamainjp 2:9e3081533f70 74 break;
shintamainjp 2:9e3081533f70 75 case RemoteIR::NEC:
jksoft 6:d1233e2387f9 76 pc.printf("NEC \r\n");
shintamainjp 2:9e3081533f70 77 break;
shintamainjp 2:9e3081533f70 78 case RemoteIR::NEC_REPEAT:
jksoft 6:d1233e2387f9 79 pc.printf("NEC (R)\r\n");
shintamainjp 2:9e3081533f70 80 break;
shintamainjp 2:9e3081533f70 81 case RemoteIR::AEHA:
jksoft 6:d1233e2387f9 82 pc.printf("AEHA \r\n");
shintamainjp 2:9e3081533f70 83 break;
shintamainjp 2:9e3081533f70 84 case RemoteIR::AEHA_REPEAT:
jksoft 6:d1233e2387f9 85 pc.printf("AEHA (R)\r\n");
shintamainjp 2:9e3081533f70 86 break;
shintamainjp 2:9e3081533f70 87 case RemoteIR::SONY:
jksoft 6:d1233e2387f9 88 pc.printf("SONY \r\n");
shintamainjp 2:9e3081533f70 89 break;
shintamainjp 2:9e3081533f70 90 }
shintamainjp 2:9e3081533f70 91 }
shintamainjp 2:9e3081533f70 92
shintamainjp 2:9e3081533f70 93 /**
shintamainjp 2:9e3081533f70 94 * Display a data.
shintamainjp 2:9e3081533f70 95 *
shintamainjp 2:9e3081533f70 96 * @param buf Pointer to a buffer.
shintamainjp 2:9e3081533f70 97 * @param bitlength Bit length of a data.
shintamainjp 2:9e3081533f70 98 */
shintamainjp 2:9e3081533f70 99 void display_data(uint8_t *buf, int bitlength) {
shintamainjp 2:9e3081533f70 100 const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
shintamainjp 2:9e3081533f70 101 for (int i = 0; i < n; i++) {
jksoft 6:d1233e2387f9 102 pc.printf("%02X", buf[i]);
shintamainjp 2:9e3081533f70 103 }
shintamainjp 2:9e3081533f70 104 for (int i = 0; i < 8 - n; i++) {
jksoft 6:d1233e2387f9 105 pc.printf("--");
shintamainjp 2:9e3081533f70 106 }
shintamainjp 2:9e3081533f70 107 }
shintamainjp 2:9e3081533f70 108
shintamainjp 2:9e3081533f70 109 /**
shintamainjp 2:9e3081533f70 110 * Entry point.
shintamainjp 2:9e3081533f70 111 */
shintamainjp 2:9e3081533f70 112 int main(void) {
shintamainjp 2:9e3081533f70 113
shintamainjp 2:9e3081533f70 114
shintamainjp 2:9e3081533f70 115 /*
shintamainjp 2:9e3081533f70 116 * Splash.
shintamainjp 2:9e3081533f70 117 */
jksoft 6:d1233e2387f9 118 pc.printf("RemoteIR \r\n");
jksoft 6:d1233e2387f9 119 pc.printf("Program example.\r\n");
shintamainjp 2:9e3081533f70 120 wait(3);
shintamainjp 2:9e3081533f70 121
shintamainjp 2:9e3081533f70 122 /*
shintamainjp 2:9e3081533f70 123 * Initialize.
shintamainjp 2:9e3081533f70 124 */
jksoft 6:d1233e2387f9 125
jksoft 6:d1233e2387f9 126 pc.printf("Press a button \r\n");
jksoft 6:d1233e2387f9 127 pc.printf("on a controller.\r\n");
shintamainjp 2:9e3081533f70 128
shintamainjp 2:9e3081533f70 129 /*
shintamainjp 2:9e3081533f70 130 * Execute.
shintamainjp 2:9e3081533f70 131 */
shintamainjp 2:9e3081533f70 132 while (1) {
shintamainjp 2:9e3081533f70 133 uint8_t buf1[32];
shintamainjp 2:9e3081533f70 134 uint8_t buf2[32];
shintamainjp 2:9e3081533f70 135 int bitlength1;
shintamainjp 2:9e3081533f70 136 int bitlength2;
shintamainjp 2:9e3081533f70 137 RemoteIR::Format format;
shintamainjp 2:9e3081533f70 138
shintamainjp 2:9e3081533f70 139 memset(buf1, 0x00, sizeof(buf1));
shintamainjp 2:9e3081533f70 140 memset(buf2, 0x00, sizeof(buf2));
shintamainjp 2:9e3081533f70 141
shintamainjp 2:9e3081533f70 142 {
shintamainjp 2:9e3081533f70 143 bitlength1 = receive(&format, buf1, sizeof(buf1));
shintamainjp 2:9e3081533f70 144 if (bitlength1 < 0) {
shintamainjp 2:9e3081533f70 145 continue;
shintamainjp 2:9e3081533f70 146 }
shintamainjp 2:9e3081533f70 147 display_status("RECV", bitlength1);
shintamainjp 2:9e3081533f70 148 display_data(buf1, bitlength1);
shintamainjp 2:9e3081533f70 149 display_format(format);
shintamainjp 2:9e3081533f70 150 }
shintamainjp 2:9e3081533f70 151
shintamainjp 2:9e3081533f70 152 #if TEST_LOOP_BACK
shintamainjp 2:9e3081533f70 153 wait_ms(100);
shintamainjp 2:9e3081533f70 154
shintamainjp 2:9e3081533f70 155 {
shintamainjp 2:9e3081533f70 156 bitlength1 = transmit(format, buf1, bitlength1);
shintamainjp 2:9e3081533f70 157 if (bitlength1 < 0) {
shintamainjp 2:9e3081533f70 158 continue;
shintamainjp 2:9e3081533f70 159 }
shintamainjp 2:9e3081533f70 160 display_status("TRAN", bitlength1);
shintamainjp 2:9e3081533f70 161 display_data(buf1, bitlength1);
shintamainjp 2:9e3081533f70 162 display_format(format);
shintamainjp 2:9e3081533f70 163 }
shintamainjp 2:9e3081533f70 164
shintamainjp 2:9e3081533f70 165 wait_ms(100);
shintamainjp 2:9e3081533f70 166
shintamainjp 2:9e3081533f70 167 {
shintamainjp 2:9e3081533f70 168 bitlength2 = receive(&format, buf2, sizeof(buf2));
shintamainjp 2:9e3081533f70 169 if (bitlength2 < 0) {
shintamainjp 2:9e3081533f70 170 continue;
shintamainjp 2:9e3081533f70 171 }
shintamainjp 2:9e3081533f70 172 display_status("RECV", bitlength2);
shintamainjp 2:9e3081533f70 173 display_data(buf2, bitlength2);
shintamainjp 2:9e3081533f70 174 display_format(format);
shintamainjp 2:9e3081533f70 175 }
shintamainjp 2:9e3081533f70 176
shintamainjp 2:9e3081533f70 177 wait_ms(100);
shintamainjp 2:9e3081533f70 178
shintamainjp 2:9e3081533f70 179 {
shintamainjp 2:9e3081533f70 180 for (int i = 0; i < sizeof(buf1); i++) {
shintamainjp 2:9e3081533f70 181 if (buf1[i] != buf2[i]) {
shintamainjp 2:9e3081533f70 182 display_status("CPERR", bitlength2);
shintamainjp 2:9e3081533f70 183 wait(1);
shintamainjp 2:9e3081533f70 184 continue;
shintamainjp 2:9e3081533f70 185 }
shintamainjp 2:9e3081533f70 186 }
shintamainjp 2:9e3081533f70 187 }
shintamainjp 2:9e3081533f70 188 #endif
shintamainjp 2:9e3081533f70 189 }
shintamainjp 0:d081f6c767da 190 }