Better Serial C++ class library with interrupt

Dependencies:   RingBuffer

Dependents:   Dumb_box_rev2 mbed_GPSproject

iSerial class library can easy be used just by swapping Serial declarations.

API

iSerial

Examples

#include "mbed.h"
#include "iSerial.h"

char s[] = "12345678901234567890123456789012345678901234567890";

int main() {

    iSerial pc(USBTX,USBRX);
    char* c = s;

    while(1) {
        pc.puts(s);
        
        while(pc.readable()){
            int ret = pc.getc();
            if(ret)
                *c++ = ret;
            if(c >= s+sizeof(s)-1)
                c = s;
        }
        wait(1);
    }
}

Example 2

Comparing speed of ordinary Serial functions

#include "mbed.h"
#include "iSerial.h"

char s[] = "12345678901234567890123456789012345678901234567890";    // 50 bytes

int main() {

    Timer t;

    Serial pc(USBTX,USBRX);
    pc.baud(921600);
    
    t.reset();
    t.start();
    for(int i=0; i<30; i++) {
        pc.printf(s);
        wait(0.001);
    }
    t.stop();
    
    int t1 = t.read_us();

    pc.puts("\n\n\n");


    iSerial ipc(USBTX,USBRX,NULL,1000,100); // try NOT to set the buffer over flowed
//    iSerial ipc(USBTX,USBRX);   // set as default = 100, 100
    ipc.baud(921600);

    t.reset();
    t.start();
    for(int i=0; i<30; i++) {
        ipc.printf(s);
        wait(0.001);
    }
    t.stop();
    
    int t2 = t.read_us();

    ipc.printf("\n\n\nThe time %d, %d [us] was taken.\n", t1, t2);
    ipc.puts("End.");
    ipc.flush();
}
Revision:
4:b38ef9675d39
Parent:
3:d5353b68105f
Child:
5:d83fc550ccbc
diff -r d5353b68105f -r b38ef9675d39 iSerial.h
--- a/iSerial.h	Sat Sep 01 12:28:28 2012 +0000
+++ b/iSerial.h	Mon Sep 03 09:15:34 2012 +0000
@@ -16,64 +16,30 @@
 class iSerial : public Serial {
   protected:
 
+    const int txbufsize;
+    const int rxbufsize;
     RingBuffer txbuf;
     RingBuffer rxbuf;
+    char* str;
 
     void tx_handler(void);
     void rx_handler(void);
 
-
   public:
 
     enum TERMINL_CODES { CR=0x0D, LF=0x0A };
 
-    /*
-     *  void init_sci(void)
-     *
-     *@ƒ|[ƒg‰Šú‰»ŠÖ”DDDD‚·‚ׂĂÌI/O‚̐ݒè‚ðs‚Á‚Ä‚¢‚éD
-     *
-     *@@ˆø”F‚È‚µ
-     *@@–ß‚è’lF‚È‚µ
-     *
-     */
     iSerial(PinName _tx, PinName _rx, const char *_name=NULL, int _txbufsize=100, int _rxbufsize=100);
-
-    /*
-     *  ƒVƒŠƒAƒ‹“ü—Í‚É•¶Žš‚ª‚ ‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN
-     *  •Ô’lF    ‚O@@F•¶Žš‚ª‚È‚¢
-     *            ‚OˆÈŠOF•¶Žš‚ª—ˆ‚Ä‚¢‚é
-     */
-    int readable(void);
+    virtual ~iSerial();
     
-    /*
-     *  ƒVƒŠƒAƒ‹‚©‚çˆê•¶Žš“ü—Í
-     */
-    int getc(void);
-    
-    /*
-     *@ƒVƒŠƒAƒ‹‚ֈꕶŽšo—Í
-     */
-    void putc(short ch);
-    
-
-    /*
-     *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðo—Í
-     *@@’Fˆê‰ñ‚̍ő啶Žš”‚ÍLINESIZE
-     *@@’F•¶Žš—ñ‚̏I‚í‚è‚ɂ̓kƒ‹•¶Žš‚ª•K—vD
-     *
-     *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
-     *@@•Ô’lFo—Í‚µ‚½•¶Žš”
-     */
     short int putstr(const char* s);
 
-    /*@void outs(char* s)
-     *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðˆêso—Í
-     *@@’FÅŒã‚ɉüsƒR[ƒh‚𑗂鑼‚Íoutstr‚Æ“¯‚¶
-     *
-     *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
-     *@@•Ô’lFo—Í‚µ‚½•¶Žš”
-     */
+    int readable(void);
+    int getc(void);
+    void putc(short ch);
     short int puts(const char* s);
+    //void printf();
+    char* printf(const char* format, ...);
 };