| 1 | #ifndef _BLE_SERIAL_H_ |
| 2 | #define _BLE_SERIAL_H_ |
| 3 | |
| 4 | #include <Arduino.h> |
| 5 | #include <BLEPeripheral.h> |
| 6 | |
| 7 | class BLESerial : public BLEPeripheral, public Stream { |
| 8 | public: |
| 9 | BLESerial(unsigned char req, unsigned char rdy, unsigned char rst); |
| 10 | |
| 11 | void begin(...); |
| 12 | void poll(); |
| 13 | void end(); |
| 14 | |
| 15 | virtual int available(void); |
| 16 | virtual int peek(void); |
| 17 | virtual int read(void); |
| 18 | virtual void flush(void); |
| 19 | virtual size_t write(uint8_t byte); |
| 20 | using Print::write; |
| 21 | virtual operator bool(); |
| 22 | |
| 23 | private: |
| 24 | unsigned long _flushed; |
| 25 | static BLESerial *_instance; |
| 26 | |
| 27 | size_t _rxHead; |
| 28 | size_t _rxTail; |
| 29 | size_t _rxCount() const; |
| 30 | uint8_t _rxBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH]; |
| 31 | size_t _txCount; |
| 32 | uint8_t _txBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH]; |
| 33 | |
| 34 | BLEService _uartService = |
| 35 | BLEService("6E400001-B5A3-F393-E0A9-E50E24DCCA9E"); |
| 36 | BLEDescriptor _uartNameDescriptor = BLEDescriptor("2901", "UART"); |
| 37 | BLECharacteristic _rxCharacteristic = BLECharacteristic( |
| 38 | "6E400002-B5A3-F393-E0A9-E50E24DCCA9E", BLEWriteWithoutResponse, |
| 39 | BLE_ATTRIBUTE_MAX_VALUE_LENGTH); |
| 40 | BLEDescriptor _rxNameDescriptor = |
| 41 | BLEDescriptor("2901", "RX - Receive Data (Write)"); |
| 42 | BLECharacteristic _txCharacteristic = |
| 43 | BLECharacteristic("6E400003-B5A3-F393-E0A9-E50E24DCCA9E", BLENotify, |
| 44 | BLE_ATTRIBUTE_MAX_VALUE_LENGTH); |
| 45 | BLEDescriptor _txNameDescriptor = |
| 46 | BLEDescriptor("2901", "TX - Transfer Data (Notify)"); |
| 47 | |
| 48 | void _received(const uint8_t *data, size_t size); |
| 49 | static void _received(BLECentral & /*central*/, |
| 50 | BLECharacteristic &rxCharacteristic); |
| 51 | }; |
| 52 | |
| 53 | #endif |