brian barreto / SoftSerial

Dependents:   comunicacion Bluetooth

Committer:
briandk
Date:
Sat Sep 23 21:01:23 2017 +0000
Revision:
0:064ba08b22ef
Comunicacion serial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
briandk 0:064ba08b22ef 1 #ifndef SOFTSERIAL_H
briandk 0:064ba08b22ef 2 #define SOFTSERIAL_H
briandk 0:064ba08b22ef 3
briandk 0:064ba08b22ef 4 #include "mbed.h"
briandk 0:064ba08b22ef 5 #include "SoftSerial_Ticker.h"
briandk 0:064ba08b22ef 6 /** A software serial implementation
briandk 0:064ba08b22ef 7 *
briandk 0:064ba08b22ef 8 */
briandk 0:064ba08b22ef 9 class SoftSerial: public Stream {
briandk 0:064ba08b22ef 10
briandk 0:064ba08b22ef 11 public:
briandk 0:064ba08b22ef 12 /**
briandk 0:064ba08b22ef 13 * Constructor
briandk 0:064ba08b22ef 14 *
briandk 0:064ba08b22ef 15 * @param TX Name of the TX pin, NC for not connected
briandk 0:064ba08b22ef 16 * @param RX Name of the RX pin, NC for not connected, must be capable of being InterruptIn
briandk 0:064ba08b22ef 17 * @param name Name of the connection
briandk 0:064ba08b22ef 18 */
briandk 0:064ba08b22ef 19 SoftSerial(PinName TX, PinName RX, const char* name = NULL);
briandk 0:064ba08b22ef 20 virtual ~SoftSerial();
briandk 0:064ba08b22ef 21
briandk 0:064ba08b22ef 22 /** Set the baud rate of the serial port
briandk 0:064ba08b22ef 23 *
briandk 0:064ba08b22ef 24 * @param baudrate The baudrate of the serial port (default = 9600).
briandk 0:064ba08b22ef 25 */
briandk 0:064ba08b22ef 26 void baud(int baudrate);
briandk 0:064ba08b22ef 27
briandk 0:064ba08b22ef 28 enum Parity {
briandk 0:064ba08b22ef 29 None = 0,
briandk 0:064ba08b22ef 30 Odd,
briandk 0:064ba08b22ef 31 Even,
briandk 0:064ba08b22ef 32 Forced1,
briandk 0:064ba08b22ef 33 Forced0
briandk 0:064ba08b22ef 34 };
briandk 0:064ba08b22ef 35
briandk 0:064ba08b22ef 36 enum IrqType {
briandk 0:064ba08b22ef 37 RxIrq = 0,
briandk 0:064ba08b22ef 38 TxIrq
briandk 0:064ba08b22ef 39 };
briandk 0:064ba08b22ef 40
briandk 0:064ba08b22ef 41 /** Set the transmission format used by the serial port
briandk 0:064ba08b22ef 42 *
briandk 0:064ba08b22ef 43 * @param bits The number of bits in a word (default = 8)
briandk 0:064ba08b22ef 44 * @param parity The parity used (SerialBase::None, SerialBase::Odd, SerialBase::Even, SerialBase::Forced1, SerialBase::Forced0; default = SerialBase::None)
briandk 0:064ba08b22ef 45 * @param stop The number of stop bits (default = 1)
briandk 0:064ba08b22ef 46 */
briandk 0:064ba08b22ef 47 void format(int bits=8, Parity parity=SoftSerial::None, int stop_bits=1);
briandk 0:064ba08b22ef 48
briandk 0:064ba08b22ef 49 /** Determine if there is a character available to read
briandk 0:064ba08b22ef 50 *
briandk 0:064ba08b22ef 51 * @returns
briandk 0:064ba08b22ef 52 * 1 if there is a character available to read,
briandk 0:064ba08b22ef 53 * 0 otherwise
briandk 0:064ba08b22ef 54 */
briandk 0:064ba08b22ef 55 int readable();
briandk 0:064ba08b22ef 56
briandk 0:064ba08b22ef 57 /** Determine if there is space available to write a character
briandk 0:064ba08b22ef 58 *
briandk 0:064ba08b22ef 59 * @returns
briandk 0:064ba08b22ef 60 * 1 if there is space to write a character,
briandk 0:064ba08b22ef 61 * 0 otherwise
briandk 0:064ba08b22ef 62 */
briandk 0:064ba08b22ef 63 int writeable();
briandk 0:064ba08b22ef 64
briandk 0:064ba08b22ef 65 /** Attach a function to call whenever a serial interrupt is generated
briandk 0:064ba08b22ef 66 *
briandk 0:064ba08b22ef 67 * @param fptr A pointer to a void function, or 0 to set as none
briandk 0:064ba08b22ef 68 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
briandk 0:064ba08b22ef 69 */
briandk 0:064ba08b22ef 70 void attach(void (*fptr)(void), IrqType type=RxIrq) {
briandk 0:064ba08b22ef 71 fpointer[type].attach(fptr);
briandk 0:064ba08b22ef 72 }
briandk 0:064ba08b22ef 73
briandk 0:064ba08b22ef 74 /** Attach a member function to call whenever a serial interrupt is generated
briandk 0:064ba08b22ef 75 *
briandk 0:064ba08b22ef 76 * @param tptr pointer to the object to call the member function on
briandk 0:064ba08b22ef 77 * @param mptr pointer to the member function to be called
briandk 0:064ba08b22ef 78 * @param type Which serial interrupt to attach the member function to (Seriall::RxIrq for receive, TxIrq for transmit buffer empty)
briandk 0:064ba08b22ef 79 */
briandk 0:064ba08b22ef 80 template<typename T>
briandk 0:064ba08b22ef 81 void attach(T* tptr, void (T::*mptr)(void), IrqType type=RxIrq) {
briandk 0:064ba08b22ef 82 fpointer[type].attach(tptr, mptr);
briandk 0:064ba08b22ef 83 }
briandk 0:064ba08b22ef 84
briandk 0:064ba08b22ef 85 /** Generate a break condition on the serial line
briandk 0:064ba08b22ef 86 */
briandk 0:064ba08b22ef 87 void send_break();
briandk 0:064ba08b22ef 88
briandk 0:064ba08b22ef 89 protected:
briandk 0:064ba08b22ef 90 DigitalOut *tx;
briandk 0:064ba08b22ef 91 InterruptIn *rx;
briandk 0:064ba08b22ef 92
briandk 0:064ba08b22ef 93 bool tx_en, rx_en;
briandk 0:064ba08b22ef 94 int bit_period;
briandk 0:064ba08b22ef 95 int _bits, _stop_bits, _total_bits;
briandk 0:064ba08b22ef 96 Parity _parity;
briandk 0:064ba08b22ef 97
briandk 0:064ba08b22ef 98 FunctionPointer fpointer[2];
briandk 0:064ba08b22ef 99
briandk 0:064ba08b22ef 100 //rx
briandk 0:064ba08b22ef 101 void rx_gpio_irq_handler(void);
briandk 0:064ba08b22ef 102 void rx_handler(void);
briandk 0:064ba08b22ef 103 int read_buffer, rx_bit;
briandk 0:064ba08b22ef 104 volatile int out_buffer;
briandk 0:064ba08b22ef 105 volatile bool out_valid;
briandk 0:064ba08b22ef 106 bool rx_error;
briandk 0:064ba08b22ef 107 FlexTicker rxticker;
briandk 0:064ba08b22ef 108
briandk 0:064ba08b22ef 109 //tx
briandk 0:064ba08b22ef 110 void tx_handler(void);
briandk 0:064ba08b22ef 111 void prepare_tx(int c);
briandk 0:064ba08b22ef 112 FlexTicker txticker;
briandk 0:064ba08b22ef 113 int _char;
briandk 0:064ba08b22ef 114 volatile int tx_bit;
briandk 0:064ba08b22ef 115
briandk 0:064ba08b22ef 116
briandk 0:064ba08b22ef 117
briandk 0:064ba08b22ef 118 virtual int _getc();
briandk 0:064ba08b22ef 119 virtual int _putc(int c);
briandk 0:064ba08b22ef 120 };
briandk 0:064ba08b22ef 121
briandk 0:064ba08b22ef 122
briandk 0:064ba08b22ef 123 #endif
briandk 0:064ba08b22ef 124