QAQ ==!

Dependencies:   mbed QEI-1 nRF24L01P xiugai

drivers/ir.cpp

Committer:
AlexQian
Date:
2019-12-14
Revision:
15:934289377f7a
Parent:
9:d03b1af2b8d8

File content as of revision 15:934289377f7a:

#include "sensors.h"
#include "ir.h"
#include "irda.h"
#include "eeprom.h"
#include <string.h>

#define IR_DATA_BYTES     112
#define TOTAL_IR_CHANNELS 18



//static uint16_t irData[TOTAL_IR_CHANNELS][IR_DATA_BYTES/sizeof(uint16_t)];
static czx_vu8 irda_data[IR_DATA_BYTES];
IRDA_io_t *IRDA_IO;
static EEPROM *pEEPROM;

void IR_Init(PinName scl, PinName sda, PinName busy, EEPROM &eeprom)
{
		if(IRDA_IO)
				delete IRDA_IO;
		IRDA_IO = new IRDA_io_t(scl, sda, busy);
		pEEPROM = &eeprom;
    IRDA_INIT();
}

int IR_StartLearning(uint8_t channel)
{
    MSG_DBG("Learning channel %d", channel);
		if(!IRDA_IO)
				return -1;
    if(channel >= TOTAL_IR_CHANNELS)
        return -1;

    IRDA_learn_start();
    while(!IRDA_BUSY_S()){
        //LED_BLUE(false);
        wait_ms(200);
        //LED_BLUE(true);
        wait_ms(200);
    }
    uint8_t len = IRDA_learn_data_in_out(irda_data);
    MSG_DBG("Learned, length=%d", len);
    if(!len)
        return len;

		/*
    FlashEEP_WriteHalfWords(
        (uint16_t*)irda_data,
        sizeof(irda_data)/sizeof(uint16_t),
        (uint32_t)irData[channel]
        );
		*/
		
		/*
		memcpy((void*)irData[channel], (void*)irda_data, sizeof(irda_data));
		*/
		
		pEEPROM->write(channel*IR_DATA_BYTES, (void*)irda_data, IR_DATA_BYTES);

    return len;
}

bool IR_Emit(uint8_t channel)
{
    MSG_DBG("Emit channel %d", channel);
		if(!IRDA_IO)
				return false;
    if(channel >= TOTAL_IR_CHANNELS)
        return false;
		/*
    IRDA_tx_data((czx_vu8*)irData[channel],sizeof(irData[channel]));
		*/
		
		/*
		memcpy((void*)irda_data, (void*)irData[channel], sizeof(irda_data));
		*/
		
		pEEPROM->read(channel*IR_DATA_BYTES, (void*)irda_data, IR_DATA_BYTES);

    IRDA_tx_data((czx_vu8*)irda_data, sizeof(irda_data));

    MSG_DBG("Emitted");

    return true;
}