ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

main.cpp

Committer:
sigveseb
Date:
2014-08-01
Revision:
13:f016a0bc4a7d
Parent:
5:3642c0af497e
Child:
14:b00d0c5ba8e3

File content as of revision 13:f016a0bc4a7d:

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

#define LOG_LEVEL_VERBOSE
#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  ");

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

#define COMMAND_BEGIN_CODE_TRANSMISSION 0
#define COMMAND_END_CODE_TRANSMISSION 1


void onCommandWrite(uint8_t* value) {
    LOG_VERBOSE("Got command: %i\n", value[0]);
    switch(value[0]) {
        case COMMAND_BEGIN_CODE_TRANSMISSION:
            receiveIndex = 0;
            break;
        case COMMAND_END_CODE_TRANSMISSION:
            LOG_INFO("Going to fire IR code...\n");
            txir.txSeq(period, 200, dataBuffer);
            LOG_INFO("Fire complete!\n");
            break;
    }
}


void onDataWrite(uint8_t* value) {
    LOG_VERBOSE("Got data, index: %i\n", receiveIndex);
    for(int i = 0; i < 20 && receiveIndex < 100; i += 2) {
        dataBuffer[receiveIndex++] = (value[i] << 8) | value[i + 1];
    }
}


void onPeriodWrite(uint8_t* value) {
    period = value[0];    
    LOG_VERBOSE("Period is now: %i\n", period);
}


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());
}