#ifndef _BLE_SERIAL_H_ #define _BLE_SERIAL_H_ #include #include class BLESerial : public BLEPeripheral, public Stream { public: BLESerial(unsigned char req, unsigned char rdy, unsigned char rst); void begin(...); void poll(); void end(); virtual int available(void); virtual int peek(void); virtual int read(void); virtual void flush(void); virtual size_t write(uint8_t byte); using Print::write; virtual operator bool(); private: unsigned long _flushed; static BLESerial* _instance; size_t _rxHead; size_t _rxTail; size_t _rxCount() const; uint8_t _rxBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH]; size_t _txCount; uint8_t _txBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH]; BLEService _uartService = BLEService("6E400001-B5A3-F393-E0A9-E50E24DCCA9E"); BLEDescriptor _uartNameDescriptor = BLEDescriptor("2901", "UART"); BLECharacteristic _rxCharacteristic = BLECharacteristic("6E400002-B5A3-F393-E0A9-E50E24DCCA9E", BLEWriteWithoutResponse, BLE_ATTRIBUTE_MAX_VALUE_LENGTH); BLEDescriptor _rxNameDescriptor = BLEDescriptor("2901", "RX - Receive Data (Write)"); BLECharacteristic _txCharacteristic = BLECharacteristic("6E400003-B5A3-F393-E0A9-E50E24DCCA9E", BLENotify, BLE_ATTRIBUTE_MAX_VALUE_LENGTH); BLEDescriptor _txNameDescriptor = BLEDescriptor("2901", "TX - Transfer Data (Notify)"); void _received(const uint8_t* data, size_t size); static void _received(BLECentral& /*central*/, BLECharacteristic& rxCharacteristic); }; #endif