Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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