ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

main.cpp

Committer:
stiaje
Date:
2014-08-01
Revision:
15:cf6c517f31ad
Parent:
14:b00d0c5ba8e3
Parent:
12:a7d9b4f303fd
Child:
16:0891823672f4

File content as of revision 15:cf6c517f31ad:

#include "mbed.h"
#include "TxIR.hpp"

#define LOG_LEVEL_ERROR
#include "Log.h"
#include "Puck.h"

Puck* puck = &Puck::getPuck();

TxIR txir(p14);

const UUID IR_SERVICE_UUID = stringToUUID("bftj ir         ");
const UUID COMMAND_UUID    = stringToUUID("bftj ir command ");
const UUID DATA_UUID       = stringToUUID("bftj ir data    ");
const UUID PERIOD_UUID     = stringToUUID("bftj ir period  ");

#define DATA_BUFFER_SIZE 100
unsigned int dataBuffer[DATA_BUFFER_SIZE];
uint8_t period = 26;
int receiveIndex;

#define COMMAND_BEGIN_CODE_TRANSMISSION 0
#define COMMAND_END_CODE_TRANSMISSION 1

void onCommandWrite(uint8_t* value) {
    switch(value[0]) {
        case COMMAND_BEGIN_CODE_TRANSMISSION:
            receiveIndex = 0;
            break;
        case COMMAND_END_CODE_TRANSMISSION:
            puck->getBle().disconnect();
            LOG_INFO("Going to fire IR code...\n");
            txir.txSeq(period, DATA_BUFFER_SIZE, dataBuffer);
            LOG_INFO("Fire complete!\n");
            break;
    }
}


void onDataWrite(uint8_t* value) {
    for(int i = 0; i < 20 && receiveIndex < DATA_BUFFER_SIZE; i += 2) {
        dataBuffer[receiveIndex++] = (value[i] << 8) | value[i + 1];
    }
}


void onPeriodWrite(uint8_t* value) {
    period = value[0];    
}


int main() {
    puck->addCharacteristic(IR_SERVICE_UUID, COMMAND_UUID, 1);
    puck->addCharacteristic(IR_SERVICE_UUID, DATA_UUID, 20);
    puck->addCharacteristic(IR_SERVICE_UUID, PERIOD_UUID, 1);
    puck->init(0xABBA);

    puck->onCharacteristicWrite(&COMMAND_UUID, onCommandWrite);
    puck->onCharacteristicWrite(&DATA_UUID, onDataWrite);
    puck->onCharacteristicWrite(&PERIOD_UUID, onPeriodWrite);

    while (puck->drive());
}