added debugging

Fork of BLE_nRF8001 by RedBearLab

BLE_nRF8001/BLEPeripheral.h

Committer:
RedBearLab
Date:
2014-10-17
Revision:
0:075ea2812998

File content as of revision 0:075ea2812998:

#ifndef _BLE_PERIPHERAL_H_
#define _BLE_PERIPHERAL_H_

#include "Arduino.h"

#include "nRF8001.h"

#include "BLEAttribute.h"
#include "BLECentral.h"
#include "BLEDescriptor.h"
#include "BLEService.h"
#include "BLETypedCharacteristics.h"

enum BLEPeripheralEvent {
  BLEConnected = 0,
  BLEDisconnected = 1
};

typedef void (*BLEPeripheralEventHandler)(BLECentral& central);

class BLEPeripheral : public nRF8001EventListener, public BLECharacteristicValueChangeListener
{
  public:
    BLEPeripheral(DigitalInOut *req, DigitalInOut *rdy, DigitalInOut *rst);
    virtual ~BLEPeripheral();

    void begin();
    void poll();

    void setAdvertisedServiceUuid(const char* advertisedServiceUuid);
    void setManufacturerData(const unsigned char manufacturerData[], unsigned char manufacturerDataLength);
    void setLocalName(const char *localName);

    void setDeviceName(const char* deviceName);
    void setAppearance(unsigned short appearance);

    void addAttribute(BLEAttribute& attribute);

    void disconnect();

    BLECentral central();
    bool connected();

    void setEventHandler(BLEPeripheralEvent event, BLEPeripheralEventHandler eventHandler);

  protected:
    bool characteristicValueChanged(BLECharacteristic& characteristic);
    bool canNotifyCharacteristic(BLECharacteristic& characteristic);
    bool canIndicateCharacteristic(BLECharacteristic& characteristic);

    virtual void nRF8001Connected(nRF8001& nRF8001, const unsigned char* address);
    virtual void nRF8001Disconnected(nRF8001& nRF8001);

    virtual void nRF8001CharacteristicValueChanged(nRF8001& nRF8001, BLECharacteristic& characteristic, const unsigned char* value, unsigned char valueLength);
    virtual void nRF8001CharacteristicSubscribedChanged(nRF8001& nRF8001, BLECharacteristic& characteristic, bool subscribed);

    virtual void nRF8001AddressReceived(nRF8001& nRF8001, const unsigned char* address);
    virtual void nRF8001TemperatureReceived(nRF8001& nRF8001, float temperature);
    virtual void nRF8001BatteryLevelReceived(nRF8001& nRF8001, float batteryLevel);

  private:
    nRF8001                        _nRF8001;

    const char*                    _advertisedServiceUuid;
    const unsigned char*           _manufacturerData;
    unsigned char                  _manufacturerDataLength;
    const char*                    _localName;

    BLEAttribute**                 _attributes;
    unsigned char                  _numAttributes;

    BLEService                     _genericAccessService;
    BLECharacteristic              _deviceNameCharacteristic;
    BLECharacteristic              _appearanceCharacteristic;
    BLEService                     _genericAttributeService;
    BLECharacteristic              _servicesChangedCharacteristic;

    BLECentral                     _central;
    BLEPeripheralEventHandler      _eventHandlers[2];
};

#endif