/*****************************************************************************
Copyright: 2013-2018, ZhiWan Tech. Co., Ltd.
File name:ps_mcp_set.c
Description: 查询模块
Author: 周涛
Version: 0.0.01
Date: 2022-4-23
History:
*****************************************************************************/

#include "includes.h"

// 配置参数
//  pbyData:  接收到得数据,wLen:  数据长度,bySouruce:  数据来源
uint8 ps_up_mcp_set(uint8 *pbyData, uint8 bySouruce, uint16 wLen)
{
    uint8 byFlag = 0;                // 返回标志
    uint8 abyLtv[UDP_MCP_A_LTV_LEN]; // ltv数组
    int16 wCommand = 0;              // 监控命令
    PS_HEAD_T *pstHead = (PS_HEAD_T *)pbyData;
    LTV_T *pstLtv = (LTV_T *)(pbyData + sizeof(PS_HEAD_T));
    uint16 currentLen = sizeof(PS_HEAD_T); // 当前初始长度

    // 遍历消息，组织设置数据
    while (currentLen < (wLen - 3))
    {
        currentLen += pstLtv->wLen;
        wCommand = pstLtv->wTag;
        SYS_MEMCPY(abyLtv, pstLtv, pstLtv->wLen); // 将数据拷贝到临时数组中

        // 设备信息
        if (0x0000 <= wCommand && 0x00FF >= wCommand)
        {
            wmm_set_device(wCommand, abyLtv);
        }
        // 网管参数
        else if (0x0100 <= wCommand && 0x01FF >= wCommand)
        {
            wmm_network_config(wCommand, abyLtv);
        }
        // 设置参数
        else if (0x0300 <= wCommand && 0x03FF >= wCommand)
        {
            wmm_config_config(wCommand, abyLtv);
        }
        else if (0x0400 <= wCommand && 0x04FF >= wCommand)
        { // 安装参数
            wmm_install_config(wCommand, abyLtv);
        }
        else if (0x0500 <= wCommand && 0x05FF >= wCommand)
        { // 同步参数
            wmm_sync_config(wCommand, abyLtv);
        }
        else if (0x0600 <= wCommand && 0x06FF >= wCommand)
        { // 基站参数
            wmm_bts_config(abyLtv);
        }
        else if (0x0700 <= wCommand && 0x07FF >= wCommand)
        { // 同步定时
            oam_sync_timer_config(abyLtv);
        }
        else
        {
            return 1;
        }

        SYS_MEMCPY(pstLtv, abyLtv, pstLtv->wLen); // 将数据拷贝到临时数组中

        if (currentLen < (wLen - 3))
        {
            pstLtv = (LTV_T *)(pbyData + currentLen); // 指针后移一个对象的长度
        }
    }

    pstHead->stMcpHead.byResp = (uint8)MCP_RESP_SUCC; // 修改MCP层应答标识：响应成功
    pstHead->stVpHead.byVpFlag = (uint8)VP_RESP;      // 修改VP层交付标识：响应成功

    byFlag = ps_down_ap_out(pbyData, bySouruce, wLen);
    if (byFlag)
    {
        return 1;
    }

    return 0;
}
