/**
 * \file    sys_reg.c
 * \brief   System control register process engine
 *
 * \par     Copyright (c) 2020 UWE Technologies Corp., Ltd. All Rights Reserved.
 * \author  James
 * \date    2020-03-27
 * \version 
 * 
 * \history 
 *  Date        Note
 *  2020-03-27  Original Creation
 * 
 */

#include "libc.h"
#include "drivers.h"
#include "sys_reg.h"


volatile DPM_FW_UDATE_RESV_MEM_t *fw_udate_resv_mem_ptr = (volatile DPM_FW_UDATE_RESV_MEM_t *)(0x60000290);
volatile SYS_FW_UPDATE_t g_sys_fw_update;

void fw_update_init(void)
{
    memset((void *)&g_sys_fw_update, 0, sizeof(SYS_FW_UPDATE_t));
    g_sys_fw_update.sla_sta.mode = 0;
}

#if 0
bool_t sys_version_reg_get(unsigned char *p_val)
{
    *p_val = (unsigned char)SYS_SLA_VERSION;
    return 1;
}


bool_t sys_reg_read(unsigned char reg, unsigned char *p_val)
{
    bool_t ret = FALSE;
    switch (reg)
    {
        case SYS_VERSION_REG         :
            ret = sys_version_reg_get(p_val);
            break;

        case SYS_CONTROL_0_REG       :
            ret = sys_control_0_reg_get(p_val);
            break;

        case SYS_SRC_PWR_PROFILE_REG :
            ret = sys_src_pwr_profile_reg_get(p_val);
            break;

        case SYS_SNK_PWR_PROFILE_REG :
            ret = sys_snk_pwr_profile_reg_get(p_val);
            break;

        case SYS_BATTERY_CAP_REG     :
            ret = sys_battery_cap_reg_get(p_val);
            break;

        case SYS_EVENT_0_REG         :
            ret = sys_event_0_reg_get(p_val);
            break;

        case SYS_EVENT_1_REG         :
            ret = sys_event_1_reg_get(p_val);
            break;

        case SYS_CONTROL_1_REG       :
            ret = sys_control_1_reg_get(p_val);
            break;

        case SYS_OPERATING_PWR_REG   :
            ret = sys_operating_pwr_reg_get(p_val);
            break;

        case SYS_NTC_VAL_0_REG      :
            ret = sys_ntc_val_0_reg_get(p_val);
            break;
        case SYS_TYPE_C_CTRL_REG     :
            ret = sys_type_c_ctrl_reg_get(p_val);
            break;

        case SYS_PD_CTRL_REG         :
            ret = sys_pd_ctrl_reg_get(p_val);
            break;

        case SYS_QC_CTRL_REG         :
            ret = sys_qc_ctrl_reg_get(p_val);
            break;

        case SYS_ADV_CTRL_0_REG      :
            ret = sys_adv_ctrl_0_reg_get(p_val);
            break;

        case SYS_ADV_CTRL_1_REG      :
            ret = sys_adv_ctrl_1_reg_get(p_val);
            break;

        case SYS_PDO_CTRL_REG        :
            ret = sys_pdo_ctrl_reg_get(p_val);
            break;

        case SYS_PDO_BYTE_0_REG      :
            ret = sys_pdo_byte_0_reg_get(p_val);
            break;

        case SYS_TYPE_C_STATUS_0_REG :     
            ret = sys_type_c_status_0_reg_get(p_val);
            break;

        case SYS_PD_STATUS_REG       :
            ret = sys_pd_status_reg_get(p_val);
            break;

        case SYS_QC_STATUS_REG       :
            ret = sys_qc_status_reg_get(p_val);
            break;

        case SYS_TYPE_C_STATUS_1_REG :
            ret = sys_type_c_status_1_reg_get(p_val);
            break;

        case SYS_PE_STATUS_REG       :
            ret = sys_pe_status_reg_get(p_val);
            break;

        case SYS_VBUS_VAL_0_REG      :
            ret = sys_vbus_val_0_reg_get(p_val);
            break;

        case SYS_IBUS_VAL_0_REG      :
            ret = sys_ibus_val_0_reg_get(p_val);
            break;

        case SYS_CHIP_REG_CTRL_REG   :
            ret = sys_chip_reg_ctrl_reg_get(p_val);
            break;

        case SYS_CHIP_REG_ADDR_0_REG :
            ret = sys_chip_reg_addr_0_reg_get(p_val);
            break;

        case SYS_CHIP_REG_VAL_0_REG  :
            ret = sys_chip_reg_val_0_reg_get(p_val);
            break;


        case SYS_CHIP_ADC_CTRL_REG   :
            ret = sys_chip_adc_ctrl_reg_get(p_val);
            break;

        case SYS_CHIP_ADC_VAL_0_REG  :
            ret = sys_chip_adc_val_0_reg_get(p_val);
            break;

        default:
            break;
    }
    return ret;
}

