ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

main.cpp

Committer:
cristea
Date:
2014-08-06
Revision:
18:e96a99547f54
Parent:
17:6375c75a88a5

File content as of revision 18:e96a99547f54:

/**
 * Copyright 2014 Nordic Semiconductor
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

#include "mbed.h"
#include "IRSender.h"

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

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

IRSender irpin(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 200
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");
            irpin.irSeq(period, receiveIndex, 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());
}