This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vipinranka 12:9a20164dcc47 1 /* mbed Microcontroller Library
vipinranka 12:9a20164dcc47 2 * Copyright (c) 2006-2013 ARM Limited
vipinranka 12:9a20164dcc47 3 *
vipinranka 12:9a20164dcc47 4 * Licensed under the Apache License, Version 2.0 (the "License");
vipinranka 12:9a20164dcc47 5 * you may not use this file except in compliance with the License.
vipinranka 12:9a20164dcc47 6 * You may obtain a copy of the License at
vipinranka 12:9a20164dcc47 7 *
vipinranka 12:9a20164dcc47 8 * http://www.apache.org/licenses/LICENSE-2.0
vipinranka 12:9a20164dcc47 9 *
vipinranka 12:9a20164dcc47 10 * Unless required by applicable law or agreed to in writing, software
vipinranka 12:9a20164dcc47 11 * distributed under the License is distributed on an "AS IS" BASIS,
vipinranka 12:9a20164dcc47 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vipinranka 12:9a20164dcc47 13 * See the License for the specific language governing permissions and
vipinranka 12:9a20164dcc47 14 * limitations under the License.
vipinranka 12:9a20164dcc47 15 */
vipinranka 12:9a20164dcc47 16 #ifndef MBED_SERIALBASE_H
vipinranka 12:9a20164dcc47 17 #define MBED_SERIALBASE_H
vipinranka 12:9a20164dcc47 18
vipinranka 12:9a20164dcc47 19 #include "platform/platform.h"
vipinranka 12:9a20164dcc47 20
vipinranka 12:9a20164dcc47 21 #if DEVICE_SERIAL
vipinranka 12:9a20164dcc47 22
vipinranka 12:9a20164dcc47 23 #include "Stream.h"
vipinranka 12:9a20164dcc47 24 #include "Callback.h"
vipinranka 12:9a20164dcc47 25 #include "serial_api.h"
vipinranka 12:9a20164dcc47 26 #include "toolchain.h"
vipinranka 12:9a20164dcc47 27
vipinranka 12:9a20164dcc47 28 #if DEVICE_SERIAL_ASYNCH
vipinranka 12:9a20164dcc47 29 #include "CThunk.h"
vipinranka 12:9a20164dcc47 30 #include "dma_api.h"
vipinranka 12:9a20164dcc47 31 #endif
vipinranka 12:9a20164dcc47 32
vipinranka 12:9a20164dcc47 33 namespace mbed {
vipinranka 12:9a20164dcc47 34 /** \addtogroup drivers */
vipinranka 12:9a20164dcc47 35 /** @{*/
vipinranka 12:9a20164dcc47 36
vipinranka 12:9a20164dcc47 37 /** A base class for serial port implementations
vipinranka 12:9a20164dcc47 38 * Can't be instantiated directly (use Serial or RawSerial)
vipinranka 12:9a20164dcc47 39 *
vipinranka 12:9a20164dcc47 40 * @Note Synchronization level: Set by subclass
vipinranka 12:9a20164dcc47 41 */
vipinranka 12:9a20164dcc47 42 class SerialBase {
vipinranka 12:9a20164dcc47 43
vipinranka 12:9a20164dcc47 44 public:
vipinranka 12:9a20164dcc47 45 /** Set the baud rate of the serial port
vipinranka 12:9a20164dcc47 46 *
vipinranka 12:9a20164dcc47 47 * @param baudrate The baudrate of the serial port (default = 9600).
vipinranka 12:9a20164dcc47 48 */
vipinranka 12:9a20164dcc47 49 void baud(int baudrate);
vipinranka 12:9a20164dcc47 50
vipinranka 12:9a20164dcc47 51 enum Parity {
vipinranka 12:9a20164dcc47 52 None = 0,
vipinranka 12:9a20164dcc47 53 Odd,
vipinranka 12:9a20164dcc47 54 Even,
vipinranka 12:9a20164dcc47 55 Forced1,
vipinranka 12:9a20164dcc47 56 Forced0
vipinranka 12:9a20164dcc47 57 };
vipinranka 12:9a20164dcc47 58
vipinranka 12:9a20164dcc47 59 enum IrqType {
vipinranka 12:9a20164dcc47 60 RxIrq = 0,
vipinranka 12:9a20164dcc47 61 TxIrq,
vipinranka 12:9a20164dcc47 62
vipinranka 12:9a20164dcc47 63 IrqCnt
vipinranka 12:9a20164dcc47 64 };
vipinranka 12:9a20164dcc47 65
vipinranka 12:9a20164dcc47 66 enum Flow {
vipinranka 12:9a20164dcc47 67 Disabled = 0,
vipinranka 12:9a20164dcc47 68 RTS,
vipinranka 12:9a20164dcc47 69 CTS,
vipinranka 12:9a20164dcc47 70 RTSCTS
vipinranka 12:9a20164dcc47 71 };
vipinranka 12:9a20164dcc47 72
vipinranka 12:9a20164dcc47 73 /** Set the transmission format used by the serial port
vipinranka 12:9a20164dcc47 74 *
vipinranka 12:9a20164dcc47 75 * @param bits The number of bits in a word (5-8; default = 8)
vipinranka 12:9a20164dcc47 76 * @param parity The parity used (SerialBase::None, SerialBase::Odd, SerialBase::Even, SerialBase::Forced1, SerialBase::Forced0; default = SerialBase::None)
vipinranka 12:9a20164dcc47 77 * @param stop The number of stop bits (1 or 2; default = 1)
vipinranka 12:9a20164dcc47 78 */
vipinranka 12:9a20164dcc47 79 void format(int bits=8, Parity parity=SerialBase::None, int stop_bits=1);
vipinranka 12:9a20164dcc47 80
vipinranka 12:9a20164dcc47 81 /** Determine if there is a character available to read
vipinranka 12:9a20164dcc47 82 *
vipinranka 12:9a20164dcc47 83 * @returns
vipinranka 12:9a20164dcc47 84 * 1 if there is a character available to read,
vipinranka 12:9a20164dcc47 85 * 0 otherwise
vipinranka 12:9a20164dcc47 86 */
vipinranka 12:9a20164dcc47 87 int readable();
vipinranka 12:9a20164dcc47 88
vipinranka 12:9a20164dcc47 89 /** Determine if there is space available to write a character
vipinranka 12:9a20164dcc47 90 *
vipinranka 12:9a20164dcc47 91 * @returns
vipinranka 12:9a20164dcc47 92 * 1 if there is space to write a character,
vipinranka 12:9a20164dcc47 93 * 0 otherwise
vipinranka 12:9a20164dcc47 94 */
vipinranka 12:9a20164dcc47 95 int writeable();
vipinranka 12:9a20164dcc47 96
vipinranka 12:9a20164dcc47 97 /** Attach a function to call whenever a serial interrupt is generated
vipinranka 12:9a20164dcc47 98 *
vipinranka 12:9a20164dcc47 99 * @param func A pointer to a void function, or 0 to set as none
vipinranka 12:9a20164dcc47 100 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
vipinranka 12:9a20164dcc47 101 */
vipinranka 12:9a20164dcc47 102 void attach(Callback<void()> func, IrqType type=RxIrq);
vipinranka 12:9a20164dcc47 103
vipinranka 12:9a20164dcc47 104 /** Attach a member function to call whenever a serial interrupt is generated
vipinranka 12:9a20164dcc47 105 *
vipinranka 12:9a20164dcc47 106 * @param obj pointer to the object to call the member function on
vipinranka 12:9a20164dcc47 107 * @param method pointer to the member function to be called
vipinranka 12:9a20164dcc47 108 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
vipinranka 12:9a20164dcc47 109 * @deprecated
vipinranka 12:9a20164dcc47 110 * The attach function does not support cv-qualifiers. Replaced by
vipinranka 12:9a20164dcc47 111 * attach(callback(obj, method), type).
vipinranka 12:9a20164dcc47 112 */
vipinranka 12:9a20164dcc47 113 template<typename T>
vipinranka 12:9a20164dcc47 114 MBED_DEPRECATED_SINCE("mbed-os-5.1",
vipinranka 12:9a20164dcc47 115 "The attach function does not support cv-qualifiers. Replaced by "
vipinranka 12:9a20164dcc47 116 "attach(callback(obj, method), type).")
vipinranka 12:9a20164dcc47 117 void attach(T *obj, void (T::*method)(), IrqType type=RxIrq) {
vipinranka 12:9a20164dcc47 118 attach(callback(obj, method), type);
vipinranka 12:9a20164dcc47 119 }
vipinranka 12:9a20164dcc47 120
vipinranka 12:9a20164dcc47 121 /** Attach a member function to call whenever a serial interrupt is generated
vipinranka 12:9a20164dcc47 122 *
vipinranka 12:9a20164dcc47 123 * @param obj pointer to the object to call the member function on
vipinranka 12:9a20164dcc47 124 * @param method pointer to the member function to be called
vipinranka 12:9a20164dcc47 125 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
vipinranka 12:9a20164dcc47 126 * @deprecated
vipinranka 12:9a20164dcc47 127 * The attach function does not support cv-qualifiers. Replaced by
vipinranka 12:9a20164dcc47 128 * attach(callback(obj, method), type).
vipinranka 12:9a20164dcc47 129 */
vipinranka 12:9a20164dcc47 130 template<typename T>
vipinranka 12:9a20164dcc47 131 MBED_DEPRECATED_SINCE("mbed-os-5.1",
vipinranka 12:9a20164dcc47 132 "The attach function does not support cv-qualifiers. Replaced by "
vipinranka 12:9a20164dcc47 133 "attach(callback(obj, method), type).")
vipinranka 12:9a20164dcc47 134 void attach(T *obj, void (*method)(T*), IrqType type=RxIrq) {
vipinranka 12:9a20164dcc47 135 attach(callback(obj, method), type);
vipinranka 12:9a20164dcc47 136 }
vipinranka 12:9a20164dcc47 137
vipinranka 12:9a20164dcc47 138 /** Generate a break condition on the serial line
vipinranka 12:9a20164dcc47 139 */
vipinranka 12:9a20164dcc47 140 void send_break();
vipinranka 12:9a20164dcc47 141
vipinranka 12:9a20164dcc47 142 protected:
vipinranka 12:9a20164dcc47 143
vipinranka 12:9a20164dcc47 144 /** Acquire exclusive access to this serial port
vipinranka 12:9a20164dcc47 145 */
vipinranka 12:9a20164dcc47 146 virtual void lock(void);
vipinranka 12:9a20164dcc47 147
vipinranka 12:9a20164dcc47 148 /** Release exclusive access to this serial port
vipinranka 12:9a20164dcc47 149 */
vipinranka 12:9a20164dcc47 150 virtual void unlock(void);
vipinranka 12:9a20164dcc47 151
vipinranka 12:9a20164dcc47 152 public:
vipinranka 12:9a20164dcc47 153
vipinranka 12:9a20164dcc47 154 #if DEVICE_SERIAL_FC
vipinranka 12:9a20164dcc47 155 /** Set the flow control type on the serial port
vipinranka 12:9a20164dcc47 156 *
vipinranka 12:9a20164dcc47 157 * @param type the flow control type (Disabled, RTS, CTS, RTSCTS)
vipinranka 12:9a20164dcc47 158 * @param flow1 the first flow control pin (RTS for RTS or RTSCTS, CTS for CTS)
vipinranka 12:9a20164dcc47 159 * @param flow2 the second flow control pin (CTS for RTSCTS)
vipinranka 12:9a20164dcc47 160 */
vipinranka 12:9a20164dcc47 161 void set_flow_control(Flow type, PinName flow1=NC, PinName flow2=NC);
vipinranka 12:9a20164dcc47 162 #endif
vipinranka 12:9a20164dcc47 163
vipinranka 12:9a20164dcc47 164 static void _irq_handler(uint32_t id, SerialIrq irq_type);
vipinranka 12:9a20164dcc47 165
vipinranka 12:9a20164dcc47 166 #if DEVICE_SERIAL_ASYNCH
vipinranka 12:9a20164dcc47 167
vipinranka 12:9a20164dcc47 168 /** Begin asynchronous write using 8bit buffer. The completition invokes registered TX event callback
vipinranka 12:9a20164dcc47 169 *
vipinranka 12:9a20164dcc47 170 * @param buffer The buffer where received data will be stored
vipinranka 12:9a20164dcc47 171 * @param length The buffer length in bytes
vipinranka 12:9a20164dcc47 172 * @param callback The event callback function
vipinranka 12:9a20164dcc47 173 * @param event The logical OR of TX events
vipinranka 12:9a20164dcc47 174 */
vipinranka 12:9a20164dcc47 175 int write(const uint8_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_TX_COMPLETE);
vipinranka 12:9a20164dcc47 176
vipinranka 12:9a20164dcc47 177 /** Begin asynchronous write using 16bit buffer. The completition invokes registered TX event callback
vipinranka 12:9a20164dcc47 178 *
vipinranka 12:9a20164dcc47 179 * @param buffer The buffer where received data will be stored
vipinranka 12:9a20164dcc47 180 * @param length The buffer length in bytes
vipinranka 12:9a20164dcc47 181 * @param callback The event callback function
vipinranka 12:9a20164dcc47 182 * @param event The logical OR of TX events
vipinranka 12:9a20164dcc47 183 */
vipinranka 12:9a20164dcc47 184 int write(const uint16_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_TX_COMPLETE);
vipinranka 12:9a20164dcc47 185
vipinranka 12:9a20164dcc47 186 /** Abort the on-going write transfer
vipinranka 12:9a20164dcc47 187 */
vipinranka 12:9a20164dcc47 188 void abort_write();
vipinranka 12:9a20164dcc47 189
vipinranka 12:9a20164dcc47 190 /** Begin asynchronous reading using 8bit buffer. The completition invokes registred RX event callback.
vipinranka 12:9a20164dcc47 191 *
vipinranka 12:9a20164dcc47 192 * @param buffer The buffer where received data will be stored
vipinranka 12:9a20164dcc47 193 * @param length The buffer length in bytes
vipinranka 12:9a20164dcc47 194 * @param callback The event callback function
vipinranka 12:9a20164dcc47 195 * @param event The logical OR of RX events
vipinranka 12:9a20164dcc47 196 * @param char_match The matching character
vipinranka 12:9a20164dcc47 197 */
vipinranka 12:9a20164dcc47 198 int read(uint8_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH);
vipinranka 12:9a20164dcc47 199
vipinranka 12:9a20164dcc47 200 /** Begin asynchronous reading using 16bit buffer. The completition invokes registred RX event callback.
vipinranka 12:9a20164dcc47 201 *
vipinranka 12:9a20164dcc47 202 * @param buffer The buffer where received data will be stored
vipinranka 12:9a20164dcc47 203 * @param length The buffer length in bytes
vipinranka 12:9a20164dcc47 204 * @param callback The event callback function
vipinranka 12:9a20164dcc47 205 * @param event The logical OR of RX events
vipinranka 12:9a20164dcc47 206 * @param char_match The matching character
vipinranka 12:9a20164dcc47 207 */
vipinranka 12:9a20164dcc47 208 int read(uint16_t *buffer, int length, const event_callback_t& callback, int event = SERIAL_EVENT_RX_COMPLETE, unsigned char char_match = SERIAL_RESERVED_CHAR_MATCH);
vipinranka 12:9a20164dcc47 209
vipinranka 12:9a20164dcc47 210 /** Abort the on-going read transfer
vipinranka 12:9a20164dcc47 211 */
vipinranka 12:9a20164dcc47 212 void abort_read();
vipinranka 12:9a20164dcc47 213
vipinranka 12:9a20164dcc47 214 /** Configure DMA usage suggestion for non-blocking TX transfers
vipinranka 12:9a20164dcc47 215 *
vipinranka 12:9a20164dcc47 216 * @param usage The usage DMA hint for peripheral
vipinranka 12:9a20164dcc47 217 * @return Zero if the usage was set, -1 if a transaction is on-going
vipinranka 12:9a20164dcc47 218 */
vipinranka 12:9a20164dcc47 219 int set_dma_usage_tx(DMAUsage usage);
vipinranka 12:9a20164dcc47 220
vipinranka 12:9a20164dcc47 221 /** Configure DMA usage suggestion for non-blocking RX transfers
vipinranka 12:9a20164dcc47 222 *
vipinranka 12:9a20164dcc47 223 * @param usage The usage DMA hint for peripheral
vipinranka 12:9a20164dcc47 224 * @return Zero if the usage was set, -1 if a transaction is on-going
vipinranka 12:9a20164dcc47 225 */
vipinranka 12:9a20164dcc47 226 int set_dma_usage_rx(DMAUsage usage);
vipinranka 12:9a20164dcc47 227
vipinranka 12:9a20164dcc47 228 protected:
vipinranka 12:9a20164dcc47 229 void start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event, unsigned char char_match);
vipinranka 12:9a20164dcc47 230 void start_write(const void *buffer, int buffer_size, char buffer_width, const event_callback_t& callback, int event);
vipinranka 12:9a20164dcc47 231 void interrupt_handler_asynch(void);
vipinranka 12:9a20164dcc47 232 #endif
vipinranka 12:9a20164dcc47 233
vipinranka 12:9a20164dcc47 234 protected:
vipinranka 12:9a20164dcc47 235 SerialBase(PinName tx, PinName rx, int baud);
vipinranka 12:9a20164dcc47 236 virtual ~SerialBase() {
vipinranka 12:9a20164dcc47 237 }
vipinranka 12:9a20164dcc47 238
vipinranka 12:9a20164dcc47 239 int _base_getc();
vipinranka 12:9a20164dcc47 240 int _base_putc(int c);
vipinranka 12:9a20164dcc47 241
vipinranka 12:9a20164dcc47 242 #if DEVICE_SERIAL_ASYNCH
vipinranka 12:9a20164dcc47 243 CThunk<SerialBase> _thunk_irq;
vipinranka 12:9a20164dcc47 244 event_callback_t _tx_callback;
vipinranka 12:9a20164dcc47 245 event_callback_t _rx_callback;
vipinranka 12:9a20164dcc47 246 DMAUsage _tx_usage;
vipinranka 12:9a20164dcc47 247 DMAUsage _rx_usage;
vipinranka 12:9a20164dcc47 248 #endif
vipinranka 12:9a20164dcc47 249
vipinranka 12:9a20164dcc47 250 serial_t _serial;
vipinranka 12:9a20164dcc47 251 Callback<void()> _irq[IrqCnt];
vipinranka 12:9a20164dcc47 252 int _baud;
vipinranka 12:9a20164dcc47 253
vipinranka 12:9a20164dcc47 254 };
vipinranka 12:9a20164dcc47 255
vipinranka 12:9a20164dcc47 256 } // namespace mbed
vipinranka 12:9a20164dcc47 257
vipinranka 12:9a20164dcc47 258 #endif
vipinranka 12:9a20164dcc47 259
vipinranka 12:9a20164dcc47 260 #endif
vipinranka 12:9a20164dcc47 261
vipinranka 12:9a20164dcc47 262 /** @}*/