/*****************************************************************************
Copyright: 2013-2018, MIAO XUN TECH. Co., Ltd.
File name:ps_mcp_query.c
Description: 查询模块
Author: 周涛
Version: 0.0.01
Date: 2022-4-23
History:
*****************************************************************************/
#include "includes.h"

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

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

        // 查询设备信息
        if (0x0000 <= wCommand && 0x00FF >= wCommand)
        {
            wmm_query_device(wCommand, abyLtv);
        }
        // 查询网管参数
        else if (0x0100 <= wCommand && 0x01FF >= wCommand)
        {
            wmm_network_query(wCommand, abyLtv);
        }
        // 查询告警状态
        else if (0x0200 <= wCommand && 0x02FF >= wCommand)
        {
            oam_report_query(wCommand, abyLtv);
        }
        // 查询设施参数
        else if (0x0300 <= wCommand && 0x03FF >= wCommand)
        {
            wmm_config_query(wCommand, abyLtv);
        }
        // 查询安装参数
        else if (0x0400 <= wCommand && 0x04FF >= wCommand)
        {
            wmm_install_query(wCommand, abyLtv);
        }
        // 查询同步参数
        else if (0x0500 <= wCommand && 0x05FF >= wCommand)
        {
            wmm_sync_query(wCommand, abyLtv);
        }
        else if (0x0600 <= wCommand && 0x06FF >= wCommand)
        { // 基站参数
            wmm_bts_query(abyLtv);
        }
        else
        {
            return 1;
        }

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

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

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

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

    return 0;
}
