/********************************************************
*                                                                                                            
* 文 件 名： SGBJConfigDataManage.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2023-09-23
* 作    者： 联锁组
* 功能描述： 声光报警配置数据管理  
* 修改记录：   
*
********************************************************/ 

#include "SGBJConfigDataManage.h"
#include "CiSystemDefine.h"
#include "SystemParameterManage.h"

SGBJConfigDataStruct SGBJConfigDataStru[SGBJ_SUM_MAX];   /*声光报警器数据配置结构体*/
UINT16 LocalCiSGBJlIdBuf[SGBJ_SUM_MAX] = { 0U };  /*本控区内所有声光报警器ID数组*/
INT16 SGBJCurSum = 0;  /*声光报警器总数*/


/*
* 功能描述： 获取指定ID声光报警器索引号
* 参数说明： const UINT16 wSGBJId 声光报警器ID
* 返回值  ： SIGNAL_SUM_MAX: 获取失败
*			 其它: 获取成功
*/
UINT16 GetSGBJConfigBufIndex(const UINT16 wSGBJId)
{
    UINT16 retVal = SGBJ_SUM_MAX;

    if ((1U <= wSGBJId) && (SGBJ_SUM_MAX > wSGBJId))
    {
        retVal = wSGBJId;
    }

    return retVal;
}

/*
* 功能描述：获取声光报警器当前总数
* 参数说明：void
* 返回值  ：0: 获取数据失败
*		   >0: 声光报警器当前总数
*/
UINT16 GetSGBJCurSum(void)
{
    UINT16 retVal = 0U;

    if (0 > SGBJCurSum)
    {
        retVal = 0U;
    }
    else if (SGBJ_SUM_MAX <= (UINT16)SGBJCurSum)
    {
        retVal = SGBJ_SUM_MAX;
    }
    else
    {
        retVal = (UINT16)SGBJCurSum;
    }

    return retVal;
}

/*
* 功能描述：整理读入的声光报警器配置数据
* 参数说明：无
* 返回值  ：CI_SUCCESS 整理成功
*			CI_ERROR 整理失败
*/
UINT8 SGBJConfigDataManage(void)
{
    UINT16 ii = 0u;
    UINT16 jj = 0u;
    UINT16 wSGBJCurSum = 0u;  /*声光报警器配置数据总数*/
    UINT8 cLocalCiId = 0U;
    UINT8 retVal = CI_ERROR;

    wSGBJCurSum = GetSGBJCurSum();

    if (wSGBJCurSum < SGBJ_SUM_MAX)
    {
        retVal = CI_SUCCESS;

        for (ii = 0u; ii < SGBJ_SUM_MAX; ii++)
        {
            if (jj == wSGBJCurSum)
            {
                break;
            }

            cLocalCiId = GetSystemParaLocalCiId();

            if (SGBJConfigDataStru[ii].cBelongCiId == cLocalCiId)
            {
                LocalCiSGBJlIdBuf[jj] = SGBJConfigDataStru[ii].wSGBJId;
                jj++;
            }
        }
    }
    else
    {
        retVal = CI_ERROR;  /*数据超限，返回失败*/
    }

    return retVal;
}

/*
* 功能描述： 获取指定数组下标对应的声光报警器ID
* 参数说明： const UINT16 bufIndex 数组下标
* 返回值  ： 0: 获取数据失败
*			>0: 声光报警器ID
*/
UINT16 GetSGBJIdByIndex(const UINT16 bufIndex)
{
    UINT16 retVal = CI_ERROR;
    UINT16 wSGBJCurNum = 0U;

    wSGBJCurNum = GetSGBJCurSum();
    if (bufIndex < wSGBJCurNum)
    {
        retVal = LocalCiSGBJlIdBuf[bufIndex];
    }
    else
    {
        retVal = CI_ERROR;
    }
    return retVal;
}

/*
* 功能描述： 获取指定ID声光报警器的继电器ID1
* 参数说明： const UINT16 wSGBJlId 声光报警器ID
* 返回值  ： 0: 获取数据失败
*		    >0: 声光报警器的继电器ID1
*/
UINT16 GetSGBJRelayId(const UINT16 wSGBJlId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16 retVal = CI_ERROR;

    bufIndex = GetSGBJConfigBufIndex(wSGBJlId);  /*获取声光报警器数组下标*/

    if (SGBJ_SUM_MAX > bufIndex)
    {
        retVal = SGBJConfigDataStru[bufIndex].wSGBJRelayId;
    }
    else
    {
        retVal = CI_ERROR;
    }

    return retVal;
}

/*
* 功能描述： 获取指定ID声光报警器的继电器ID2
* 参数说明： const UINT16 wSGBJlId 声光报警器ID
* 返回值  ： 0: 获取数据失败
*		    >0: 声光报警器的继电器ID2
*/
UINT16 GetSGBJRelayId_2(const UINT16 wSGBJlId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16 retVal = CI_ERROR;

    bufIndex = GetSGBJConfigBufIndex(wSGBJlId);  /*获取声光报警器数组下标*/

    if (SGBJ_SUM_MAX > bufIndex)
    {
        retVal = SGBJConfigDataStru[bufIndex].wSGBJRelayId_2;
    }
    else
    {
        retVal = CI_ERROR;
    }

    return retVal;
}

/*
* 功能描述： 获取指定ID声光报警器所属联锁ID
* 参数说明： const UINT16 wSGBJlId 声光报警器ID
* 返回值  ： 0: 获取数据失败
*		    >0: 声光报警器所属联锁ID
*/
UINT8 GetSGBJBelongCiId(const UINT16 wSGBJlId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT8 retVal = CI_ERROR;

    bufIndex = GetSGBJConfigBufIndex(wSGBJlId);  /*获取声光报警器数组下标*/

    if (SGBJ_SUM_MAX > bufIndex)
    {
        retVal = SGBJConfigDataStru[bufIndex].cBelongCiId;
    }
    else
    {
        retVal = CI_ERROR;
    }

    return retVal;
}

/*
* 功能描述： 获取指定ID声光报警器关联的进路数量
* 参数说明： const UINT16 wSGBJlId 声光报警器ID
* 返回值  ： 0: 获取数据失败
*		    >0: 关联的进路数量
*/
UINT16 GetSGBJRelRouteNum(const UINT16 wSGBJlId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16 retVal = CI_ERROR;

    bufIndex = GetSGBJConfigBufIndex(wSGBJlId);  /*获取声光报警器数组下标*/

    if (SGBJ_SUM_MAX > bufIndex)
    {
        retVal = SGBJConfigDataStru[bufIndex].wSGBJRelatedRouteNum;
    }
    else
    {
        retVal = CI_ERROR;
    }

    return retVal;
}

/*
* 功能描述： 获取指定ID声光报警器关联的进路ID数组
* 参数说明： const UINT16 wSGBJlId 声光报警器ID
* 返回值  ： NULL: 获取数据失败
*		    非NULL: 关联的进路ID数组
*/
UINT16* GetSGBJRelRouteIdBuf(const UINT16 wSGBJlId)
{
    UINT16 bufIndex = 0u;  /*数组下标*/
    UINT16* retVal = NULL;

    bufIndex = GetSGBJConfigBufIndex(wSGBJlId);  /*获取声光报警器数组下标*/

    if (SGBJ_SUM_MAX > bufIndex)
    {
        retVal = SGBJConfigDataStru[bufIndex].szSGBJRelatedRouteId;
    }
    else
    {
        retVal = NULL;
    }

    return retVal;
}