strat des robots

Fork of CRAC-Strat_2017 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 19 17:14:07 2017 +0000
Revision:
17:d1594579eec6
Parent:
0:ad97421fb1fb
strat du robot, 19-05-2017, 19h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antbig 0:ad97421fb1fb 1 /* mbed Microcontroller Library - Serial
antbig 0:ad97421fb1fb 2 * Copyright (c) 2007-2011 ARM Limited. All rights reserved.
antbig 0:ad97421fb1fb 3 */
antbig 0:ad97421fb1fb 4
antbig 0:ad97421fb1fb 5 #ifndef MBED_SERIAL_H
antbig 0:ad97421fb1fb 6 #define MBED_SERIAL_H
antbig 0:ad97421fb1fb 7
antbig 0:ad97421fb1fb 8 #include "device.h"
antbig 0:ad97421fb1fb 9
antbig 0:ad97421fb1fb 10 #if DEVICE_SERIAL
antbig 0:ad97421fb1fb 11
antbig 0:ad97421fb1fb 12 #include "platform.h"
antbig 0:ad97421fb1fb 13 #include "PinNames.h"
antbig 0:ad97421fb1fb 14 #include "PeripheralNames.h"
antbig 0:ad97421fb1fb 15 #include "Stream.h"
antbig 0:ad97421fb1fb 16 #include "FunctionPointer.h"
antbig 0:ad97421fb1fb 17
antbig 0:ad97421fb1fb 18 namespace mbed {
antbig 0:ad97421fb1fb 19
antbig 0:ad97421fb1fb 20 /* Class: Serial
antbig 0:ad97421fb1fb 21 * A serial port (UART) for communication with other serial devices
antbig 0:ad97421fb1fb 22 *
antbig 0:ad97421fb1fb 23 * Can be used for Full Duplex communication, or Simplex by specifying
antbig 0:ad97421fb1fb 24 * one pin as NC (Not Connected)
antbig 0:ad97421fb1fb 25 *
antbig 0:ad97421fb1fb 26 * Example:
antbig 0:ad97421fb1fb 27 * > // Print "Hello World" to the PC
antbig 0:ad97421fb1fb 28 * >
antbig 0:ad97421fb1fb 29 * > #include "mbed.h"
antbig 0:ad97421fb1fb 30 * >
antbig 0:ad97421fb1fb 31 * > Serial pc(USBTX, USBRX);
antbig 0:ad97421fb1fb 32 * >
antbig 0:ad97421fb1fb 33 * > int main() {
antbig 0:ad97421fb1fb 34 * > pc.printf("Hello World\n");
antbig 0:ad97421fb1fb 35 * > }
antbig 0:ad97421fb1fb 36 */
antbig 0:ad97421fb1fb 37 class Serial : public Stream {
antbig 0:ad97421fb1fb 38
antbig 0:ad97421fb1fb 39 public:
antbig 0:ad97421fb1fb 40
antbig 0:ad97421fb1fb 41 /* Constructor: Serial
antbig 0:ad97421fb1fb 42 * Create a Serial port, connected to the specified transmit and receive pins
antbig 0:ad97421fb1fb 43 *
antbig 0:ad97421fb1fb 44 * Variables:
antbig 0:ad97421fb1fb 45 * tx - Transmit pin
antbig 0:ad97421fb1fb 46 * rx - Receive pin
antbig 0:ad97421fb1fb 47 *
antbig 0:ad97421fb1fb 48 * Note: Either tx or rx may be specified as NC if unused
antbig 0:ad97421fb1fb 49 */
antbig 0:ad97421fb1fb 50 Serial(PinName tx, PinName rx, const char *name = NULL);
antbig 0:ad97421fb1fb 51
antbig 0:ad97421fb1fb 52 /* Function: baud
antbig 0:ad97421fb1fb 53 * Set the baud rate of the serial port
antbig 0:ad97421fb1fb 54 *
antbig 0:ad97421fb1fb 55 * Variables:
antbig 0:ad97421fb1fb 56 * baudrate - The baudrate of the serial port (default = 9600).
antbig 0:ad97421fb1fb 57 */
antbig 0:ad97421fb1fb 58 void baud(int baudrate);
antbig 0:ad97421fb1fb 59
antbig 0:ad97421fb1fb 60 enum Parity {
antbig 0:ad97421fb1fb 61 None = 0
antbig 0:ad97421fb1fb 62 , Odd
antbig 0:ad97421fb1fb 63 , Even
antbig 0:ad97421fb1fb 64 , Forced1
antbig 0:ad97421fb1fb 65 , Forced0
antbig 0:ad97421fb1fb 66 };
antbig 0:ad97421fb1fb 67
antbig 0:ad97421fb1fb 68 enum IrqType {
antbig 0:ad97421fb1fb 69 RxIrq = 0
antbig 0:ad97421fb1fb 70 , TxIrq
antbig 0:ad97421fb1fb 71 };
antbig 0:ad97421fb1fb 72
antbig 0:ad97421fb1fb 73 /* Function: format
antbig 0:ad97421fb1fb 74 * Set the transmission format used by the Serial port
antbig 0:ad97421fb1fb 75 *
antbig 0:ad97421fb1fb 76 * Variables:
antbig 0:ad97421fb1fb 77 * bits - The number of bits in a word (5-8; default = 8)
antbig 0:ad97421fb1fb 78 * parity - The parity used (Serial::None, Serial::Odd, Serial::Even, Serial::Forced1, Serial::Forced0; default = Serial::None)
antbig 0:ad97421fb1fb 79 * stop - The number of stop bits (1 or 2; default = 1)
antbig 0:ad97421fb1fb 80 */
antbig 0:ad97421fb1fb 81 void format(int bits = 8, Parity parity = Serial::None, int stop_bits = 1);
antbig 0:ad97421fb1fb 82
antbig 0:ad97421fb1fb 83 #if 0 // Inhereted from Stream, for documentation only
antbig 0:ad97421fb1fb 84
antbig 0:ad97421fb1fb 85 /* Function: putc
antbig 0:ad97421fb1fb 86 * Write a character
antbig 0:ad97421fb1fb 87 *
antbig 0:ad97421fb1fb 88 * Variables:
antbig 0:ad97421fb1fb 89 * c - The character to write to the serial port
antbig 0:ad97421fb1fb 90 */
antbig 0:ad97421fb1fb 91 int putc(int c);
antbig 0:ad97421fb1fb 92
antbig 0:ad97421fb1fb 93 /* Function: getc
antbig 0:ad97421fb1fb 94 * Read a character
antbig 0:ad97421fb1fb 95 *
antbig 0:ad97421fb1fb 96 * Reads a character from the serial port. This will block until
antbig 0:ad97421fb1fb 97 * a character is available. To see if a character is available,
antbig 0:ad97421fb1fb 98 * see <readable>
antbig 0:ad97421fb1fb 99 *
antbig 0:ad97421fb1fb 100 * Variables:
antbig 0:ad97421fb1fb 101 * returns - The character read from the serial port
antbig 0:ad97421fb1fb 102 */
antbig 0:ad97421fb1fb 103 int getc();
antbig 0:ad97421fb1fb 104
antbig 0:ad97421fb1fb 105 /* Function: printf
antbig 0:ad97421fb1fb 106 * Write a formated string
antbig 0:ad97421fb1fb 107 *
antbig 0:ad97421fb1fb 108 * Variables:
antbig 0:ad97421fb1fb 109 * format - A printf-style format string, followed by the
antbig 0:ad97421fb1fb 110 * variables to use in formating the string.
antbig 0:ad97421fb1fb 111 */
antbig 0:ad97421fb1fb 112 int printf(const char* format, ...);
antbig 0:ad97421fb1fb 113
antbig 0:ad97421fb1fb 114 /* Function: scanf
antbig 0:ad97421fb1fb 115 * Read a formated string
antbig 0:ad97421fb1fb 116 *
antbig 0:ad97421fb1fb 117 * Variables:
antbig 0:ad97421fb1fb 118 * format - A scanf-style format string,
antbig 0:ad97421fb1fb 119 * followed by the pointers to variables to store the results.
antbig 0:ad97421fb1fb 120 */
antbig 0:ad97421fb1fb 121 int scanf(const char* format, ...);
antbig 0:ad97421fb1fb 122
antbig 0:ad97421fb1fb 123 #endif
antbig 0:ad97421fb1fb 124
antbig 0:ad97421fb1fb 125 /* Function: readable
antbig 0:ad97421fb1fb 126 * Determine if there is a character available to read
antbig 0:ad97421fb1fb 127 *
antbig 0:ad97421fb1fb 128 * Variables:
antbig 0:ad97421fb1fb 129 * returns - 1 if there is a character available to read, else 0
antbig 0:ad97421fb1fb 130 */
antbig 0:ad97421fb1fb 131 int readable();
antbig 0:ad97421fb1fb 132
antbig 0:ad97421fb1fb 133 /* Function: writeable
antbig 0:ad97421fb1fb 134 * Determine if there is space available to write a character
antbig 0:ad97421fb1fb 135 *
antbig 0:ad97421fb1fb 136 * Variables:
antbig 0:ad97421fb1fb 137 * returns - 1 if there is space to write a character, else 0
antbig 0:ad97421fb1fb 138 */
antbig 0:ad97421fb1fb 139 int writeable();
antbig 0:ad97421fb1fb 140
antbig 0:ad97421fb1fb 141 /* Function: attach
antbig 0:ad97421fb1fb 142 * Attach a function to call whenever a serial interrupt is generated
antbig 0:ad97421fb1fb 143 *
antbig 0:ad97421fb1fb 144 * Variables:
antbig 0:ad97421fb1fb 145 * fptr - A pointer to a void function, or 0 to set as none
antbig 0:ad97421fb1fb 146 * type - Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
antbig 0:ad97421fb1fb 147 */
antbig 0:ad97421fb1fb 148 void attach(void (*fptr)(void), IrqType type = RxIrq);
antbig 0:ad97421fb1fb 149
antbig 0:ad97421fb1fb 150 /* Function: attach
antbig 0:ad97421fb1fb 151 * Attach a member function to call whenever a serial interrupt is generated
antbig 0:ad97421fb1fb 152 *
antbig 0:ad97421fb1fb 153 * Variables:
antbig 0:ad97421fb1fb 154 * tptr - pointer to the object to call the member function on
antbig 0:ad97421fb1fb 155 * mptr - pointer to the member function to be called
antbig 0:ad97421fb1fb 156 * type - Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
antbig 0:ad97421fb1fb 157 */
antbig 0:ad97421fb1fb 158 template<typename T>
antbig 0:ad97421fb1fb 159 void attach(T* tptr, void (T::*mptr)(void), IrqType type = RxIrq) {
antbig 0:ad97421fb1fb 160 if((mptr != NULL) && (tptr != NULL)) {
antbig 0:ad97421fb1fb 161 _irq[type].attach(tptr, mptr);
antbig 0:ad97421fb1fb 162 setup_interrupt(type);
antbig 0:ad97421fb1fb 163 }
antbig 0:ad97421fb1fb 164 }
antbig 0:ad97421fb1fb 165
antbig 0:ad97421fb1fb 166 #ifdef MBED_RPC
antbig 0:ad97421fb1fb 167 virtual const struct rpc_method *get_rpc_methods();
antbig 0:ad97421fb1fb 168 static struct rpc_class *get_rpc_class();
antbig 0:ad97421fb1fb 169 #endif
antbig 0:ad97421fb1fb 170
antbig 0:ad97421fb1fb 171 protected:
antbig 0:ad97421fb1fb 172
antbig 0:ad97421fb1fb 173 void setup_interrupt(IrqType type);
antbig 0:ad97421fb1fb 174 void remove_interrupt(IrqType type);
antbig 0:ad97421fb1fb 175
antbig 0:ad97421fb1fb 176 virtual int _getc();
antbig 0:ad97421fb1fb 177 virtual int _putc(int c);
antbig 0:ad97421fb1fb 178
antbig 0:ad97421fb1fb 179 UARTName _uart;
antbig 0:ad97421fb1fb 180 FunctionPointer _irq[2];
antbig 0:ad97421fb1fb 181 int _uidx;
antbig 0:ad97421fb1fb 182
antbig 0:ad97421fb1fb 183 };
antbig 0:ad97421fb1fb 184
antbig 0:ad97421fb1fb 185 } // namespace mbed
antbig 0:ad97421fb1fb 186
antbig 0:ad97421fb1fb 187 #endif
antbig 0:ad97421fb1fb 188
antbig 0:ad97421fb1fb 189 #endif