/**
* @file PFM_FS.c
* @brief Platform Function Module:FS文件相关功能
* @details
* 读取FS文件配置信息
* @author GT-BU
* @date 2021.03.01
* @version V1.0
* @copyright TCT
* @par 修改日志
* <table>
* <tr><th>Date        <th>Version  <th>Author     <th>Description
* <tr><td>2021.03.01  <td>V1.0     <td>GT-BU      <td>创建初始版本
* </table>
*/
#include "CM_Convert.h"
#include "CM_Memory.h"
#include "PFM_FS.h"
#include "PFM_Cfg.h"
#include "PFM_Log.h"
#include "dfsDataRead.h"
#include "dquDataTypeDefine.h"


#define FS_IPPORT_LINE_SIZE (30u)

/** IP地址表 */
typedef struct
{
    CM_UINT16 DEV_ID;    /**< 设备ID */
    CM_UINT32 HLHT_ID;    /**< 互联互通ID */
    CM_UINT32 Blue_IP;   /**< 蓝网IP */
    CM_UINT32 Red_IP;    /**< 红网IP */
    CM_UINT16 SFP_BluePort; /**< SFP蓝网端口 */
    CM_UINT16 SFP_RedPort;  /**< SFP红网端口 */
    CM_UINT16 RP_BluePort;  /**< RP蓝网端口 */
    CM_UINT16 RP_RedPort;   /**< RP红网端口 */
    CM_UINT16 RSSP_BluePort; /**< RSSP蓝网湍口 */
    CM_UINT16 RSSP_RedPort;  /**< RSSP红网端口 */
    CM_UINT16 Device_Source_BluePort; /**< 设备源蓝网端口 */
    CM_UINT16 Device_Source_RedPort;  /**< 设备源红网端口 */
}STRU_SHEET_IPPORT_T;

/** 设备IP表 */
typedef struct
{
    CM_INT32 IpPort_Num;  /**< IP地址表行数 */
    STRU_SHEET_IPPORT_T *pIpPort_List;  /**< IP地址表 */
}STRU_FS_IPTABLE_T;

/** 设备IP地址表 */
static STRU_FS_IPTABLE_T s_ip_table;

/**
* @brief FS文件初始化
* @param file_path FS文件路径
*/
void fs_init(IN CM_CHAR* file_path)
{
    /*- 变量初始化 */
    CM_UINT8* pData = NULL;
    CM_UINT32 dataLen = 0u;
    CM_UINT32 i = 0u;
    CM_UINT8 rt = 0u;
    /*- 读取IP地址表-设备IP表 */
    rt = dquGetConfigData(file_path, (CM_UINT32)DSU_DEVICE_IP_CONFIG_TYPE, (CM_UINT32)DSU_DATA_IP_IP_ID, &pData, &dataLen);
    CM_ASSERT(1u == rt, FS_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_1);
    
    /*- 计算总行数 */
    CM_ASSERT((dataLen % FS_IPPORT_LINE_SIZE) == 0u, FS_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_2);
    s_ip_table.IpPort_Num = (CM_INT32)CM_UNSIGNED_INT_EXP(dataLen/ FS_IPPORT_LINE_SIZE);
    
    /*- 内存初始化 */
    s_ip_table.pIpPort_List = CM_Malloc((CM_SIZE_T)s_ip_table.IpPort_Num * sizeof(STRU_SHEET_IPPORT_T));
    CM_ASSERT(NULL != s_ip_table.pIpPort_List, FS_MODE, DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_3);

    /*- 读取首行|是否遍历完成|读取下一行 */
    for (i = 0u; i < (CM_UINT32)s_ip_table.IpPort_Num; i++)
    {
        s_ip_table.pIpPort_List[i].DEV_ID = CM_ShortFromChar(&pData[i * FS_IPPORT_LINE_SIZE]);
        s_ip_table.pIpPort_List[i].HLHT_ID = CM_LongFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 2]);
        s_ip_table.pIpPort_List[i].Blue_IP = CM_LongFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 6]);
        s_ip_table.pIpPort_List[i].Red_IP = CM_LongFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 10]);
        s_ip_table.pIpPort_List[i].SFP_BluePort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 14]);
        s_ip_table.pIpPort_List[i].SFP_RedPort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 16]);
        s_ip_table.pIpPort_List[i].RP_BluePort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 18]);
        s_ip_table.pIpPort_List[i].RP_RedPort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 20]);
        s_ip_table.pIpPort_List[i].RSSP_BluePort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) +22]);
        s_ip_table.pIpPort_List[i].RSSP_RedPort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 24]);
        s_ip_table.pIpPort_List[i].Device_Source_BluePort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 26]);
        s_ip_table.pIpPort_List[i].Device_Source_RedPort = CM_ShortFromChar(&pData[(i * FS_IPPORT_LINE_SIZE) + 28]);
    }
}

/**
* @brief 获取互联互通ID
* @param dev_id 设备ID
* @return 互联互通ID
*/
CM_UINT32 fs_get_hlht_id(IN CM_UINT16 dev_id)
{
    /*- 变量初始化 */
    CM_UINT32 hlht_id = 0u;
    CM_INT32 i = 0;
    /*- 从IP地址表头开始遍历| 是否遍历结束| 下一项 */
    for (i = 0; i < s_ip_table.IpPort_Num; i++)
    {
        /*- 是否找到了目标设备ID */
        if (s_ip_table.pIpPort_List[i].DEV_ID == dev_id)
        {
            /*- 找到对应的互联互通ID */
            hlht_id = s_ip_table.pIpPort_List[i].HLHT_ID;
            /*- 返回 */
            break;
        }
        else
		{
			/*- 无处理 */
		}
    }
    /*- 返回互联互通ID */
    return hlht_id;
}

/**
* @brief 获取设备ID
* @param hlht_id 互联互通ID
* @return 设备ID
*/
CM_UINT16 fs_get_dev_id(IN CM_UINT32 hlht_id)
{
    /*- 变量初始化 */
    CM_UINT16 dev_id = 0u;
    CM_INT32 i = 0;
    /*- 从IP地址表头开始遍历 | 是否遍历结束 | 下一行 */
    for (i = 0; i < s_ip_table.IpPort_Num; i++)
    {
        /*- 是否找到了目标互联互通ID */
        if (s_ip_table.pIpPort_List[i].HLHT_ID == hlht_id)
        {
            /*- 找到对应的设备ID */
            dev_id = s_ip_table.pIpPort_List[i].DEV_ID;
            /*- 返回 */
            break;
        }
        else
		{
			/*- 无处理 */
		}
    }
    /*- 返回设备ID */
    return dev_id;
}





