/*
 * CatMasterInfo.cpp
 *
 *  Created on: 2018/09/26
 *      Author: shingo
 */


#include "Logging.h"
#include <EcOs.h>

#include "ATEMDemoConfig.h"
#include "CatMasterInfo.h"


CatMasterInfo::CatMasterInfo()
{

}

CatMasterInfo::~CatMasterInfo()
{
    // TODO Auto-generated destructor stub
}

/**
 * EthetCat Masterの設定パラメータを取得する(ICSS用)
 * @param aParamPtr マラメータ設定ポインタ
 * @param nVerbose ログ出力レベル
 *
 */
void CatMasterInfo::getMasterParam(EC_T_INIT_MASTER_PARMS* masterParam, EC_T_LINK_PARMS*    poLinkParms, int nVerbose) {

    masterParam->dwSignature     = ATECAT_SIGNATURE;                     // 構造の署名。（規定値）
    masterParam->dwSize          =  sizeof(EC_T_INIT_MASTER_PARMS);       // 構造体サイズ
    masterParam->pOsParms        = NULL;                                 // OsInitで使用。rtosでは不要？
    masterParam->pLinkParms      = poLinkParms;                          // リンクレイヤーパラメータ
    masterParam->pLinkParmsRed   = NULL;                                 // 冗長用、セカンドネットワーク用リンクレイヤーパラメータ
    masterParam->dwBusCycleTimeUsec = 1000;                              // バスサイクル時間(uSec)
    masterParam->dwMaxBusSlaves  = MASTER_CFG_ECAT_MAX_BUS_SLAVES;                         // スレーブ最大数
    //v2.9    initMasterParam.dwMaxQueuedEthFrames = MaxQueuedPrames;                 // 非同期コマンドキューサイズ
    masterParam->dwMaxAcycFramesQueued = MASTER_CFG_MAX_ACYC_FRAMES_QUEUED;
    masterParam->dwAdditionalEoEEndpoints = 0;                           // 追加するEoEエンドポイント数
// V2.9    initMasterParam.dwMaxSlaveCmdPerFrame = MaxSlaveCmdPerFrame;            // EtherCatコマンド数
// V2.9    if(initMasterParam.dwBusCycleTimeUsec < 1000) {
// V2.9        initMasterParam.dwMaxSentQueuedFramesPerCycle = 1;
// V2.9    } else {
// V2.9        initMasterParam.dwMaxSentQueuedFramesPerCycle = MaxSentQufrmPerCyc;     // １サイクル当たりの送信フレーム数
// V2.9    }
    if (masterParam->dwBusCycleTimeUsec >= 1000)
    {
        masterParam->dwMaxAcycBytesPerCycle    = MASTER_CFG_MAX_ACYC_BYTES_PER_CYC; // V3.0
    }
    else
    {
        masterParam->dwMaxAcycBytesPerCycle    = 1500; // V3.0
        masterParam->dwMaxAcycFramesPerCycle   = 1;  // V3.0
        masterParam->dwMaxAcycCmdsPerCycle     = 20; // V3.0
    }

    masterParam->dwMaxSlavesProcessedPerCycle = 0;                       // ?
    masterParam->dwEcatCmdMaxRetries = MaxEcatCmdRetries;                // タイムアウトリトライ数
    masterParam->dwEcatCmdTimeout = 0;                                   // EtherCATコマンド送信タイムアウト時間(デフォルト(0)=サイクルms * 20)
// V2.9    initMasterParam.dwEoETimeout = EoeTimeout;                              // EoE応答タイムアウト
// V2.9    initMasterParam.dwFoEBusyTimeout = FoeBusyTimeout;
    masterParam->bVLANEnable = 0;                                        // 0:VLANをサポートしない
    masterParam->wVLANId = 0;                                            // 12Bit VLANId
    masterParam->byVLANPrio = 0;                                         // 3Bit VLAN priority
 // V2.9   initMasterParam.dwLogLevel = LogLevel;
 // V2.9   initMasterParam.pfLogMsgCallBack = CAtEmLogging::OsDbgMsgHookWrapper;
 // V2.9   initMasterParam.bLogToLinkLayer = 0;                                    //

    if (1 <= nVerbose)
    {
        OsMemcpy(&masterParam->LogParms, G_pEcLogParms, sizeof(EC_T_LOG_PARMS));
        switch (nVerbose)
        {
        case 0: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_SILENT;      break;
        case 1: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_WARNING;     break;
        case 2: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_WARNING;     break;
        case 3: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_WARNING;     break;
        case 4: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_INFO;        break;
        case 5: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_VERBOSE;     break;
        default: /* no break */
        case 6: masterParam->LogParms.dwLogLevel = EC_LOG_LEVEL_VERBOSE_CYC; break;
        }
    }
}

