added debugging

Fork of BLE_nRF8001 by RedBearLab

BLE_nRF8001/nRF8001.h

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

File content as of revision 2:7805a5595aab:

#ifndef _NRF_8001_H_
#define _NRF_8001_H_

#include "Arduino.h"

#include <utility/lib_aci.h>
#include <utility/aci_setup.h>

#include "BLEAttribute.h"
#include "BLECharacteristic.h"

class nRF8001;

class nRF8001EventListener
{
  public:
    virtual void nRF8001Connected(nRF8001& nRF8001, const unsigned char* address) = 0;
    virtual void nRF8001Disconnected(nRF8001& nRF8001) = 0;

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

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


class nRF8001
{
  friend class BLEPeripheral;

  protected:
    struct pipeInfo {
      BLECharacteristic* characteristic;

      unsigned short     valueHandle;
      unsigned short     configHandle;

      unsigned char      startPipe;
      unsigned char      txPipe;
      unsigned char      txAckPipe;
      unsigned char      rxPipe;
      unsigned char      rxAckPipe;
      unsigned char      setPipe;

      bool               txPipeOpen;
      bool               txAckPipeOpen;
    };

    nRF8001(DigitalInOut *req, DigitalInOut *rdy, DigitalInOut *rst);

    virtual ~nRF8001();

    void setEventListener(nRF8001EventListener* eventListener);

    void begin(const unsigned char* advertisementData,
                unsigned char advertisementDataLength,
                const unsigned char* scanData,
                unsigned char scanDataLength,
                BLEAttribute** attributes,
                unsigned char numAttributes);

    void poll();

    void disconnect();

    bool updateCharacteristicValue(BLECharacteristic& characteristic);
    bool canNotifyCharacteristic(BLECharacteristic& characteristic);
    bool canIndicateCharacteristic(BLECharacteristic& characteristic);

    void requestAddress();
    void requestTemperature();
    void requestBatteryLevel();

  private:
    void waitForSetupMode();
    void sendSetupMessage(hal_aci_data_t* data);
    void sendCrc();

  private:
    struct aci_state_t          _aciState;
    hal_aci_evt_t               _aciData;

    struct pipeInfo*            _pipeInfo;
    unsigned char               _numPipeInfo;

    unsigned short              _crcSeed;

    nRF8001EventListener*       _eventListener;
};

#endif