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.
BufferedSerial.h
00001 00002 /** 00003 * @file BufferedSerial.h 00004 * @brief Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX 00005 * @author sam grove 00006 * @version 1.0 00007 * @see 00008 * 00009 * Copyright (c) 2013 00010 * 00011 * Licensed under the Apache License, Version 2.0 (the "License"); 00012 * you may not use this file except in compliance with the License. 00013 * You may obtain a copy of the License at 00014 * 00015 * http://www.apache.org/licenses/LICENSE-2.0 00016 * 00017 * Unless required by applicable law or agreed to in writing, software 00018 * distributed under the License is distributed on an "AS IS" BASIS, 00019 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00020 * See the License for the specific language governing permissions and 00021 * limitations under the License. 00022 */ 00023 00024 #ifndef BUFFEREDSERIAL_H 00025 #define BUFFEREDSERIAL_H 00026 00027 #include "mbed.h" 00028 #include "Buffer.h" 00029 00030 /** A serial port (UART) for communication with other serial devices 00031 * 00032 * Can be used for Full Duplex communication, or Simplex by specifying 00033 * one pin as NC (Not Connected) 00034 * 00035 * Example: 00036 * @code 00037 * #include "mbed.h" 00038 * #include "BufferedSerial.h" 00039 * 00040 * BufferedSerial pc(USBTX, USBRX); 00041 * 00042 * int main() 00043 * { 00044 * while(1) 00045 * { 00046 * Timer s; 00047 * 00048 * s.start(); 00049 * pc.printf("Hello World - buffered\n"); 00050 * int buffered_time = s.read_us(); 00051 * wait(0.1f); // give time for the buffer to empty 00052 * 00053 * s.reset(); 00054 * printf("Hello World - blocking\n"); 00055 * int polled_time = s.read_us(); 00056 * s.stop(); 00057 * wait(0.1f); // give time for the buffer to empty 00058 * 00059 * pc.printf("printf buffered took %d us\n", buffered_time); 00060 * pc.printf("printf blocking took %d us\n", polled_time); 00061 * wait(0.5f); 00062 * } 00063 * } 00064 * @endcode 00065 */ 00066 00067 /** 00068 * @class BufferedSerial 00069 * @brief Software buffers and interrupt driven tx and rx for Serial 00070 */ 00071 class BufferedSerial : public RawSerial 00072 { 00073 private: 00074 Buffer <char> rxbuf; 00075 Buffer <char> txbuf; 00076 uint32_t buf_size; 00077 uint32_t tx_multiple; 00078 00079 void rxIrq(void); 00080 void txIrq(void); 00081 void prime(void); 00082 00083 public: 00084 /** Create a BufferedSerial port, connected to the specified transmit and receive pins 00085 * @param tx Transmit pin 00086 * @param rx Receive pin 00087 * @param buf_size printf() buffer size 00088 * @param tx_multiple amount of max printf() present in the internal ring buffer at one time 00089 * @param name optional name 00090 * @note Either tx or rx may be specified as NC if unused 00091 */ 00092 BufferedSerial(PinName tx, PinName rx, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL); 00093 00094 /** Destroy a BufferedSerial port 00095 */ 00096 virtual ~BufferedSerial(void); 00097 00098 /** Check on how many bytes are in the rx buffer 00099 * @return 1 if something exists, 0 otherwise 00100 */ 00101 virtual int readable(void); 00102 00103 /** Check to see if the tx buffer has room 00104 * @return 1 always has room and can overwrite previous content if too small / slow 00105 */ 00106 virtual int writeable(void); 00107 00108 /** Get a single byte from the BufferedSerial Port. 00109 * Should check readable() before calling this. 00110 * @return A byte that came in on the Serial Port 00111 */ 00112 virtual int getc(void); 00113 00114 /** Write a single byte to the BufferedSerial Port. 00115 * @param c The byte to write to the Serial Port 00116 * @return The byte that was written to the Serial Port Buffer 00117 */ 00118 virtual int putc(int c); 00119 00120 /** Write a string to the BufferedSerial Port. Must be NULL terminated 00121 * @param s The string to write to the Serial Port 00122 * @return The number of bytes written to the Serial Port Buffer 00123 */ 00124 virtual int puts(const char *s); 00125 00126 /** Write a formatted string to the BufferedSerial Port. 00127 * @param format The string + format specifiers to write to the Serial Port 00128 * @return The number of bytes written to the Serial Port Buffer 00129 */ 00130 virtual int printf(const char* format, ...); 00131 00132 /** Write data to the Buffered Serial Port 00133 * @param s A pointer to data to send 00134 * @param length The amount of data being pointed to 00135 * @return The number of bytes written to the Serial Port Buffer 00136 */ 00137 virtual ssize_t write(const void *s, std::size_t length); 00138 00139 void clearRxBuf(void); 00140 00141 void clearTxBuf(void); 00142 }; 00143 00144 #endif
Generated on Tue Jul 12 2022 17:25:07 by
 1.7.2
 1.7.2