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.

Dependencies:   FIFO

Dependents:   Brute_TS_Controller_2018_11

Revision:
4:c7555051a851
Parent:
3:722056213fa4
Child:
5:a50cdaa90d6a
--- a/AsyncSerial.hpp	Thu Mar 30 02:27:53 2017 +0000
+++ b/AsyncSerial.hpp	Thu Mar 30 12:58:56 2017 +0000
@@ -1,139 +1,154 @@
-// -*- 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);
+// -*- coding: utf-8 -*-
+/**
+ @file		AsyncSerial.cpp
+ @brief	 	Asynchronous (Non-brocking) Serial Communication library with variable length software ring buffer (FIFO). You can use also RawSerial Library's method. You can set the baudrate of the serial communication when instantiating.
+ 
+ @author	T.Kawamura
+ @version	1.0
+ @date		2017-03-29	T.Kawamura	Written for C++/mbed.
+ @date		2017-03-30	T.Kawamura	Bug Fixed: Cannot use format(), baud().
+
+ @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	Baudrate (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 int readable(void);
+
+	/**
+		 @brief	Check writeable or not.
+		 @param	No Parameters.
+		 @retval	1	Always return 1 because this library provides asynchronous serial.
+	*/
+	virtual int writeable(void);
+
+	/**
+		 @brief	Get 1byte from the AsyncSerial port.
+		 @param	No parameters.
+		 @retval	All Got Data
+		 @retval	0	Error.
+	*/
+	virtual int getc(void);
+
+	/**
+		 @brief	Peek 1byte from the AsyncSerial port.
+		 @param	No parameters.
+		 @retval	ALL	Got Data
+		 @retval	0	Error.
+	*/
+	virtual int peekc(void);
+
+	/**
+		 @brief	Put 1byte to the AsyncSerial port.
+		 @param	data	A Data for put
+		 @retval	0	Error.
+		 @retval	1	Success.
+	*/
+	virtual int putc(int c);
+
+	/**
+		 @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 int 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 int 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 int write(const uint8_t *buffer, int length);
+
+	/**
+		 @brief	Clear the rx buffer by compulsion.
+		 @param	No parameters.
+	*/
+	virtual void flush(void);
+
+	/**
+		 @brief	Wait until finish all sending.
+		 @param	No parameters.
+	*/
+	virtual void wait(void);
+
+	/**
+		 @brief	Set bits, parity and stop bits.
+		 @param	bits	Bits (5 ~ 8)
+		 @param	parity	Parity
+		 @param	stop_bits	Stop bits (1 or 2)
+	*/
+	virtual void format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1);
+
+	/**
+		 @brief	Set baud rate.
+		 @param	baudrate	baudrate (bps).
+	*/
+	virtual void baud(int baudrate);
+
+};
+
+#endif
 
-	/**
-		 @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
-