Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで,複数のキャラクタ受送信をサポ-トするクラス.   このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Ctrl.

Dependents:   F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more

Revision:
4:fb847a82f735
Parent:
3:63d7bf321ba2
Child:
5:151d281afa55
--- a/SerialRxTxIntr.cpp	Fri Sep 07 12:55:52 2018 +0000
+++ b/SerialRxTxIntr.cpp	Tue Sep 18 00:13:29 2018 +0000
@@ -2,69 +2,71 @@
 //  Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで
 //  複数のキャラクタ受送信をサポ-トするクラス
 //
-//  2018/09/07, Copyright (c) 2018 MIKAMI, Naoki
+//  2018/09/18, Copyright (c) 2018 MIKAMI, Naoki
 //-------------------------------------------------------------
 
 #include "SerialRxTxIntr.hpp"
 
-// コンストラクタ
-SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud)
-    : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_(""), echoOn_(false)
-{
-    rxMax_ = maxChar;
-    pc_.format();    // default: 8 bits, nonparity, 1 stop bit
-    pc_.attach(callback(this, &SerialRxTxIntr::RxIsr));
-}
-    
-// メッセージの終了であればそのメッセージを保存し true を返す
-bool SerialRxTxIntr::IsEol()
-{
-    if (!eol_) return false;
-
-    eol_ = false;
-    buffer2_ = rxBuffer_;   // メッセージの保存
-    rxBuffer_ = "";         // 受信バッファをクリア
-    return true;
-}
-
-// 文字列の送信
-//      lf が false の場合は,最後に '\n' を送信しない
-void SerialRxTxIntr::Tx(string str, bool lf)
+namespace Mikami
 {
-    for (int n=0; n<str.size(); n++)
-        tx_.TxWrite(str[n]);
-    if (lf) tx_.TxWrite('\n');
-}
+    // コンストラクタ
+    SerialRxTxIntr::SerialRxTxIntr(int maxChar, int baud)
+        : pc_(USBTX, USBRX, baud), tx_(pc_), buffer2_(""), echoOn_(false)
+    {
+        rxMax_ = maxChar;
+        pc_.format();    // default: 8 bits, nonparity, 1 stop bit
+        pc_.attach(callback(this, &SerialRxTxIntr::RxIsr));
+    }
+    
+    // メッセージの終了であればそのメッセージを保存し true を返す
+    bool SerialRxTxIntr::IsEol()
+    {
+        if (!eol_) return false;
 
-// シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
-void SerialRxTxIntr::RxIsr()
-{
-    unsigned char chr = pc_.getc();
-    if (echoOn_)    // エコーバックが有効な場合
-    {
-        tx_.TxWrite(chr);   // エコーバック
-        if (chr == '\r') tx_.TxWrite('\n');
+        eol_ = false;
+        buffer2_ = rxBuffer_;   // メッセージの保存
+        rxBuffer_ = "";         // 受信バッファをクリア
+        return true;
     }
-    // "\r" を受信した場合はメッセージの終了とする
-    // "\r" は rxBuffer_ に追加されない
-    if (chr == '\r') eol_ = true;
-    else             rxBuffer_ += chr;
+
+    // 文字列の送信
+    //      lf が false の場合は,最後に '\n' を送信しない
+    void SerialRxTxIntr::Tx(string str, bool lf)
+    {
+        for (int n=0; n<str.size(); n++)
+            tx_.TxWrite(str[n]);
+        if (lf) tx_.TxWrite('\n');
+    }
 
-    // 受信するメッセージの文字数のチェック
-    if (rxBuffer_.size() > rxMax_)
+    // シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
+    void SerialRxTxIntr::RxIsr()
     {
-        // 文字数オーバーの処理,ボードの LED を高速に点滅する
-        DigitalOut myLed(LED1);
-        while (true)
+        unsigned char chr = pc_.getc();
+        if (echoOn_)    // エコーバックが有効な場合
         {
-            myLed = !myLed;
-            wait_ms(50);
+            tx_.TxWrite(chr);   // エコーバック
+            if (chr == '\r') tx_.TxWrite('\n');
+        }
+        // "\r" を受信した場合はメッセージの終了とする
+        // "\r" は rxBuffer_ に追加されない
+        if (chr == '\r') eol_ = true;
+        else             rxBuffer_ += chr;
+
+        // 受信するメッセージの文字数のチェック
+        if (rxBuffer_.size() > rxMax_)
+        {
+            // 文字数オーバーの処理,ボードの LED を高速に点滅する
+            DigitalOut myLed(LED1);
+            while (true)
+            {
+                myLed = !myLed;
+                wait_ms(50);
+            }
         }
     }
+    
+    // static メンバの実体の宣言/初期化
+    int SerialRxTxIntr::rxMax_;
+    __IO bool SerialRxTxIntr::eol_ = false;
+    string SerialRxTxIntr::rxBuffer_ = "";
 }
-    
-// static メンバの実体の宣言/初期化
-int SerialRxTxIntr::rxMax_;
-__IO bool SerialRxTxIntr::eol_ = false;
-string SerialRxTxIntr::rxBuffer_ = "";
-