Only for F446RE & L432KC. Use CircularBuffer.Change Callback method.
Dependents: Test_SoftSerial_for_L432KC Test_SoftSerial
Diff: BufferedSoftSerial.h
- Revision:
- 11:f186cc69acdf
- Parent:
- 9:5b069a1896f9
- Child:
- 12:7ab9ab7210e7
--- a/BufferedSoftSerial.h Sat Jul 05 13:23:03 2014 +0000 +++ b/BufferedSoftSerial.h Sun May 10 08:10:29 2020 +0000 @@ -1,10 +1,11 @@ /** * @file BufferedSoftSerial.h - * @brief Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX + * @brief Software Buffer + * - Extends mbed Serial functionallity adding irq driven TX and RX * @author sam grove * @version 1.0 - * @see + * @see * * Copyright (c) 2013 * @@ -21,11 +22,20 @@ * limitations under the License. */ +/* + Original Library by Erik- + https://os.mbed.com/users/Sissors/code/BufferedSoftSerial/ + + Modified by K.Arai / JH1PJL May 9th, 2020 + + modified parts + use CircularBuffer (mbed standard library) + */ + #ifndef BUFFEREDSOFTSERIAL_H #define BUFFEREDSOFTSERIAL_H - + #include "mbed.h" -#include "Buffer.h" #include "SoftSerial.h" /** A serial port (UART) for communication with other serial devices @@ -37,33 +47,34 @@ * however if you don't have spare ones, you can use this. It is advicable * to put the serial connection with highest speed to hardware serial. * - * If you lack RAM memory you can also use SoftSerial without this buffer around it. + * If you lack RAM memory you can also use SoftSerial + * without this buffer around it. * In that case it is fully blocking. * * Example: * @code * #include "mbed.h" * #include "BufferedSoftSerial.h" - * + * * SoftSerial block(USBTX, USBRX); -* BufferedSoftSerial buf(USBTX, USBRX); - * + * BufferedSoftSerial buf(D3, D2); + * * int main() * { * while(1) { * Timer s; - * + * * s.start(); * buf.printf("Hello World - buffered\r\n"); * int buffered_time = s.read_us(); * wait(0.1f); // give time for the buffer to empty - * + * * s.reset(); * block.printf("Hello World - blocking\r\n"); * int polled_time = s.read_us(); * s.stop(); * wait(0.1f); // give time for the buffer to empty - * + * * buf.printf("printf buffered took %d us\r\n", buffered_time); * buf.printf("printf blocking took %d us\r\n", polled_time); * wait(5); @@ -75,59 +86,62 @@ /** * @class BufferedSerial * @brief Software buffers and interrupt driven tx and rx for SoftSerial - */ -class BufferedSoftSerial : public SoftSerial + */ +class BufferedSoftSerial : public SoftSerial { private: - Buffer <char> _rxbuf; - Buffer <char> _txbuf; - - void rxIrq(void); - void txIrq(void); + CircularBuffer<char, 1024> _rxbuf; + CircularBuffer<char, 1024> _txbuf; + + void rx_Irq(void); + void tx_Irq(void); void prime(void); - + public: - /** Create a BufferedSoftSerial port, connected to the specified transmit and receive pins + /** Create a BufferedSoftSerial port, + * connected to the specified transmit and receive pins * @param tx Transmit pin * @param rx Receive pin * @note Either tx or rx may be specified as NC if unused */ BufferedSoftSerial(PinName tx, PinName rx, const char* name=NULL); - + /** Check on how many bytes are in the rx buffer * @return 1 if something exists, 0 otherwise */ virtual int readable(void); - + /** Check to see if the tx buffer has room - * @return 1 always has room and can overwrite previous content if too small / slow + * @return 1 always has room and can overwrite previous content + * if too small / slow */ virtual int writeable(void); - + /** Get a single byte from the BufferedSoftSerial Port. * Should check readable() before calling this. * @return A byte that came in on the BufferedSoftSerial Port */ virtual int getc(void); - + /** Write a single byte to the BufferedSoftSerial Port. * @param c The byte to write to the BufferedSoftSerial Port * @return The byte that was written to the BufferedSoftSerial Port Buffer */ virtual int putc(int c); - + /** Write a string to the BufferedSoftSerial Port. Must be NULL terminated * @param s The string to write to the Serial Port * @return The number of bytes written to the Serial Port Buffer */ virtual int puts(const char *s); - + /** Write a formatted string to the BufferedSoftSerial Port. - * @param format The string + format specifiers to write to the BufferedSoftSerial Port + * @param format The string + format specifiers to write + * to the BufferedSoftSerial Port * @return The number of bytes written to the Serial Port Buffer */ virtual int printf(const char* format, ...); - + /** Write data to the BufferedSoftSerial Port * @param s A pointer to data to send * @param length The amount of data being pointed to