Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: F446_FunctionGenerator F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver ... more
SerialRxTxIntr.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2018-09-18
- Revision:
- 4:fb847a82f735
- Parent:
- 3:63d7bf321ba2
- Child:
- 5:151d281afa55
File content as of revision 4:fb847a82f735:
//-------------------------------------------------------------
// Nucleo ボードの USB コネクタに対応するシリアルポート受送信割込みで
// 複数のキャラクタ受送信をサポ-トするクラス
//
// 2018/09/18, Copyright (c) 2018 MIKAMI, Naoki
//-------------------------------------------------------------
#include "SerialRxTxIntr.hpp"
namespace Mikami
{
// コンストラクタ
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)
{
for (int n=0; n<str.size(); n++)
tx_.TxWrite(str[n]);
if (lf) tx_.TxWrite('\n');
}
// シリアル・ポートの受信割り込みに対する割り込みサービス・ルーチン
void SerialRxTxIntr::RxIsr()
{
unsigned char chr = pc_.getc();
if (echoOn_) // エコーバックが有効な場合
{
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_ = "";
}