Kenji Arai / iSerial

Dependencies:   RingBuffer

Dependents:   Frequency_Counter_w_GPS_1PPS FreqCntr_GPS1PPS_F746F4xx_w_recipro

Fork of iSerial by Yoji KURODA

Files at this revision

API Documentation at this revision

Comitter:
ykuroda
Date:
Mon Sep 03 09:15:34 2012 +0000
Parent:
3:d5353b68105f
Child:
5:d83fc550ccbc
Commit message:
printf using interrupt is implemented

Changed in this revision

iSerial.cpp Show annotated file Show diff for this revision Revisions of this file
iSerial.h Show annotated file Show diff for this revision Revisions of this file
--- a/iSerial.cpp	Sat Sep 01 12:28:28 2012 +0000
+++ b/iSerial.cpp	Mon Sep 03 09:15:34 2012 +0000
@@ -4,11 +4,27 @@
 //  2009.11.13 ... Originally written by Y.Kuroda for Renesas H83664
 //  2012.08.31 ... Code convert for mbed in C++
 //
+#include <stdarg.h>
 #include "mbed.h"
 #include "RingBuffer.h"
 #include "iSerial.h"
 
 
+
+#if defined(TARGET_LPC1768)
+
+//  UART1 = p9, p10
+
+    #define UART_IRQn   UART2_IRQn
+
+#elif defined(TARGET_LPC11U24)
+
+    #define UART_IRQn   UART_IRQn
+
+#endif
+
+
+
 /*
  *    Interrupt Function
  */
@@ -33,19 +49,13 @@
     NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
 }
 
-/*
- *  void sci_init(void)
- *
- *@ƒ|[ƒg‰Šú‰»ŠÖ”DDDD‚·‚ׂĂÌI/O‚̐ݒè‚ðs‚Á‚Ä‚¢‚éD
- *
- *@@ˆø”F‚È‚µ
- *@@–ß‚è’lF‚È‚µ
- *
- */
 iSerial::iSerial(PinName _tx, PinName _rx, const char *_name, int _txbufsize, int _rxbufsize)
 :   Serial(_tx, _rx, _name),
-    txbuf(RingBuffer(_txbufsize)),
-    rxbuf(RingBuffer(_rxbufsize))
+    txbufsize(_txbufsize),
+    rxbufsize(_rxbufsize),
+    txbuf(RingBuffer(txbufsize)),
+    rxbuf(RingBuffer(rxbufsize)),
+    str(new char [txbufsize])
 {
     __disable_irq();
 
@@ -59,20 +69,17 @@
     NVIC_EnableIRQ(UART_IRQn); // UART1_IRQn);
 }
 
-/*
- *  ƒVƒŠƒAƒ‹“ü—͂ɕ¶Žš‚ª‚ ‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN
- *  •Ô’lF    ƒoƒbƒtƒ@‚É‚ ‚é•¶Žš”
- */
+iSerial::~iSerial()
+{
+    delete [] str;
+}
+
 int
 iSerial::readable(void)
 {
     return rxbuf.check();
 }
 
-/*
- *  ƒVƒŠƒAƒ‹‚©‚çˆê•¶Žš“ü—Í
- *    --- •¶Žš“ü—Í‚ð‘Ò‚Â
- */
 int
 iSerial::getc(void)
 {
@@ -84,10 +91,6 @@
     return c;
 }
 
-
-/*
- *@ƒVƒŠƒAƒ‹‚Öˆê•¶Žšo—Í
- */
 void
 iSerial::putc(short ch)
 {
@@ -101,14 +104,6 @@
     }
 }
 
-/*
- *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðo—Í
- *@@’Fˆê‰ñ‚ÌÅ‘å•¶Žš”‚ÍLINESIZE
- *@@’F•¶Žš—ñ‚̏I‚í‚è‚ɂ̓kƒ‹•¶Žš‚ª•K—vD
- *
- *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
- *@@•Ô’lFo—Í‚µ‚½•¶Žš”
- */
 short int
 iSerial::putstr(const char* s)
 {
@@ -120,13 +115,6 @@
     return i;
 }
 
-/*@short int sci_puts(char* s)
- *@ƒVƒŠƒAƒ‹‚Ö•¶Žš—ñ‚ðˆêso—Í
- *@@’FÅŒã‚ɉüsƒR[ƒh‚𑗂鑼‚Ísci_putstr‚Æ“¯‚¶
- *
- *@@ˆø”F•¶Žš—ñ‚ւ̃|ƒCƒ“ƒ^
- *@@•Ô’lFo—Í‚µ‚½•¶Žš”
- */
 short int
 iSerial::puts(const char* s)
 {
@@ -136,3 +124,17 @@
     return n;
 }
 
+char*
+iSerial::printf(const char* format, ...)
+{
+    va_list arg;
+    va_start(arg,format);
+    vsprintf(str, format, arg);
+    va_end(arg);
+    putstr(str);
+    return str;
+}
+
+
+
+
--- 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, ...);
 };