added debugging

Fork of BLE_nRF8001 by RedBearLab

BLE_nRF8001/BLECharacteristic.cpp

Committer:
jn80842
Date:
2014-11-10
Revision:
2:7805a5595aab
Parent:
0:075ea2812998

File content as of revision 2:7805a5595aab:

#include "Arduino.h"
#include "BLECharacteristic.h"

BLECharacteristic::BLECharacteristic(const char* uuid, unsigned char properties, unsigned char valueSize, bool fixedLength) :
  BLEAttribute(uuid, BLETypeCharacteristic),
  _properties(properties),
  _valueSize(min(valueSize, BLE_ATTRIBUTE_MAX_VALUE_LENGTH)),
  _valueLength(0),
  _fixedLength(fixedLength),
  _written(false),
  _subscribed(false),
  _listener(NULL)
{
  memset(this->_eventHandlers, 0x00, sizeof(this->_eventHandlers));

  _value = (unsigned char*)malloc(this->_valueSize);
}

BLECharacteristic::BLECharacteristic(const char* uuid, unsigned char properties, const char* value, bool fixedLength) :
  BLEAttribute(uuid, BLETypeCharacteristic),
  _properties(properties),
  _valueSize(min(strlen(value), BLE_ATTRIBUTE_MAX_VALUE_LENGTH)),
  _valueLength(0),
  _fixedLength(fixedLength),
  _written(false),
  _subscribed(false),
  _listener(NULL)
{
  memset(this->_eventHandlers, 0x00, sizeof(this->_eventHandlers));

  _value = (unsigned char*)malloc(this->_valueSize);
  this->setValue(value);
}

BLECharacteristic::~BLECharacteristic() {
  if (this->_value) {
    free(this->_value);
  }
}

unsigned char BLECharacteristic::properties() const {
  return this->_properties;
}

unsigned char BLECharacteristic::valueSize() const {
  return this->_valueSize;
}

unsigned const char* BLECharacteristic::value() const {
  return this->_value;
}

unsigned char BLECharacteristic::valueLength() const {
  return this->_valueLength;
}

bool BLECharacteristic::fixedLength() const {
  return this->_fixedLength;
}

bool BLECharacteristic::setValue(const unsigned char value[], unsigned char length) {
  bool success = true;

  this->_valueLength = min(length, this->_valueSize);

  memcpy(this->_value, value, this->_valueLength);

  if (this->_listener) {
    success = this->_listener->characteristicValueChanged(*this);
  }

  return success;
}

bool BLECharacteristic::setValue(const char* value) {
  return this->setValue((const unsigned char *)value, strlen(value));
}

bool BLECharacteristic::written() {
  bool written = this->_written;

  if (written) {
    this->_written = false;
  }

  return written;
}

void BLECharacteristic::setValue(BLECentral& central, const unsigned char value[], unsigned char length) {
  this->setValue(value, length);

  this->_written = true;

  BLECharacteristicEventHandler eventHandler = this->_eventHandlers[BLEWritten];
  if (eventHandler) {
    eventHandler(central, *this);
  }
}

bool BLECharacteristic::subscribed() {
  return this->_subscribed;
}

void BLECharacteristic::setSubscribed(BLECentral& central, bool subscribed) {
  this->_subscribed = subscribed;

  BLECharacteristicEventHandler eventHandler = this->_eventHandlers[subscribed ? BLESubscribed : BLEUnsubscribed];

  if (eventHandler) {
    eventHandler(central, *this);
  }
}

bool BLECharacteristic::canNotify() {
  return (this->_listener) ? this->_listener->canNotifyCharacteristic(*this) : false;
}

bool BLECharacteristic::canIndicate() {
  return (this->_listener) ? this->_listener->canIndicateCharacteristic(*this) : false;
}

void BLECharacteristic::setEventHandler(BLECharacteristicEvent event, BLECharacteristicEventHandler eventHandler) {
  if (event < sizeof(this->_eventHandlers)) {
    this->_eventHandlers[event] = eventHandler;
  }
}

void BLECharacteristic::setValueChangeListener(BLECharacteristicValueChangeListener& listener) {
  this->_listener = &listener;
}