Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

Committer:
lwehmeier
Date:
Fri Mar 30 10:32:10 2018 +0000
Revision:
3:d7ec6dc025b0
implemented basic GPS read support, freed serial connection for uart jpg camera module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lwehmeier 3:d7ec6dc025b0 1
lwehmeier 3:d7ec6dc025b0 2 /**
lwehmeier 3:d7ec6dc025b0 3 * @file BufferedSerial.h
lwehmeier 3:d7ec6dc025b0 4 * @brief Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX
lwehmeier 3:d7ec6dc025b0 5 * @author sam grove
lwehmeier 3:d7ec6dc025b0 6 * @version 1.0
lwehmeier 3:d7ec6dc025b0 7 * @see
lwehmeier 3:d7ec6dc025b0 8 *
lwehmeier 3:d7ec6dc025b0 9 * Copyright (c) 2013
lwehmeier 3:d7ec6dc025b0 10 *
lwehmeier 3:d7ec6dc025b0 11 * Licensed under the Apache License, Version 2.0 (the "License");
lwehmeier 3:d7ec6dc025b0 12 * you may not use this file except in compliance with the License.
lwehmeier 3:d7ec6dc025b0 13 * You may obtain a copy of the License at
lwehmeier 3:d7ec6dc025b0 14 *
lwehmeier 3:d7ec6dc025b0 15 * http://www.apache.org/licenses/LICENSE-2.0
lwehmeier 3:d7ec6dc025b0 16 *
lwehmeier 3:d7ec6dc025b0 17 * Unless required by applicable law or agreed to in writing, software
lwehmeier 3:d7ec6dc025b0 18 * distributed under the License is distributed on an "AS IS" BASIS,
lwehmeier 3:d7ec6dc025b0 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
lwehmeier 3:d7ec6dc025b0 20 * See the License for the specific language governing permissions and
lwehmeier 3:d7ec6dc025b0 21 * limitations under the License.
lwehmeier 3:d7ec6dc025b0 22 */
lwehmeier 3:d7ec6dc025b0 23
lwehmeier 3:d7ec6dc025b0 24 #ifndef BUFFEREDSERIAL_H
lwehmeier 3:d7ec6dc025b0 25 #define BUFFEREDSERIAL_H
lwehmeier 3:d7ec6dc025b0 26
lwehmeier 3:d7ec6dc025b0 27 #include "mbed.h"
lwehmeier 3:d7ec6dc025b0 28 #include "MyBuffer.h"
lwehmeier 3:d7ec6dc025b0 29
lwehmeier 3:d7ec6dc025b0 30 /** A serial port (UART) for communication with other serial devices
lwehmeier 3:d7ec6dc025b0 31 *
lwehmeier 3:d7ec6dc025b0 32 * Can be used for Full Duplex communication, or Simplex by specifying
lwehmeier 3:d7ec6dc025b0 33 * one pin as NC (Not Connected)
lwehmeier 3:d7ec6dc025b0 34 *
lwehmeier 3:d7ec6dc025b0 35 * Example:
lwehmeier 3:d7ec6dc025b0 36 * @code
lwehmeier 3:d7ec6dc025b0 37 * #include "mbed.h"
lwehmeier 3:d7ec6dc025b0 38 * #include "BufferedSerial.h"
lwehmeier 3:d7ec6dc025b0 39 *
lwehmeier 3:d7ec6dc025b0 40 * BufferedSerial pc(USBTX, USBRX);
lwehmeier 3:d7ec6dc025b0 41 *
lwehmeier 3:d7ec6dc025b0 42 * int main()
lwehmeier 3:d7ec6dc025b0 43 * {
lwehmeier 3:d7ec6dc025b0 44 * while(1)
lwehmeier 3:d7ec6dc025b0 45 * {
lwehmeier 3:d7ec6dc025b0 46 * Timer s;
lwehmeier 3:d7ec6dc025b0 47 *
lwehmeier 3:d7ec6dc025b0 48 * s.start();
lwehmeier 3:d7ec6dc025b0 49 * pc.printf("Hello World - buffered\n");
lwehmeier 3:d7ec6dc025b0 50 * int buffered_time = s.read_us();
lwehmeier 3:d7ec6dc025b0 51 * wait(0.1f); // give time for the buffer to empty
lwehmeier 3:d7ec6dc025b0 52 *
lwehmeier 3:d7ec6dc025b0 53 * s.reset();
lwehmeier 3:d7ec6dc025b0 54 * printf("Hello World - blocking\n");
lwehmeier 3:d7ec6dc025b0 55 * int polled_time = s.read_us();
lwehmeier 3:d7ec6dc025b0 56 * s.stop();
lwehmeier 3:d7ec6dc025b0 57 * wait(0.1f); // give time for the buffer to empty
lwehmeier 3:d7ec6dc025b0 58 *
lwehmeier 3:d7ec6dc025b0 59 * pc.printf("printf buffered took %d us\n", buffered_time);
lwehmeier 3:d7ec6dc025b0 60 * pc.printf("printf blocking took %d us\n", polled_time);
lwehmeier 3:d7ec6dc025b0 61 * wait(0.5f);
lwehmeier 3:d7ec6dc025b0 62 * }
lwehmeier 3:d7ec6dc025b0 63 * }
lwehmeier 3:d7ec6dc025b0 64 * @endcode
lwehmeier 3:d7ec6dc025b0 65 */
lwehmeier 3:d7ec6dc025b0 66
lwehmeier 3:d7ec6dc025b0 67 /**
lwehmeier 3:d7ec6dc025b0 68 * @class BufferedSerial
lwehmeier 3:d7ec6dc025b0 69 * @brief Software buffers and interrupt driven tx and rx for Serial
lwehmeier 3:d7ec6dc025b0 70 */
lwehmeier 3:d7ec6dc025b0 71 class BufferedSerial : public RawSerial
lwehmeier 3:d7ec6dc025b0 72 {
lwehmeier 3:d7ec6dc025b0 73 private:
lwehmeier 3:d7ec6dc025b0 74 MyBuffer <char> _rxbuf;
lwehmeier 3:d7ec6dc025b0 75 MyBuffer <char> _txbuf;
lwehmeier 3:d7ec6dc025b0 76 uint32_t _buf_size;
lwehmeier 3:d7ec6dc025b0 77 uint32_t _tx_multiple;
lwehmeier 3:d7ec6dc025b0 78
lwehmeier 3:d7ec6dc025b0 79 public:
lwehmeier 3:d7ec6dc025b0 80
lwehmeier 3:d7ec6dc025b0 81 void rxIrq(void);
lwehmeier 3:d7ec6dc025b0 82 void txIrq(void);
lwehmeier 3:d7ec6dc025b0 83 void prime(void);
lwehmeier 3:d7ec6dc025b0 84 /** Create a BufferedSerial port, connected to the specified transmit and receive pins
lwehmeier 3:d7ec6dc025b0 85 * @param tx Transmit pin
lwehmeier 3:d7ec6dc025b0 86 * @param rx Receive pin
lwehmeier 3:d7ec6dc025b0 87 * @param buf_size printf() buffer size
lwehmeier 3:d7ec6dc025b0 88 * @param tx_multiple amount of max printf() present in the internal ring buffer at one time
lwehmeier 3:d7ec6dc025b0 89 * @param name optional name
lwehmeier 3:d7ec6dc025b0 90 * @note Either tx or rx may be specified as NC if unused
lwehmeier 3:d7ec6dc025b0 91 */
lwehmeier 3:d7ec6dc025b0 92 BufferedSerial(PinName tx, PinName rx, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL);
lwehmeier 3:d7ec6dc025b0 93
lwehmeier 3:d7ec6dc025b0 94 /** Destroy a BufferedSerial port
lwehmeier 3:d7ec6dc025b0 95 */
lwehmeier 3:d7ec6dc025b0 96 virtual ~BufferedSerial(void);
lwehmeier 3:d7ec6dc025b0 97
lwehmeier 3:d7ec6dc025b0 98 /** Check on how many bytes are in the rx buffer
lwehmeier 3:d7ec6dc025b0 99 * @return 1 if something exists, 0 otherwise
lwehmeier 3:d7ec6dc025b0 100 */
lwehmeier 3:d7ec6dc025b0 101 virtual int readable(void);
lwehmeier 3:d7ec6dc025b0 102
lwehmeier 3:d7ec6dc025b0 103 /** Check to see if the tx buffer has room
lwehmeier 3:d7ec6dc025b0 104 * @return 1 always has room and can overwrite previous content if too small / slow
lwehmeier 3:d7ec6dc025b0 105 */
lwehmeier 3:d7ec6dc025b0 106 virtual int writeable(void);
lwehmeier 3:d7ec6dc025b0 107
lwehmeier 3:d7ec6dc025b0 108 /** Get a single byte from the BufferedSerial Port.
lwehmeier 3:d7ec6dc025b0 109 * Should check readable() before calling this.
lwehmeier 3:d7ec6dc025b0 110 * @return A byte that came in on the Serial Port
lwehmeier 3:d7ec6dc025b0 111 */
lwehmeier 3:d7ec6dc025b0 112 virtual int getc(void);
lwehmeier 3:d7ec6dc025b0 113
lwehmeier 3:d7ec6dc025b0 114 /** Write a single byte to the BufferedSerial Port.
lwehmeier 3:d7ec6dc025b0 115 * @param c The byte to write to the Serial Port
lwehmeier 3:d7ec6dc025b0 116 * @return The byte that was written to the Serial Port Buffer
lwehmeier 3:d7ec6dc025b0 117 */
lwehmeier 3:d7ec6dc025b0 118 virtual int putc(int c);
lwehmeier 3:d7ec6dc025b0 119
lwehmeier 3:d7ec6dc025b0 120 /** Write a string to the BufferedSerial Port. Must be NULL terminated
lwehmeier 3:d7ec6dc025b0 121 * @param s The string to write to the Serial Port
lwehmeier 3:d7ec6dc025b0 122 * @return The number of bytes written to the Serial Port Buffer
lwehmeier 3:d7ec6dc025b0 123 */
lwehmeier 3:d7ec6dc025b0 124 virtual int puts(const char *s);
lwehmeier 3:d7ec6dc025b0 125
lwehmeier 3:d7ec6dc025b0 126 /** Write a formatted string to the BufferedSerial Port.
lwehmeier 3:d7ec6dc025b0 127 * @param format The string + format specifiers to write to the Serial Port
lwehmeier 3:d7ec6dc025b0 128 * @return The number of bytes written to the Serial Port Buffer
lwehmeier 3:d7ec6dc025b0 129 */
lwehmeier 3:d7ec6dc025b0 130 virtual int printf(const char* format, ...);
lwehmeier 3:d7ec6dc025b0 131
lwehmeier 3:d7ec6dc025b0 132 /** Write data to the Buffered Serial Port
lwehmeier 3:d7ec6dc025b0 133 * @param s A pointer to data to send
lwehmeier 3:d7ec6dc025b0 134 * @param length The amount of data being pointed to
lwehmeier 3:d7ec6dc025b0 135 * @return The number of bytes written to the Serial Port Buffer
lwehmeier 3:d7ec6dc025b0 136 */
lwehmeier 3:d7ec6dc025b0 137 virtual ssize_t write(const void *s, std::size_t length);
lwehmeier 3:d7ec6dc025b0 138 };
lwehmeier 3:d7ec6dc025b0 139
lwehmeier 3:d7ec6dc025b0 140 #endif