bool_t sys_reg_write(unsigned char reg, unsigned char *p_val)
{
    bool_t ret = FALSE;
    switch (reg)
    {
        case SYS_CONTROL_0_REG       :
            ret = sys_control_0_reg_set(p_val);
            break;

        case SYS_SRC_PWR_PROFILE_REG :
            ret = sys_src_pwr_profile_reg_set(p_val);
            break;

        case SYS_SNK_PWR_PROFILE_REG :
            ret = sys_snk_pwr_profile_reg_set(p_val);
            break;

        case SYS_BATTERY_CAP_REG     :
            ret = sys_battery_cap_reg_set(p_val);
            break;

        case SYS_EVENT_0_REG         :
            ret = sys_event_0_reg_set(p_val);
            break;

        case SYS_EVENT_1_REG         :
            ret = sys_event_1_reg_set(p_val);
            break;

        case SYS_CONTROL_1_REG       :
            ret = sys_control_1_reg_set(p_val);
            break;

        case SYS_NTC_VAL_0_REG      :
            ret = sys_ntc_val_0_reg_set(p_val);
            break;

        case SYS_NTC_VAL_1_REG      :
            ret = sys_ntc_val_1_reg_set(p_val);
            break;


        case SYS_TYPE_C_CTRL_REG     :
            ret = sys_type_c_ctrl_reg_set(p_val);
            break;

        case SYS_PD_CTRL_REG         :
            ret = sys_pd_ctrl_reg_set(p_val);
            break;

        case SYS_QC_CTRL_REG         :
            ret = sys_qc_ctrl_reg_set(p_val);
            break;

        case SYS_ADV_CTRL_0_REG      :
            ret = sys_adv_ctrl_0_reg_set(p_val);
            break;

        case SYS_ADV_CTRL_1_REG      :
            ret = sys_adv_ctrl_1_reg_set(p_val);
            break;

        case SYS_PDO_CTRL_REG        :
            ret = sys_pdo_ctrl_reg_set(p_val);
            break;

        case SYS_PDO_BYTE_0_REG      :
            ret = sys_pdo_byte_0_reg_set(p_val);
            break;

        case SYS_PDO_BYTE_1_REG      :
            ret = sys_pdo_byte_1_reg_set(p_val);
            break;

        case SYS_PDO_BYTE_2_REG      :
            ret = sys_pdo_byte_2_reg_set(p_val);
            break;

        case SYS_PDO_BYTE_3_REG      :
            ret = sys_pdo_byte_3_reg_set(p_val);
            break;

        case SYS_CHIP_REG_CTRL_REG   :
            ret = sys_chip_reg_ctrl_reg_set(p_val);
            break;

        case SYS_CHIP_REG_ADDR_0_REG :
            ret = sys_chip_reg_addr_0_reg_set(p_val);
            break;

        case SYS_CHIP_REG_ADDR_1_REG :
            ret = sys_chip_reg_addr_1_reg_set(p_val);
            break;

        case SYS_CHIP_REG_ADDR_2_REG :
            ret = sys_chip_reg_addr_2_reg_set(p_val);
            break;

        case SYS_CHIP_REG_ADDR_3_REG :
            ret = sys_chip_reg_addr_3_reg_set(p_val);
            break;

        case SYS_CHIP_REG_VAL_0_REG  :
            ret = sys_chip_reg_val_0_reg_set(p_val);
            break;

        case SYS_CHIP_REG_VAL_1_REG  :
            ret = sys_chip_reg_val_1_reg_set(p_val);
            break;

        case SYS_CHIP_REG_VAL_2_REG  :
            ret = sys_chip_reg_val_2_reg_set(p_val);
            break;

        case SYS_CHIP_REG_VAL_3_REG  :
            ret = sys_chip_reg_val_3_reg_set(p_val);
            break;

        case SYS_CHIP_ADC_CTRL_REG   :
            ret = sys_chip_adc_ctrl_reg_set(p_val);
            break;
        case SYS_FW_UPDATE_CMD_REG   :
            ret = sys_fw_update_cmd_reg_set(p_val);
            break;
        default:
            break;
    }
    return ret;
}
#endif

