// OAM设置参数
#include "includes.h"

// 定义全局变量保存设置参数
static SAVE_CONFIG_T g_stSaveConfigParam;

// 模块初始化
void wmm_config_init()
{
    SYS_MEMSET(&g_stSaveConfigParam, 0, sizeof(SAVE_CONFIG_T));
    wmm_config_set_param_with_default_data();
}

// 配置默认参数
void wmm_config_set_param_with_default_data()
{
    SYS_MEMSET((void *)&g_stSaveConfigParam, 0, sizeof(SAVE_CONFIG_T));
}

// 配置flash参数
void wmm_config_set_param_with_flash_data(uint8 *pbyData)
{
    SYS_MEMCPY((void *)&g_stSaveConfigParam, pbyData, sizeof(SAVE_CONFIG_T));
}

// 向外暴露设备参数，方便其他模块使用参数
SAVE_CONFIG_T *wmm_config_query_param()
{
    return (SAVE_CONFIG_T *)(&g_stSaveConfigParam);
}

// 网管查询参数
// wCommand:  查询命令，pstLtv：当前监控对象
void wmm_config_query(uint16 wCommand, uint8 abyLtv[])
{
    LTV_T *pstLtv = (LTV_T *)abyLtv;
    uint16 wLen = pstLtv->wLen - 4; // 净荷长度

    switch (wCommand)
    {
    case ORDER_CONFIG_DAC_SWITCH: // DA开关
        SYS_MEMCPY(pstLtv->abyData, &g_stSaveConfigParam.byDacSwitch, wLen);
        break;
    case ORDER_CONFIG_DAC_GAIN: // DAC通道增益
        SYS_MEMCPY(pstLtv->abyData, &g_stSaveConfigParam.byDacGain, wLen);
        break;
    case ORDER_CONFIG_PA_SWITCH: // PA开关
        SYS_MEMCPY(pstLtv->abyData, &g_stSaveConfigParam.byPaSwitch, wLen);
        break;
    case ORDER_CONFIG_PA_GAIN: // PA增益
        SYS_MEMCPY(pstLtv->abyData, &g_stSaveConfigParam.byPaGain, wLen);
        break;
    default:
        break;
    }

    return;
}

// 网管配置参数
// wCommand:  查询命令，pstLtv：当前监控对象
void wmm_config_config(uint16 wCommand, uint8 abyLtv[])
{
    LTV_T *pstLtv = (LTV_T *)abyLtv;
    uint16 wLen = pstLtv->wLen - 4; // 净荷长度
    uint8 byFlag = 0;

    switch (wCommand)
    {
    case ORDER_CONFIG_PA_SWITCH: // PA开关
        SYS_MEMCPY(&g_stSaveConfigParam.byPaSwitch, pstLtv->abyData, wLen);
        break;
    case ORDER_CONFIG_PA_GAIN: // PA增益
        SYS_MEMCPY(&g_stSaveConfigParam.byPaGain, pstLtv->abyData, wLen);
        break;
    case ORDER_CONFIG_DAC_SWITCH: // DA开关
        SYS_MEMCPY(&g_stSaveConfigParam.byDacSwitch, pstLtv->abyData, wLen);
        break;
    case ORDER_CONFIG_DAC_GAIN: // DA增益
        SYS_MEMCPY(&g_stSaveConfigParam.byDacGain, pstLtv->abyData, wLen);
        break;
    case ORDER_CONFIG_RESET_PARAM: // 重置设备参数
        wmm_reset_param();         // 重置参数
        sysparam_save_oam_param(); // 保存参数
    case ORDER_CONFIG_RESET:       // 设备复位
        wmm_config_restart();
    case ORDER_CONFIG_SAVE: // 保存网管参数
        byFlag = sysparam_save_oam_param();
        if (byFlag == 1)
        { // 成功
            pstLtv->abyData[0] = 1;
        }
        else
        { // 失败
            pstLtv->abyData[0] = 2;
        }
        break;
    default:
        break;
    }
}

// 重启设备
void wmm_config_restart()
{
    // wifi模块重启，提前使wifi模块恢复到初始状态
    driver_wifi_reset();

    // MCU重启
    NVIC_SystemReset();

    return;
}