//---------------------------------------------------------------------
//  コード化されたデータを PC へ送信するためのクラス
//
//  2023/01/17, Copyright (c) 2023 MIKAMI, Naoki
//---------------------------------------------------------------------

#include <string>
#include "SerialRxTxIntr.hpp"
#include "Array.hpp"
using namespace Mikami;

#ifndef XFER_HPP
#define XFER_HPP

class Xfer
{
public:
    // コンストラクタ
    Xfer(SerialRxTxIntr& rxTx, int size) : SIZE_(size), rxTx_(rxTx) {}

    // データを PC へ転送（0 ～ 10,000 の範囲の値を 2 文字で表すコード化を利用）
    void ToPC(const Array<uint16_t> xn)
    {
        string str = "";
        for (int n=0; n<SIZE_; n++)
        {
            str += ((xn[n] >> 7) & 0x7F) + 0x10;    // コード化
            str += (xn[n] & 0x7F) + 0x10;           // コード化
        }
        rxTx_.TxString(str+"\n");
    }

private:
    const int SIZE_;        // PC に送信するデータ数
    SerialRxTxIntr& rxTx_;  // 割り込みを利用して送受信するクラスのオブジェクト

    // コピー･コンストラクタおよび代入演算子の禁止のため
    Xfer(const Xfer&);
    Xfer& operator=(const Xfer&);
};
#endif  // XFER_HPP
