Modified BufferedSerial - callback when data received - baudrate as ctor param

Dependencies:   Buffer

Fork of BufferedSerial by Alexandre Bouillot

Revision:
14:f198c9f76382
Parent:
12:a0d37088b405
--- a/BufferedSerial.h	Sat Jan 28 16:12:14 2017 +0000
+++ b/BufferedSerial.h	Fri Apr 07 09:11:19 2017 +0000
@@ -4,7 +4,7 @@
  * @brief   Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX
  * @author  sam grove
  * @version 1.0
- * @see     
+ * @see
  *
  * Copyright (c) 2013
  *
@@ -23,7 +23,7 @@
 
 #ifndef BUFFEREDSERIAL_H
 #define BUFFEREDSERIAL_H
- 
+
 #include "mbed.h"
 #include "MyBuffer.h"
 
@@ -40,22 +40,22 @@
  *  BufferedSerial pc(USBTX, USBRX);
  *
  *  int main()
- *  { 
+ *  {
  *      while(1)
  *      {
  *          Timer s;
- *        
+ *
  *          s.start();
  *          pc.printf("Hello World - buffered\n");
  *          int buffered_time = s.read_us();
  *          wait(0.1f); // give time for the buffer to empty
- *        
+ *
  *          s.reset();
  *          printf("Hello World - blocking\n");
  *          int polled_time = s.read_us();
  *          s.stop();
  *          wait(0.1f); // give time for the buffer to empty
- *        
+ *
  *          pc.printf("printf buffered took %d us\n", buffered_time);
  *          pc.printf("printf blocking took %d us\n", polled_time);
  *          wait(0.5f);
@@ -67,19 +67,20 @@
 /**
  *  @class BufferedSerial
  *  @brief Software buffers and interrupt driven tx and rx for Serial
- */  
-class BufferedSerial : public RawSerial 
+ */
+class BufferedSerial : public RawSerial
 {
 private:
     MyBuffer <char> _rxbuf;
     MyBuffer <char> _txbuf;
     uint32_t      _buf_size;
     uint32_t      _tx_multiple;
- 
+    FunctionPointer _rx;
+
     void rxIrq(void);
     void txIrq(void);
     void prime(void);
-    
+
 public:
     /** Create a BufferedSerial port, connected to the specified transmit and receive pins
      *  @param tx Transmit pin
@@ -89,52 +90,59 @@
      *  @param name optional name
      *  @note Either tx or rx may be specified as NC if unused
      */
-    BufferedSerial(PinName tx, PinName rx, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL);
-    
+    BufferedSerial(PinName tx, PinName rx, int baud = MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL);
+
     /** Destroy a BufferedSerial port
      */
     virtual ~BufferedSerial(void);
-    
+
     /** Check on how many bytes are in the rx buffer
      *  @return 1 if something exists, 0 otherwise
      */
     virtual int readable(void);
-    
+
     /** Check to see if the tx buffer has room
      *  @return 1 always has room and can overwrite previous content if too small / slow
      */
     virtual int writeable(void);
-    
+
     /** Get a single byte from the BufferedSerial Port.
      *  Should check readable() before calling this.
      *  @return A byte that came in on the Serial Port
      */
     virtual int getc(void);
-    
+
     /** Write a single byte to the BufferedSerial Port.
      *  @param c The byte to write to the Serial Port
      *  @return The byte that was written to the Serial Port Buffer
      */
     virtual int putc(int c);
-    
+
     /** Write a string to the BufferedSerial Port. Must be NULL terminated
      *  @param s The string to write to the Serial Port
      *  @return The number of bytes written to the Serial Port Buffer
      */
     virtual int puts(const char *s);
-    
+
     /** Write a formatted string to the BufferedSerial Port.
      *  @param format The string + format specifiers to write to the Serial Port
      *  @return The number of bytes written to the Serial Port Buffer
      */
-    virtual int printf(const char* format, ...);
-    
+    //virtual int printf(const char* format, ...);
+
     /** Write data to the Buffered Serial Port
      *  @param s A pointer to data to send
      *  @param length The amount of data being pointed to
      *  @return The number of bytes written to the Serial Port Buffer
      */
     virtual ssize_t write(const void *s, std::size_t length);
+
+    /** Attach a function to call whenever a serial rx interrupt is generated
+     *
+     *  @param func A pointer to a void function, or 0 to set as none
+     */
+    void attach(Callback<void()> func);
+
 };
 
 #endif