//---------------------------------------------------------------------
//  スペクトル解析の結果を PC へ転送するためのクラス
//
//  2023/01/17, Copyright (c) 2022 MIKAMI, Naoki
//---------------------------------------------------------------------

#include "Xfer.hpp"

#ifndef XFER_SPECTRUM_HPP
#define XFER_SPECTRUM_HPP

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

    void XferToPC(const Array<float> yAbs)
    {
        Convert(yAbs);
        tx_.ToPC(xn_);
    }

private:
    const int SIZE_;        // PC に送信するデータ数
    Xfer tx_;               // PC に送信するためのクラスのオブジェクト
    Array<uint16_t> xn_;    // PC に送信するデータ

    // スペクトル解析の結果を転送する形式に変換
    //      yAbs    FFT の結果の絶対値
    void Convert(const Array<float> yAbs)
    {
        const float MAX = 10000;
        for (int n=0; n<SIZE_; n++)
        {
            float x = yAbs[n];
            xn_[n] = (x > MAX) ? (uint16_t)MAX : (uint16_t)x; 
        }
    }
    
    // コピー･コンストラクタおよび代入演算子の禁止のため
    XferSpectrum(const XferSpectrum&);
    XferSpectrum& operator=(const XferSpectrum&);
};
#endif  // XFER_SPECTRUM_HPP
