Test for Receiving IR

Dependencies:   mbed TextLCD RemoteIR

Committer:
furutani
Date:
Tue Jul 16 06:45:28 2019 +0000
Revision:
6:365e9629ef25
Parent:
5:40750d5779ca
test for receive IR.

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 #include "TextLCD.h"
shintamainjp 2:9e3081533f70 13
shintamainjp 4:a96406427829 14 #define TEST_LOOP_BACK 0
shintamainjp 2:9e3081533f70 15
shintamainjp 3:10d1579b495c 16 ReceiverIR ir_rx(p15);
shintamainjp 2:9e3081533f70 17 TransmitterIR ir_tx(p21);
shintamainjp 2:9e3081533f70 18 BusOut led(LED4, LED3, LED2, LED1);
shintamainjp 2:9e3081533f70 19 Ticker ledTicker;
shintamainjp 2:9e3081533f70 20
shintamainjp 2:9e3081533f70 21 /**
shintamainjp 2:9e3081533f70 22 * Receive.
shintamainjp 2:9e3081533f70 23 *
shintamainjp 2:9e3081533f70 24 * @param format Pointer to a format.
shintamainjp 2:9e3081533f70 25 * @param buf Pointer to a buffer.
shintamainjp 2:9e3081533f70 26 * @param bufsiz Size of the buffer.
shintamainjp 2:9e3081533f70 27 *
shintamainjp 2:9e3081533f70 28 * @return Bit length of the received data.
shintamainjp 2:9e3081533f70 29 */
shintamainjp 2:9e3081533f70 30 int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
shintamainjp 2:9e3081533f70 31 int cnt = 0;
shintamainjp 2:9e3081533f70 32 while (ir_rx.getState() != ReceiverIR::Received) {
shintamainjp 2:9e3081533f70 33 cnt++;
shintamainjp 2:9e3081533f70 34 if (timeout < cnt) {
shintamainjp 2:9e3081533f70 35 return -1;
shintamainjp 2:9e3081533f70 36 }
shintamainjp 2:9e3081533f70 37 }
shintamainjp 2:9e3081533f70 38 return ir_rx.getData(format, buf, bufsiz * 8);
shintamainjp 2:9e3081533f70 39 }
shintamainjp 2:9e3081533f70 40
shintamainjp 2:9e3081533f70 41 /**
shintamainjp 2:9e3081533f70 42 * Display a current status.
shintamainjp 2:9e3081533f70 43 */
shintamainjp 2:9e3081533f70 44 void display_status(char *status, int bitlength) {
furutani 6:365e9629ef25 45 printf("%-5.5s:%02d\r\n", status, bitlength);
shintamainjp 2:9e3081533f70 46 }
shintamainjp 2:9e3081533f70 47
shintamainjp 2:9e3081533f70 48 /**
shintamainjp 2:9e3081533f70 49 * Display a format of a data.
shintamainjp 2:9e3081533f70 50 */
shintamainjp 2:9e3081533f70 51 void display_format(RemoteIR::Format format) {
shintamainjp 2:9e3081533f70 52 switch (format) {
shintamainjp 2:9e3081533f70 53 case RemoteIR::UNKNOWN:
furutani 6:365e9629ef25 54 printf("????????\r\n");
shintamainjp 2:9e3081533f70 55 break;
shintamainjp 2:9e3081533f70 56 case RemoteIR::NEC:
furutani 6:365e9629ef25 57 printf("NEC \r\n");
shintamainjp 2:9e3081533f70 58 break;
shintamainjp 2:9e3081533f70 59 case RemoteIR::NEC_REPEAT:
furutani 6:365e9629ef25 60 printf("NEC (R)\r\n");
shintamainjp 2:9e3081533f70 61 break;
shintamainjp 2:9e3081533f70 62 case RemoteIR::AEHA:
furutani 6:365e9629ef25 63 printf("AEHA \r\n");
shintamainjp 2:9e3081533f70 64 break;
shintamainjp 2:9e3081533f70 65 case RemoteIR::AEHA_REPEAT:
furutani 6:365e9629ef25 66 printf("AEHA (R)\r\n");
shintamainjp 2:9e3081533f70 67 break;
shintamainjp 2:9e3081533f70 68 case RemoteIR::SONY:
furutani 6:365e9629ef25 69 printf("SONY \r\n");
shintamainjp 2:9e3081533f70 70 break;
shintamainjp 2:9e3081533f70 71 }
shintamainjp 2:9e3081533f70 72 }
shintamainjp 2:9e3081533f70 73
shintamainjp 2:9e3081533f70 74 /**
shintamainjp 2:9e3081533f70 75 * Display a data.
shintamainjp 2:9e3081533f70 76 *
shintamainjp 2:9e3081533f70 77 * @param buf Pointer to a buffer.
shintamainjp 2:9e3081533f70 78 * @param bitlength Bit length of a data.
shintamainjp 2:9e3081533f70 79 */
shintamainjp 2:9e3081533f70 80 void display_data(uint8_t *buf, int bitlength) {
shintamainjp 2:9e3081533f70 81 const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
shintamainjp 2:9e3081533f70 82 for (int i = 0; i < n; i++) {
furutani 6:365e9629ef25 83 printf("%02X", buf[i]);
shintamainjp 2:9e3081533f70 84 }
shintamainjp 2:9e3081533f70 85 for (int i = 0; i < 8 - n; i++) {
furutani 6:365e9629ef25 86 printf("--");
shintamainjp 2:9e3081533f70 87 }
furutani 6:365e9629ef25 88 printf("\r\n");
shintamainjp 2:9e3081533f70 89 }
shintamainjp 2:9e3081533f70 90
shintamainjp 2:9e3081533f70 91 void ledfunc(void) {
shintamainjp 2:9e3081533f70 92 led = led + 1;
shintamainjp 2:9e3081533f70 93 }
shintamainjp 2:9e3081533f70 94
shintamainjp 2:9e3081533f70 95 /**
shintamainjp 2:9e3081533f70 96 * Entry point.
shintamainjp 2:9e3081533f70 97 */
shintamainjp 2:9e3081533f70 98 int main(void) {
shintamainjp 2:9e3081533f70 99
shintamainjp 2:9e3081533f70 100 ledTicker.attach(&ledfunc, 0.5);
shintamainjp 2:9e3081533f70 101
shintamainjp 2:9e3081533f70 102 /*
shintamainjp 2:9e3081533f70 103 * Splash.
shintamainjp 2:9e3081533f70 104 */
furutani 6:365e9629ef25 105 printf("RemoteIR \r\n");
furutani 6:365e9629ef25 106 printf("Program example.\r\n");
shintamainjp 2:9e3081533f70 107
shintamainjp 2:9e3081533f70 108 /*
shintamainjp 2:9e3081533f70 109 * Initialize.
shintamainjp 2:9e3081533f70 110 */
shintamainjp 2:9e3081533f70 111 /*
shintamainjp 2:9e3081533f70 112 * Execute.
shintamainjp 2:9e3081533f70 113 */
shintamainjp 2:9e3081533f70 114 while (1) {
shintamainjp 2:9e3081533f70 115 uint8_t buf1[32];
shintamainjp 2:9e3081533f70 116 uint8_t buf2[32];
shintamainjp 2:9e3081533f70 117 int bitlength1;
shintamainjp 2:9e3081533f70 118 int bitlength2;
shintamainjp 2:9e3081533f70 119 RemoteIR::Format format;
shintamainjp 2:9e3081533f70 120
shintamainjp 2:9e3081533f70 121 memset(buf1, 0x00, sizeof(buf1));
shintamainjp 2:9e3081533f70 122 memset(buf2, 0x00, sizeof(buf2));
shintamainjp 2:9e3081533f70 123
shintamainjp 2:9e3081533f70 124 {
shintamainjp 2:9e3081533f70 125 bitlength1 = receive(&format, buf1, sizeof(buf1));
shintamainjp 2:9e3081533f70 126 if (bitlength1 < 0) {
shintamainjp 2:9e3081533f70 127 continue;
shintamainjp 2:9e3081533f70 128 }
shintamainjp 2:9e3081533f70 129 display_status("RECV", bitlength1);
shintamainjp 2:9e3081533f70 130 display_data(buf1, bitlength1);
shintamainjp 2:9e3081533f70 131 display_format(format);
shintamainjp 2:9e3081533f70 132 }
shintamainjp 2:9e3081533f70 133 }
shintamainjp 0:d081f6c767da 134 }