diff options
Diffstat (limited to 'arduino/libraries/Bluefruit52Lib/src/bluefruit.h')
-rwxr-xr-x | arduino/libraries/Bluefruit52Lib/src/bluefruit.h | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/arduino/libraries/Bluefruit52Lib/src/bluefruit.h b/arduino/libraries/Bluefruit52Lib/src/bluefruit.h new file mode 100755 index 0000000..c33f510 --- /dev/null +++ b/arduino/libraries/Bluefruit52Lib/src/bluefruit.h @@ -0,0 +1,247 @@ +/**************************************************************************/ +/*! + @file bluefruit.h + @author hathach (tinyusb.org) + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2018, Adafruit Industries (adafruit.com) + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ +#ifndef BLUEFRUIT_H_ +#define BLUEFRUIT_H_ + +#include <Arduino.h> +#include "bluefruit_common.h" + +#define CFG_ADV_BLINKY_INTERVAL 500 + +/* Note changing these parameters will affect APP_RAM_BASE + * --> need to update RAM region in linker file + * - BLE_GATT_ATT_MTU_MAX from 23 (default) to 247 + */ +#define BLE_GATT_ATT_MTU_MAX 247 +#define BLE_PRPH_MAX_CONN 1 +#define BLE_CENTRAL_MAX_CONN 4 +#define BLE_CENTRAL_MAX_SECURE_CONN 1 // should be enough + +#define BLE_MAX_CONN (BLE_CENTRAL_MAX_CONN+BLE_PRPH_MAX_CONN) + +#include "BLEUuid.h" +#include "BLEAdvertising.h" +#include "BLECharacteristic.h" +#include "BLEService.h" + +#include "BLEScanner.h" +#include "BLECentral.h" +#include "BLEClientCharacteristic.h" +#include "BLEClientService.h" +#include "BLEDiscovery.h" +#include "BLEGap.h" +#include "BLEGatt.h" + +// Services +#include "services/BLEDis.h" +#include "services/BLEDfu.h" +#include "services/BLEUart.h" +#include "services/BLEBas.h" +#include "services/BLEBeacon.h" +#include "services/BLEHidGeneric.h" +#include "services/BLEHidAdafruit.h" +#include "services/BLEMidi.h" +#include "services/EddyStone.h" + +#include "clients/BLEAncs.h" +#include "clients/BLEClientUart.h" +#include "clients/BLEClientDis.h" +#include "clients/BLEClientCts.h" +#include "clients/BLEClientHidAdafruit.h" +#include "clients/BLEClientBas.h" + +#include "utility/AdaCallback.h" +#include "utility/bonding.h" + +enum +{ + BANDWIDTH_AUTO = 0, + BANDWIDTH_LOW, + BANDWIDTH_NORMAL, + BANDWIDTH_HIGH, + BANDWIDTH_MAX, +}; + +extern "C" +{ + void SD_EVT_IRQHandler(void); +} + +class AdafruitBluefruit +{ + public: + AdafruitBluefruit(void); // Constructor + + /*------------------------------------------------------------------*/ + /* Lower Level Classes (Bluefruit.Advertising.*, etc.) + *------------------------------------------------------------------*/ + BLEGap Gap; + BLEGatt Gatt; + + BLEAdvertising Advertising; + BLEAdvertisingData ScanResponse; + BLEScanner Scanner; + BLECentral Central; + BLEDiscovery Discovery; + + /*------------------------------------------------------------------*/ + /* SoftDevice Configure Functions, must call before begin(). + * These function affect the SRAM consumed by SoftDevice. + *------------------------------------------------------------------*/ + void configServiceChanged (bool changed); + void configUuid128Count (uint8_t uuid128_max); + void configAttrTableSize (uint32_t attr_table_size); + + // Config Bandwidth for connections + void configPrphConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize); + void configCentralConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize); + + // Convenient function to config connection + void configPrphBandwidth (uint8_t bw); + void configCentralBandwidth(uint8_t bw); + + err_t begin(uint8_t prph_count = 1, uint8_t central_count = 0); + + /*------------------------------------------------------------------*/ + /* General Functions + *------------------------------------------------------------------*/ + void setName (const char* str); + uint8_t getName (char* name, uint16_t bufsize); + + bool setTxPower (int8_t power); + int8_t getTxPower (void); + + bool setApperance (uint16_t appear); + uint16_t getApperance (void); + + void autoConnLed (bool enabled); + void setConnLedInterval (uint32_t ms); + + /*------------------------------------------------------------------*/ + /* GAP, Connections and Bonding + *------------------------------------------------------------------*/ + bool connected (void); + bool disconnect (void); + + bool setConnInterval (uint16_t min, uint16_t max); + bool setConnIntervalMS (uint16_t min_ms, uint16_t max_ms); + bool setConnSupervisionTimeout(uint16_t timeout); + bool setConnSupervisionTimeoutMS(uint16_t timeout_ms); + + uint16_t connHandle (void); + bool connPaired (void); + uint16_t connInterval (void); + + bool requestPairing (void); + void clearBonds (void); + + ble_gap_addr_t getPeerAddr (void); + uint8_t getPeerAddr (uint8_t addr[6]); + + void printInfo(void); + + /*------------------------------------------------------------------*/ + /* Callbacks + *------------------------------------------------------------------*/ + void setConnectCallback ( BLEGap::connect_callback_t fp); + void setDisconnectCallback( BLEGap::disconnect_callback_t fp); + + void setEventCallback ( void (*fp) (ble_evt_t*) ); + + COMMENT_OUT ( bool setPIN(const char* pin); ) + + /*------------------------------------------------------------------*/ + /* INTERNAL USAGE ONLY + * Although declare as public, it is meant to be invoked by internal + * code. User should not call these directly + *------------------------------------------------------------------*/ + void _startConnLed (void); + void _stopConnLed (void); + void _setConnLed (bool on_off); + + private: + /*------------- SoftDevice Configuration -------------*/ + struct { + uint32_t attr_table_size; + uint8_t service_changed; + uint8_t uuid128_max; + }_sd_cfg; + + uint8_t _prph_count; + uint8_t _central_count; + + // Peripheral Preferred Connection Parameters (PPCP) + ble_gap_conn_params_t _ppcp; + + // Actual connection interval in use + uint16_t _conn_interval; + + int8_t _tx_power; + + SemaphoreHandle_t _ble_event_sem; + SemaphoreHandle_t _soc_event_sem; + + TimerHandle_t _led_blink_th; + bool _led_conn; + + BLEDfu _dfu_svc; + + uint16_t _conn_hdl; + + BLEGap::connect_callback_t _connect_cb; + BLEGap::disconnect_callback_t _disconnect_cb; + + void (*_event_cb) (ble_evt_t*); + +COMMENT_OUT( + uint8_t _auth_type; + char _pin[BLE_GAP_PASSKEY_LEN]; +) + + /*------------------------------------------------------------------*/ + /* INTERNAL USAGE ONLY + *------------------------------------------------------------------*/ + void _ble_handler(ble_evt_t* evt); + + friend void SD_EVT_IRQHandler(void); + friend void adafruit_ble_task(void* arg); + friend void adafruit_soc_task(void* arg); + friend class BLECentral; +}; + +extern AdafruitBluefruit Bluefruit; + +#endif |