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 "MyBuffer.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 MyBuffer <char> _rxbuf; 00075 MyBuffer <char> _txbuf; 00076 uint32_t _buf_size; 00077 uint32_t _tx_multiple; 00078 FunctionPointer _rx; 00079 00080 void rxIrq(void); 00081 void txIrq(void); 00082 void prime(void); 00083 00084 public: 00085 /** Create a BufferedSerial port, connected to the specified transmit and receive pins 00086 * @param tx Transmit pin 00087 * @param rx Receive pin 00088 * @param buf_size printf() buffer size 00089 * @param tx_multiple amount of max printf() present in the internal ring buffer at one time 00090 * @param name optional name 00091 * @note Either tx or rx may be specified as NC if unused 00092 */ 00093 BufferedSerial(PinName tx, PinName rx, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL); 00094 00095 /** Destroy a BufferedSerial port 00096 */ 00097 virtual ~BufferedSerial(void); 00098 00099 /** Check on how many bytes are in the rx buffer 00100 * @return 1 if something exists, 0 otherwise 00101 */ 00102 virtual int readable(void); 00103 00104 /** Check to see if the tx buffer has room 00105 * @return 1 always has room and can overwrite previous content if too small / slow 00106 */ 00107 virtual int writeable(void); 00108 00109 /** Get a single byte from the BufferedSerial Port. 00110 * Should check readable() before calling this. 00111 * @return A byte that came in on the Serial Port 00112 */ 00113 virtual int getc(void); 00114 00115 /** Write a single byte to the BufferedSerial Port. 00116 * @param c The byte to write to the Serial Port 00117 * @return The byte that was written to the Serial Port Buffer 00118 */ 00119 virtual int putc(int c); 00120 00121 /** Write a string to the BufferedSerial Port. Must be NULL terminated 00122 * @param s The string to write to the Serial Port 00123 * @return The number of bytes written to the Serial Port Buffer 00124 */ 00125 virtual int puts(const char *s); 00126 00127 /** Write a formatted string to the BufferedSerial Port. 00128 * @param format The string + format specifiers to write to the Serial Port 00129 * @return The number of bytes written to the Serial Port Buffer 00130 */ 00131 virtual int printf(const char* format, ...); 00132 00133 /** Write data to the Buffered Serial Port 00134 * @param s A pointer to data to send 00135 * @param length The amount of data being pointed to 00136 * @return The number of bytes written to the Serial Port Buffer 00137 */ 00138 virtual ssize_t write(const void *s, std::size_t length); 00139 00140 void attach(Callback<void()> func); 00141 }; 00142 00143 #endif
Generated on Mon Aug 15 2022 08:25:25 by
