Asynchronous (Non-blocking) Serial Communication library with variable length software ring buffer (FIFO). You can use RawSerial Library's primary method. Operability confirmed on mbed 2.0.
Dependents: Brute_TS_Controller_2018_11
AsyncSerial.hpp
- Committer:
- babylonica
- Date:
- 2017-03-30
- Revision:
- 3:722056213fa4
- Parent:
- 1:d3af33dfc87d
- Child:
- 4:c7555051a851
File content as of revision 3:722056213fa4:
// -*- coding: utf-8 -*- /** @file AsyncSerial.hpp @brief Asynchronous (Non-blocking) Serial Communication library with variable length software ring buffer (FIFO). You can use also RawSerial Library's method. You can set the baud rate of the serial communication when instantiating. @author T.Kawamura @version 1.0 @date 2017-03-29 T.Kawamura Written for C++/mbed. @see Copyright (C) 2017 T.Kawamura. Released under the MIT license. http://opensource.org/licenses/mit-license.php */ #ifndef ASYNCSERIAL_H #define ASYNCSERIAL_H #include "mbed.h" #include "FIFO.hpp" #include <stdarg.h> #include <string.h> using namespace std; #define PRINTF_STRING_BUFFER_SIZE 256 /** @class AsyncSerial @brief Asynchronous Serial Communication with FIFO */ class AsyncSerial : public RawSerial{ private: // FIFO is uint8_t(unsigned char) buffer; FIFO<uint8_t> fifo_tx; FIFO<uint8_t> fifo_rx; bool Is_Serial_Sending; void ISR_TX(void); void ISR_RX(void); public: /** @brief Create a new AsyncSerial Port. @param txpin Tx pin name (Defined in PinName.h) @param rxpin Rx pin name (Defined in PinName.h) @param baudrate Baud rate (ex: 115200). Default value is 9600. @param buffer_size Buffer size. Default value is 256. (byte) */ AsyncSerial(PinName txpin, PinName rxpin, uint32_t baudrate=9600, uint32_t buffer_size=256); /** @brief Disable the AsyncSerial Port. @param No parameters. */ virtual ~AsyncSerial(void); /** @brief Get how many bytes are in the rx buffer. @param No parameters. @return Size of readable data. (byte) */ virtual uint32_t readable(void); /** @brief Check writeable or not. @param No Parameters. @retval 1 Always return 1 because this library provides asynchronous serial. */ virtual uint8_t writeable(void); /** @brief Get 1byte from the AsyncSerial port. @param No parameters. @retval All Got Data @retval 0 Error. */ virtual uint8_t getc(void); /** @brief Peek 1byte from the AsyncSerial port. @param No parameters. @retval ALL Got Data @retval 0 Error. */ virtual uint8_t peekc(void); /** @brief Put 1byte to the AsyncSerial port. @param data A Data for put @retval 0 Error. @retval 1 Success. */ virtual uint8_t putc(uint8_t data); /** @brief Write a string with new line. The string must be NULL terminated. @param *str A String for write (Must be NULL terminated). @retval 0 Error. @retval 1 Success. */ virtual uint8_t puts(const char *str); /** @brief Write a formatted string to the AsyncSerial port. @param *format A Formatted string for write. @retval 0 Error. @retval 1+ Wrote string size (byte). */ virtual uint16_t printf(const char *format, ...); /** @brief Write byte array to the AsyncSerial port. @param *s A pointer to the array for write. @param length Write size (byte). @retval 0 Error. @retval 1 Success. */ virtual uint8_t write(const uint8_t *s, uint16_t length); /** @brief Clear the rx buffer by compulsion. @param No parameters. */ virtual void flush(void); /** @brief Wait until finish all sending. @param No parameters. @return */ virtual void wait(void); }; #endif