Browse Source

1. 新增ufcs功能。

2. 修改QC协议的OCP点。
3. 先关闭QC3.0,有需要再打开
master
Jipeng.tang 1 month ago
parent
commit
b71066d711
  1. 18
      .vscode/settings.json
  2. 6
      PD_CPS8841H_33W/code/app/inc/config.h
  3. 19
      PD_CPS8841H_33W/code/app/inc/dpdm_run.h
  4. 8
      PD_CPS8841H_33W/code/app/src/app_porta.c
  5. 14
      PD_CPS8841H_33W/code/app/src/comm_event.c
  6. 32
      PD_CPS8841H_33W/code/app/src/customized.c
  7. 194
      PD_CPS8841H_33W/code/app/src/dpdm_run.c
  8. 15
      PD_CPS8841H_33W/code/app/src/porta_detect.c
  9. 4
      PD_CPS8841H_33W/code/component/inc/comp_dpdn_manager.h
  10. 4
      PD_CPS8841H_33W/code/component/inc/comp_protocol_manager.h
  11. 28
      PD_CPS8841H_33W/code/component/src/comp_otp_derate_policy.c
  12. 2
      PD_CPS8841H_33W/code/component/src/comp_pd_manager.c
  13. 6
      PD_CPS8841H_33W/code/component/src/comp_protection.c
  14. 7
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_send_new_src_cap.h
  15. 8
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_protocol.c
  16. 17
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_send_new_src_cap.c
  17. 26
      PD_CPS8841H_33W/code/platform/protocol/qc_protocol/src/qc_protocol.c
  18. 11
      PD_CPS8841H_33W/code/platform/protocol/ufcs_protocol/inc/ufcs_protocol.h
  19. 35
      PD_CPS8841H_33W/code/platform/protocol/ufcs_protocol/src/ufcs_protocol.c
  20. 2
      PD_CPS8841H_33W/code/platform/rom_inc/comp/comp_config.h
  21. 2
      PD_CPS8841H_33W/code/prl_portable/inc/pd.h
  22. 15
      PD_CPS8841H_33W/code/prl_portable/inc/ufcs.h
  23. 2
      PD_CPS8841H_33W/code/prl_portable/src/pd.c
  24. 211
      PD_CPS8841H_33W/code/prl_portable/src/ufcs.c
  25. 10
      PD_CPS8841H_33W/project/cps8841H.uvprojx

18
.vscode/settings.json

@ -3,6 +3,22 @@
"drv_analog.h": "c",
"iterator": "c",
"comp_protocol_manager.h": "c",
"comp_sample_volt_cur_report.h": "c"
"comp_sample_volt_cur_report.h": "c",
"bit": "c",
"compare": "c",
"condition_variable": "c",
"cstddef": "c",
"string": "c",
"optional": "c",
"limits": "c",
"memory": "c",
"mutex": "c",
"new": "c",
"functional": "c",
"__locale": "c",
"atomic": "c",
"ios": "c",
"locale": "c",
"type_traits": "c"
}
}

6
PD_CPS8841H_33W/code/app/inc/config.h

@ -114,16 +114,16 @@ extern user_app_s user_app;
#define QC_SUPPORT 1
#if QC_SUPPORT
#define QC3P0_SUPPORT 1
#define QC3P0_SUPPORT 0
#endif/**QC_SUPPORT**/
#endif/**QC_SCP_SUPPORT**/
#define UFCS_SUPPORT 0
#define UFCS_SUPPORT 1
#if UFCS_SUPPORT
#define UFCS_DERATE_SUPPORT 0
#define UFCS_DERATE_SUPPORT 1
#endif/**UFCS_SUPPORT**/
#define APPLE_MODE_SUPPORT 0

19
PD_CPS8841H_33W/code/app/inc/dpdm_run.h

@ -1,6 +1,20 @@
#ifndef __DPDM_H_
#define __DPDM_H_
#include "scp_protocol.h"
#include "ufcs_protocol.h"
typedef enum
{
DPDM_SRC_STATE_IDLE = 0,
DPDM_SRC_STATE_APPLE,
DPDM_SRC_STATE_BC,
DPDM_SRC_STATE_QC_PRE,
DPDM_SRC_STATE_QC,
DPDM_SRC_STATE_SCP,
DPDM_SRC_STATE_UFCS,
DPDM_SRC_STATE_RST,
DPDM_SRC_STATE_NUM
} dpdm_src_state_e;
void dpdm_init(void);
void dpdm_time_run(void);
@ -8,4 +22,9 @@ void dpdm_run(void);
scp_port_s *dpdm_get_scp_port(void);
void dpdm_reset(void);
#if UFCS_SUPPORT
ufcs_port_s *dpdm_get_ufcs_port(void);
void ufcs_dpdn_ovp(void);
void dpdn_mgr_enable_dpdn_prl(uint8_t en);
#endif
#endif // end of __DPDM_H_

8
PD_CPS8841H_33W/code/app/src/app_porta.c

@ -87,8 +87,8 @@ static void app_porta_detect_work(void)
if(attached)
{
// 需要判断当前C口走的是什么协议, 再去更新对应的能力. 更新typeC的src_cap
pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[1]);
pd_restart_send_src_cap(&g_pd_port, 1);
// pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_20W], SRC_CAP_20W);
// pd_restart_send_src_cap(&g_pd_port);
usba_plugin_detect_deinit();
usba_plugout_detect_init();
@ -97,8 +97,8 @@ static void app_porta_detect_work(void)
else
{
// 更新typeC的src_cap
pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[0]);
pd_restart_send_src_cap(&g_pd_port, 0);
// pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_30W], SRC_CAP_30W);
// pd_restart_send_src_cap(&g_pd_port);
usba_plugout_detect_deinit();
usba_plugin_detect_init(USBA_PLUGIN_DETECT_LEVEL_LOW);

14
PD_CPS8841H_33W/code/app/src/comm_event.c

@ -5,6 +5,7 @@
#include "comp_powerout.h"
#include "comp_protocol_manager.h"
#include "comp_sample_volt_cur_report.h"
#include "pd.h"
// 端口状态机
void port_status_run(void)
@ -65,6 +66,12 @@ void port_status_run(void)
{
port_process_status = port_exit_status;
if(g_pd_port.pd_new_src_pdo != SRC_CAP_30W)
{
pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_30W], SRC_CAP_30W);
pd_restart_send_src_cap(&g_pd_port);
}
// 单C口时, 常开buck, 关闭gateA, 等A口有拉电流才反过来
buck_control(true);
dpdm_power_a1_gate_enable(false);
@ -97,13 +104,18 @@ void port_status_run(void)
{
port_process_status = port_exit_status;
if(g_pd_port.pd_new_src_pdo != SRC_CAP_20W)
{
pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_20W], SRC_CAP_20W);
pd_restart_send_src_cap(&g_pd_port);
}
if(g_powerout_info.set_vol < VOLTAGE_5P5V
&& (get_adp_curr_sample_volt() < VOLTAGE_5P5V))
{
// 加大电流--->开gateA--->关buck
// comp_powerout_prl_set_cur(CURRENT_5A);
comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置
// 是否有可能电流环设置的没那么快, 一打开gateA就被拉挂了? 需要加个延迟等电流环设置完再开A?
// drv_delay_us(500);
// drv_delay_ms(5);

32
PD_CPS8841H_33W/code/app/src/customized.c

@ -1027,29 +1027,29 @@ const ufcs_power_change_capabilities_u DERATE_POWER_CHANGE_PDO[] =
#endif
const ufcs_config_init_s UFCS_INIT_CONFIG[][PORT_TYPE_DUAL_PORT] =
{
{
// const ufcs_config_init_s UFCS_INIT_CONFIG[][PORT_TYPE_DUAL_PORT] =
// {
// {
{
.prl_supported = true,
// {
// .prl_supported = true,
.ufcs_out_mode_info = UFCS_OUT_MODE_INFO,
// .ufcs_out_mode_info = UFCS_OUT_MODE_INFO,
.device_information = DEVICE_INFO,
// .device_information = DEVICE_INFO,
#if UFCS_DERATE_SUPPORT
.def_power_change_pdo = &DEF_POWER_CHANGE_PDO[0],
.derate_power_change_pdo = &DERATE_POWER_CHANGE_PDO[0],
#endif
.prl_common_ops = &PRL_COMMON_OPS
// #if UFCS_DERATE_SUPPORT
// .def_power_change_pdo = &DEF_POWER_CHANGE_PDO[0],
// .derate_power_change_pdo = &DERATE_POWER_CHANGE_PDO[0],
// #endif
// .prl_common_ops = &PRL_COMMON_OPS
}
}
// }
// }
};
// };
#endif
// #endif
#if PD_SUPPORT

194
PD_CPS8841H_33W/code/app/src/dpdm_run.c

@ -13,19 +13,10 @@
#include "drv_gpio.h"
#include "afc.h"
#include "comp_cable_compensation.h"
#include "ufcs_protocol.h"
#include "ufcs.h"
#include "comp_gpio.h"
typedef enum
{
DPDM_SRC_STATE_IDLE = 0,
DPDM_SRC_STATE_APPLE,
DPDM_SRC_STATE_BC,
DPDM_SRC_STATE_QC_PRE,
DPDM_SRC_STATE_QC,
DPDM_SRC_STATE_SCP,
DPDM_SRC_STATE_RST,
DPDM_SRC_STATE_NUM
} dpdm_src_state_e;
static uint16_t dp_power_down_discern(scp_port_s *scp_port);
@ -41,6 +32,9 @@ const static sm_state_t *Dpdm_Src_Qc_Run(const sm_state_t *self, void *data);
const static sm_state_t *Dpdm_Src_Scp_Run(const sm_state_t *self, void *data);
static void Dpdm_Src_Rst_Entry(void *data);
const static sm_state_t *Dpdm_Src_Rst_Run(const sm_state_t *self, void *data);
#if UFCS_SUPPORT
const static sm_state_t *Dpdm_Src_Ufcs_Run(const sm_state_t *self, void *data);
#endif
// clang-format off
static const sm_state_t g_dpdm_state[DPDM_SRC_STATE_NUM] =
@ -51,6 +45,9 @@ static const sm_state_t g_dpdm_state[DPDM_SRC_STATE_NUM] =
[DPDM_SRC_STATE_QC_PRE] = {Dpdm_Src_Qc_Pre_Entry, Dpdm_Src_Qc_Pre_Run},
[DPDM_SRC_STATE_QC] = {0, Dpdm_Src_Qc_Run},
[DPDM_SRC_STATE_SCP] = {0, Dpdm_Src_Scp_Run},
#if UFCS_SUPPORT
[DPDM_SRC_STATE_UFCS] = {0, Dpdm_Src_Ufcs_Run},
#endif
[DPDM_SRC_STATE_RST] = {Dpdm_Src_Rst_Entry, Dpdm_Src_Rst_Run},
};
// clang-format on
@ -62,6 +59,9 @@ typedef struct dpdm_src_handshake
hvdcp_port_s bc_port;
qc_port_s qc_port;
scp_port_s scp_port;
#if UFCS_SUPPORT
ufcs_port_s ufcs_port;
#endif
uint32_t time_p;
uint16_t timer;
uint8_t dpdm_port;
@ -100,6 +100,12 @@ static void Dpdm_State_Switching(const sm_state_t *self, void *data)
case DPDM_SRC_STATE_SCP:
log_info("DPDM_SRC_STATE_SCP\n");
break;
#if UFCS_SUPPORT
case DPDM_SRC_STATE_UFCS:
log_info("DPDM_SRC_STATE_UFCS\n");
break;
#endif
case DPDM_SRC_STATE_RST:
log_info("DPDM_SRC_STATE_RST\n");
@ -119,28 +125,6 @@ void gp1_sample_init(void)
void buck_init(void)
{
// REG_CLKCTRL_PIN_MUL_SET->bf.gp2 = 3;
// drv_gpio_enable_out(GPIO_PIN2);
// REG_ANALOG_GP->bf.aie |= (1 << GPIO_PIN2);
// drv_gpio_write(GPIO_PIN2, true);
// drv_gpio_pull_up_resistor_en(GP2, 1);
// REG_CLKCTRL_PIN_MUL_SET->bf.gp1 = 3;
// drv_gpio_enable_out(GPIO_PIN1);
// drv_gpio_write(GPIO_PIN1, true);
// drv_gpio_pull_up_resistor_en(GP1, 1);
/* vd 引脚用来当普通GPIO口 */
// REG_CLKCTRL_PIN_MUL_SET->bf.vd = 3;
// drv_gpio_pull_up_resistor_en(VD, 1);
// drv_gpio_enable_out(GPIO_PIN0);
// drv_analog_vd_res_en(false);
// /* FB引脚当普通IO口 */
// REG_CLKCTRL_PIN_MUL_SET->bf.rt2 = 3;
// drv_gpio_pull_up_resistor_en(RT2, 1);
// drv_gpio_enable_out(GPIO_PIN3);
// RT4当dcdc使能引脚 buck是低电平使能
REG_CLKCTRL_PIN_MUL_SET->bf.gp2 = 3;
drv_gpio_pull_up_resistor_en(GP2, 1);
@ -165,6 +149,9 @@ void dpdm_time_run(void)
hvdcp_prl_timer(&p->bc_port);
qc_prl_timer(&p->qc_port);
scp_prl_timer(&p->scp_port);
#if UFCS_SUPPORT
ufcs_prl_timer(&p->ufcs_port);
#endif
p->time_p++;
if(p->timer)
@ -183,6 +170,10 @@ static void Dpdm_Src_Idle_Entry(void *data)
{
dpdm_t *p = (dpdm_t *)data;
p->timer = 0;
#if UFCS_SUPPORT
ufcs_port_init(&p->ufcs_port);
#endif
}
const static sm_state_t *Dpdm_Src_Idle_Run(const sm_state_t *self, void *data)
@ -210,6 +201,24 @@ const static sm_state_t *Dpdm_Src_Apple_Run(const sm_state_t *self, void *data)
dpdm_src_state_e dpdm_state = DPDM_SRC_STATE_APPLE;
apple_port_prl_stack_run(&p->applp_port);
#if UFCS_SUPPORT
// 没进ufcs状态机前, 收到hard_reset都不响应, 直接清零
if(p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset)
{
p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset = 0;
}
ufcs_port_prl_stack_run(&p->ufcs_port);
if(dpdm_power_get_next_protocol() == PROTOCOL_UFCS) // 在ping成功时会置为ufcs协议,ufcs_handshake_ping_callback_patch
{
dpdm_state = DPDM_SRC_STATE_UFCS;
}
#endif
if(dpdm_power_get_next_protocol() == PROTOCOL_DCP)
{
apple_port_enable_apple(&p->applp_port, false);
@ -231,6 +240,24 @@ const static sm_state_t *Dpdm_Src_Bc_Run(const sm_state_t *self, void *data)
dpdm_src_state_e dpdm_state = DPDM_SRC_STATE_BC;
hvdcp_prl_stack_run(&p->bc_port);
#if UFCS_SUPPORT
// 没进ufcs状态机前, 收到hard_reset都不响应, 直接清零
if(p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset)
{
p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset = 0;
}
// 在下面这个函数里进行2828握手成功判断
ufcs_port_prl_stack_run(&p->ufcs_port);
if(dpdm_power_get_next_protocol() == PROTOCOL_UFCS) // 在ping成功时会置为ufcs协议,ufcs_handshake_ping_callback_patch
{
dpdm_state = DPDM_SRC_STATE_UFCS;
}
#endif
if(dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE)
{
dpdm_state = DPDM_SRC_STATE_QC_PRE;
@ -256,6 +283,23 @@ const static sm_state_t *Dpdm_Src_Qc_Pre_Run(const sm_state_t *self, void *data)
qc_prl_stack_run(&p->qc_port);
scp_prl_stack_run(&p->scp_port);
#if UFCS_SUPPORT
// 没进ufcs状态机前, 收到hard_reset都不响应, 直接清零
if(p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset)
{
p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset = 0;
}
ufcs_port_prl_stack_run(&p->ufcs_port);
if(dpdm_power_get_next_protocol() == PROTOCOL_UFCS) // 在ping成功时会置为ufcs协议,ufcs_handshake_ping_callback_patch
{
dpdm_state = DPDM_SRC_STATE_UFCS;
}
#endif
if(dp_power_down_discern(&p->scp_port))
{
dpdm_state = DPDM_SRC_STATE_RST;
@ -303,6 +347,25 @@ const static sm_state_t *Dpdm_Src_Scp_Run(const sm_state_t *self, void *data)
return &g_dpdm_state[dpdm_state];
}
#if UFCS_SUPPORT
const static sm_state_t *Dpdm_Src_Ufcs_Run(const sm_state_t *self, void *data)
{
dpdm_t *p = (dpdm_t *)data;
dpdm_src_state_e dpdm_state = DPDM_SRC_STATE_UFCS;
// ufcs_reset
if(p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.ufcs_reset)
{
log_info("ufcs_reset\n");
dpdm_state = DPDM_SRC_STATE_RST;
}
ufcs_port_prl_stack_run(&p->ufcs_port);
return &g_dpdm_state[dpdm_state];
}
#endif
static void Dpdm_Src_Rst_Entry(void *data)
{
dpdm_t *p = (dpdm_t *)data;
@ -390,3 +453,68 @@ void DPDN_COMP_Handler(void)
is_last_dp = is_dp;
is_last_dm = is_dm;
}
#if UFCS_SUPPORT
void ufcs_dpdn_ovp(void)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
p->ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_pe_event_flag.bits.dn_over_voltage_flag = true;
}
void dpdn_mgr_enable_dpdn_prl(uint8_t en)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
ufcs_port_enable_ufcs(&p->ufcs_port, en);
}
void dpdm_mgr_ufcs_rx_handler(uint8_t port_num)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
ufcs_port_rx_handler(&p->ufcs_port);
}
void dpdm_mgr_ufcs_tx_handler(uint8_t port_num)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
ufcs_port_tx_handler(&p->ufcs_port);
}
ufcs_port_s *dpdm_get_ufcs_port(void)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
return &p->ufcs_port;
}
void dpdn_mgr_ufcs_hdsk_pluse_handler(uint8_t port_num)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
ufcs_port_hdsk_pluse_handler(&p->ufcs_port);
}
void PWD_Handler(void)
{
dpdm_t *p = (dpdm_t *)&g_dpdm;
dpdm_src_state_e current_protocol = (dpdm_src_state_e)((p->sm.current_state - g_dpdm_state));
if(drv_extint_pwd1_read() & REG_EXTINT_VAL_BIT)
{
drv_extint_pwd1_mask_set(REG_EXTINT_CLR_BIT); //clr
if(current_protocol == DPDM_SRC_STATE_APPLE
|| current_protocol == DPDM_SRC_STATE_BC
|| current_protocol == DPDM_SRC_STATE_QC_PRE
|| current_protocol == DPDM_SRC_STATE_UFCS)
{
#if UFCS_SUPPORT
dpdn_mgr_ufcs_hdsk_pluse_handler(ADP_PORT0); // 参数并没有用到
#endif
}
}
}
#endif

15
PD_CPS8841H_33W/code/app/src/porta_detect.c

@ -70,6 +70,17 @@ void usba_plugin_detect_init(uint8_t level)
det_data->level = level;
det_data->last_time = get_sys_time();
det_data->attached = 0;
// 配置小电流寄存器
drv_analog_usba_detach_config(
USBA_DETACH_CFG(true, USBA_DETACH_REF_100UV, USBA_DETACH_CLK_10K,
USBA_DETACH_WIDTH_75MS));
// 配置完小电流寄存器后要等生效
drv_delay_ms(100);
// log_info("usba_plugin_detect_init\n");
}
void usba_plugin_detect_deinit(void)
@ -145,10 +156,6 @@ bool usba_plugin_detect(void)
void usba_plugout_detect_init(void)
{
usba_det_s *det_data = &g_usba_det_data;
drv_analog_usba_detach_config(
USBA_DETACH_CFG(true, USBA_DETACH_REF_100UV, USBA_DETACH_CLK_10K,
USBA_DETACH_WIDTH_75MS));
det_data->attached = true;
det_data->last_time = get_sys_time();
}

4
PD_CPS8841H_33W/code/component/inc/comp_dpdn_manager.h

@ -15,7 +15,7 @@
apple_port_get_apple_supported()
void dpdn_mgr_enable_dpdn_prl(uint8_t port_num, uint8_t en);
// void dpdn_mgr_enable_dpdn_prl(uint8_t port_num, uint8_t en);
void dpdn_mgr_prl_init(uint8_t port_num, uint8_t port_type);
void dpdn_mgr_prl_deinit(uint8_t port_num, uint8_t port_type, uint8_t scp_reset_mode);
void dpdn_mgr_prl_stack_run(uint8_t port_num);
@ -33,7 +33,7 @@ void dpdn_mgr_enable_hvdcp_prl(uint8_t port_num, uint8_t en);
void dpdn_mgr_ufcs_hdsk_pluse_handler(uint8_t port_num);
void dpdm_mgr_ufcs_rx_handler(uint8_t port_num);
void dpdm_mgr_ufcs_tx_handler(uint8_t port_num);
void dpdm_mgr_ufcs_send_power_change(uint8_t port_num, const ufcs_power_change_capabilities_u *new_power_change);
//void dpdm_mgr_ufcs_send_power_change(uint8_t port_num, const ufcs_power_change_capabilities_u *new_power_change);
const ufcs_config_init_s * dpdm_mgr_get_ufcs_cur_config(uint8_t port_num);
void dpdm_mgr_scp_handler(uint8_t port_num);

4
PD_CPS8841H_33W/code/component/inc/comp_protocol_manager.h

@ -27,7 +27,9 @@ static bool buck_state;
#define PROTOCOL_SCP 7
#define PROTOCOL_FCP 8
#define PROTOCOL_AFC 9
#if UFCS_SUPPORT
#define PROTOCOL_UFCS 10
#endif
void dpdm_power_set(uint16_t vset, uint16_t iset);
void dpdm_power_gate_enable(bool is_en);

28
PD_CPS8841H_33W/code/component/src/comp_otp_derate_policy.c

@ -27,13 +27,13 @@ void comp_otp_derate_policy_task(void)
g_curr_derate = g_protection_param.otp_derate;
#if UFCS_DERATE_SUPPORT
const ufcs_config_init_s *ufcs_config;
const ufcs_power_change_capabilities_u *power_change;
// #if UFCS_DERATE_SUPPORT
// const ufcs_config_init_s *ufcs_config;
// const ufcs_power_change_capabilities_u *power_change;
ufcs_config = dpdm_mgr_get_ufcs_cur_config(ADP_PORT0);
// ufcs_config = dpdm_mgr_get_ufcs_cur_config(ADP_PORT0);
#endif
// #endif
#if PD_DERATE_SUPPORT
const pd_config_init_s *pd_config;
@ -47,9 +47,9 @@ void comp_otp_derate_policy_task(void)
#if PD_DERATE_SUPPORT
pd_new_src_pdo = pd_config->derate_src_cap_info;
#endif
#if UFCS_DERATE_SUPPORT
power_change = ufcs_config->derate_power_change_pdo;
#endif
// #if UFCS_DERATE_SUPPORT
// power_change = ufcs_config->derate_power_change_pdo;
// #endif
}
else
{
@ -57,9 +57,9 @@ void comp_otp_derate_policy_task(void)
pd_new_src_pdo = NULL;
#endif
#if UFCS_DERATE_SUPPORT
power_change = ufcs_config->def_power_change_pdo;
#endif
// #if UFCS_DERATE_SUPPORT
// power_change = ufcs_config->def_power_change_pdo;
// #endif
}
@ -71,9 +71,9 @@ void comp_otp_derate_policy_task(void)
g_scp_rega5_derating_ratio = SCP_DERATE_A5_NUM[g_curr_derate];
#endif
#if UFCS_DERATE_SUPPORT
dpdm_mgr_ufcs_send_power_change(ADP_PORT0, power_change);
#endif
// #if UFCS_DERATE_SUPPORT
// dpdm_mgr_ufcs_send_power_change(ADP_PORT0, power_change);
// #endif
}

2
PD_CPS8841H_33W/code/component/src/comp_pd_manager.c

@ -18,7 +18,7 @@ const pd_pdo_info_s PD_DEFAULT_CAP_INFO[] =
},
{
.pdo_cnt = 4,
.pdo_cnt = 2,
.src_pdp = 20,
.pdo0 = PD_SRC_FPS_PDO(VOLTAGE_5V, CURRENT_3A, PD_SRC_FPS_FLAGS),
.pdo1 = PD_SRC_FPS_PDO(VOLTAGE_9V, CURRENT_2P22A, 0),

6
PD_CPS8841H_33W/code/component/src/comp_protection.c

@ -19,6 +19,7 @@
#include "comp_discharge.h"
#include "comp_lps_protect.h"
#include "comp_usba_port_detect.h"
#include "dpdm_run.h"
protection_param_s g_protection_param = {0};
@ -285,10 +286,11 @@ void comp_protection_monitor(protection_param_s *protection_param)
if(index == PROT_DN_WET)
{
if(get_adp_prl_mgr_cur_prl() == PROTOCOL_UFCS)
if(dpdm_power_get_next_protocol() == PROTOCOL_UFCS)
{
comp_powerout_close_nmos();
ufcs_prl_dn_over_volt(true);
// ufcs_prl_dn_over_volt(true);
ufcs_dpdn_ovp();
break;
}
}

7
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_send_new_src_cap.h

@ -4,9 +4,10 @@
#include "pd_protocol.h"
#include "config.h"
#define SRC_CAP_30W 0
#define SRC_CAP_20W 1
void pd_new_src_cap_update_work(pd_port_s *pd_port);
void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo);
void pd_restart_send_src_cap(pd_port_s *pd_port, uint8_t idx);
void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo, uint8_t src_cap_idx);
void pd_restart_send_src_cap(pd_port_s *pd_port);
#endif

8
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_protocol.c

@ -22,14 +22,14 @@ static void pd_protocol_config_init(pd_port_s *pd_port)
pd_param_s *pd_param = &pd_port->pd_prl_param;
uint8_t ac_high_sta;
// uint8_t ac_high_sta;
ac_high_sta = *config->prl_common_ops->ac_high_sta;
// ac_high_sta = *config->prl_common_ops->ac_high_sta;
pd_dpm_update_source_cap(pd_port, &config->src_cap_info[ac_high_sta]);
// pd_dpm_update_source_cap(pd_port, &config->src_cap_info[ac_high_sta], SRC_CAP_30W);
pd_dpm_update_source_cap(pd_port, config->src_cap_info);
pd_dpm_update_source_cap(pd_port, config->src_cap_info, SRC_CAP_30W);
memcpy(&pd_param->pd_assist.pd_ppssdb, &config->pd_ppssdb,
sizeof(config->pd_ppssdb));

17
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_send_new_src_cap.c

@ -1,10 +1,13 @@
#include "pd_send_new_src_cap.h"
void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo)
void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo, uint8_t src_cap_idx)
{
pd_param_s *pd_param = &pd_port->pd_prl_param;
pd_port->pd_new_src_pdo = src_cap_idx;
log_info("updata src_cap:%d\n", src_cap_idx);
pd_param->pd_assist.src_cap_send.pdo_cnt = pdo->pdo_cnt;
memcpy(&pd_param->pd_assist.src_cap_send.pd_pdos[0].byte, &pdo->pdo0, 28);
//src ext
@ -14,14 +17,8 @@ void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo)
pd_port->pd_old_src_pdo = pdo;
}
void pd_restart_send_src_cap(pd_port_s *pd_port, uint8_t idx)
void pd_restart_send_src_cap(pd_port_s *pd_port)
{
if(idx == pd_port->pd_new_src_pdo)
{
return;
}
pd_port->pd_new_src_pdo = idx;
pd_port->pd_send_new_src_cap_enable = true;
}
@ -48,7 +45,9 @@ void pd_new_src_cap_update_work(pd_port_s *pd_port)
(pd_param->pd_pe_status.pe_status == PE_SRC_Startup)
)
{
pd_dpm_update_source_cap(pd_port, &pd_port->pd_curr_config->src_cap_info[pd_port->pd_new_src_pdo]);
pd_dpm_update_source_cap(pd_port,
&pd_port->pd_curr_config->src_cap_info[pd_port->pd_new_src_pdo],
pd_port->pd_new_src_pdo);
pd_port->pd_send_new_src_cap_enable = false;

26
PD_CPS8841H_33W/code/platform/protocol/qc_protocol/src/qc_protocol.c

@ -58,16 +58,12 @@ void qc_voltage_request_work(qc_port_s *qc_port)
if(qc_param->qc_assist.request_vol == 5000)
{
iset = CURRENT_2P3A;
if(port_a1_is_attached() && typec_is_attched())
{
iset = CURRENT_3P4A;
}
iset = CURRENT_3P3A;
// A + C 且都在5V时, 在powerout里会把电流设为5.5A
}
else if(qc_param->qc_assist.request_vol == 9000)
{
iset = CURRENT_2P3A;
iset = CURRENT_3P3A;
if(port_a1_is_attached() && typec_is_attched())
{
@ -75,13 +71,21 @@ void qc_voltage_request_work(qc_port_s *qc_port)
}
}
else if(qc_param->qc_assist.request_vol >= 12000)
else if(qc_param->qc_assist.request_vol == 12000)
{
qc_param->qc_assist.request_vol = 12000;
iset = CURRENT_2P3A;
iset = CURRENT_2P8A;
if(port_a1_is_attached() && typec_is_attched())
{
iset = CURRENT_1P8A;
}
}
else if(qc_param->qc_assist.request_vol >= 20000)
{
qc_param->qc_assist.request_vol = 20000;
iset = CURRENT_1P8A;
if(port_a1_is_attached() && typec_is_attched())
{
qc_param->qc_assist.request_vol = 12000;
iset = CURRENT_1P8A;
}
}

11
PD_CPS8841H_33W/code/platform/protocol/ufcs_protocol/inc/ufcs_protocol.h

@ -14,6 +14,10 @@
#include "ufcs_app.h"
#include "config.h"
/******************UFCS*output_cap define*****************************/
#define UFCS_CAP_30W 0
#define UFCS_CAP_20W 1
typedef enum
{
UFCS_VOL_STEP_10MV = 0,
@ -109,12 +113,12 @@ typedef struct ufcs_config_init_s
#if UFCS_DERATE_SUPPORT
const ufcs_power_change_capabilities_u *def_power_change_pdo;
const ufcs_power_change_capabilities_u *derate_power_change_pdo;
// const ufcs_power_change_capabilities_u *derate_power_change_pdo;
#endif
void (*protection_exception_flag_set)(void);
const prl_common_ops_s *prl_common_ops;
// const prl_common_ops_s *prl_common_ops;
} ufcs_config_init_s;
@ -136,6 +140,8 @@ typedef struct ufcs_port_s
uint8_t port_num;
uint8_t current_cap_gear; // 뎠품도貫
} ufcs_port_s;
@ -147,5 +153,6 @@ void ufcs_prl_rx_handler(ufcs_port_s *ufcs_port);
void ufcs_prl_tx_handler(ufcs_port_s *ufcs_port);
void ufcs_prl_enable_ufcs(ufcs_port_s *ufcs_port, uint8_t en);
void ufcs_prl_timer(ufcs_port_s *ufcs_port);
void dcp_ufcs_run(ufcs_port_s *ufcs_port);
#endif

35
PD_CPS8841H_33W/code/platform/protocol/ufcs_protocol/src/ufcs_protocol.c

@ -11,7 +11,10 @@
#include "ufcs_protocol.h"
#include "ufcs.h"
#include "comp_primary_side.h"
#include "comp_sample_volt_cur_report.h"
#include "comp_temp_report.h"
/*
* @brief drv_dpdn1_short_staus_get
@ -37,15 +40,16 @@ static void ufcs_protocol_config_init(ufcs_port_s *ufcs_port, const ufcs_config_
{
ufcs_param_s *ufcs_param = &ufcs_port->ufcs_prl_param;
uint8_t ac_high_sta;
// uint8_t ac_high_sta;
ASSERT(config->prl_common_ops);
// ASSERT(config->prl_common_ops);
// ASSERT(config->prl_common_ops->ac_high_sta);
// ac_high_sta = *config->prl_common_ops->ac_high_sta;
ASSERT(config->prl_common_ops->ac_high_sta);
// ac_high_sta = g_edge_param.ac_high;
ac_high_sta = *config->prl_common_ops->ac_high_sta;
ufcs_dpm_update_out_mode(ufcs_param, &config->ufcs_out_mode_info[ac_high_sta]);
ufcs_dpm_update_out_mode(ufcs_param, &config->ufcs_out_mode_info[0]);
memcpy(&ufcs_param->ufcs_assist.device_information.byte[0], &config->device_information->byte[0], 8);
@ -63,10 +67,12 @@ void ufcs_prl_init(ufcs_port_s *ufcs_port)
{
ufcs_param_s *ufcs_param = &ufcs_port->ufcs_prl_param;
if(!ufcs_port->ufcs_curr_config->prl_supported)
{
return;
}
// if(!ufcs_port->ufcs_curr_config->prl_supported)
// {
// return;
// }
ufcs_port->ufcs_curr_config = UFCS_INIT_CONFIG;
ufcs_protocol_default_init(ufcs_param);
@ -133,10 +139,13 @@ static void patch_ufcs_prl_rx_check_msgnumber(ufcs_param_s *ufcs_param)
static void ufcs_prl_report_info_update(ufcs_param_s *ufcs_param, const ufcs_config_init_s *config)
{
ASSERT(config);
ufcs_param->ufcs_assist.ufcs_adc_vol = *config->prl_common_ops->adc_vol;
ufcs_param->ufcs_assist.ufcs_adc_cur = *config->prl_common_ops->adc_cur;
ufcs_param->ufcs_assist.ufcs_report_temp = *config->prl_common_ops->report_temp;
// ufcs_param->ufcs_assist.ufcs_adc_vol = *config->prl_common_ops->adc_vol;
// ufcs_param->ufcs_assist.ufcs_adc_cur = *config->prl_common_ops->adc_cur;
// ufcs_param->ufcs_assist.ufcs_report_temp = *config->prl_common_ops->report_temp;
ufcs_param->ufcs_assist.ufcs_adc_vol = get_adp_curr_sample_volt();
ufcs_param->ufcs_assist.ufcs_adc_cur = get_adp_curr_sample_cur();
ufcs_param->ufcs_assist.ufcs_report_temp = get_adp_curr_temp();
}

2
PD_CPS8841H_33W/code/platform/rom_inc/comp/comp_config.h

@ -17,7 +17,7 @@
#define CFG_ASSERT
// #define CFG_ASSERT
#define ASSERT_PRINT comp_uart2_sync_print

2
PD_CPS8841H_33W/code/prl_portable/inc/pd.h

@ -35,7 +35,7 @@ static inline void pd_port_typec_prl_handler(pd_port_s *pd_port)
static inline void pd_port_restart_send_src_cap(pd_port_s *pd_port, const pd_pdo_info_s *new_src_pdo)
{
pd_restart_send_src_cap(pd_port, 0);
pd_restart_send_src_cap(pd_port);
}

15
PD_CPS8841H_33W/code/prl_portable/inc/ufcs.h

@ -5,17 +5,17 @@
#include "config.h"
extern ufcs_port_s g_ufcs_port;
// extern ufcs_port_s g_ufcs_port;
#define ufcs_prl_get_ufcs_supported()\
(g_ufcs_prl_supported)
#define ufcs_prl_dn_over_volt(x)\
do{\
g_ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_pe_event_flag.bits.dn_over_voltage_flag = x;\
}while(0)
// #define ufcs_prl_dn_over_volt(x)\
// do{\
// g_ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_pe_event_flag.bits.dn_over_voltage_flag = x;\
// }while(0)
@ -23,7 +23,7 @@ extern ufcs_port_s g_ufcs_port;
void ufcs_port_init(ufcs_port_s *ufcs_port);
void ufcs_port_deinit(ufcs_port_s *ufcs_port);
void ufcs_port_trans_port_type_config(uint8_t port_num, uint8_t port_type);
ufcs_port_s *ufcs_get_ufcs_port(uint8_t port_num);
// ufcs_port_s *ufcs_get_ufcs_port(uint8_t port_num);
const ufcs_config_init_s * ufcs_get_ufcs_cur_config(uint8_t port_num);
void ufcs_port_dpdn_port_num_config(uint8_t dpdn_num);
void ufcs_port_send_power_change(ufcs_port_s *ufcs_port, const ufcs_power_change_capabilities_u *new_power_change);
@ -69,7 +69,8 @@ static inline void ufcs_port_tx_handler(ufcs_port_s *ufcs_port)
ufcs_prl_tx_handler(ufcs_port);
}
void dpdm_mgr_ufcs_send_power_change(const ufcs_power_change_capabilities_u *new_power_change);
extern const ufcs_config_init_s UFCS_INIT_CONFIG[PORT_TYPE_DUAL_PORT];
#endif

2
PD_CPS8841H_33W/code/prl_portable/src/pd.c

@ -118,7 +118,7 @@ bool app_src_power_handler_patch(pd_param_s *pd_param)
{
if(request_vol == VOLTAGE_20V)
{
offest = CURRENT_0P45A;
offest = CURRENT_0P35A;
}
else
{

211
PD_CPS8841H_33W/code/prl_portable/src/ufcs.c

@ -3,8 +3,10 @@
#include "comp_protocol_manager.h"
#include "comp_powerout.h"
#include "customized.h"
#include "comp_cable_compensation.h"
#include "dpdm_run.h"
ufcs_port_s g_ufcs_port;
// ufcs_port_s g_ufcs_port;
static void ufcs_handshake_ping_callback_patch(ufcs_param_s *ufcs_param);
@ -54,6 +56,127 @@ static const ufcs_phy_callback_s mtp_ufcs_phy_callback_func =
.send_ufcs_pkt = mtp_send_ufcs_pkt
};
#if UFCS_SUPPORT
/*********************UFCS************************************/
#define SCP_RS82 0x00
#define SCP_RS83 0xc3
const ufcs_out_mode_info_s UFCS_OUT_MODE_INFO[] =
{
// {
// .out_mode_cnt = 5,
// .mode1_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_5A, VOLTAGE_3P4V, VOLTAGE_5P5V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 1),
// .mode1_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_5A, VOLTAGE_3P4V, VOLTAGE_5P5V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 1),
// .mode2_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_6P6A, VOLTAGE_5P5V, VOLTAGE_10V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 2),
// .mode2_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_6P6A, VOLTAGE_5P5V, VOLTAGE_10V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 2),
// .mode3_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_6A, VOLTAGE_10V, VOLTAGE_11V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 3),
// .mode3_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_6A, VOLTAGE_10V, VOLTAGE_11V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 3),
// .mode4_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_3P25A, VOLTAGE_11V, VOLTAGE_20V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 4),
// .mode4_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_3P25A, VOLTAGE_11V, VOLTAGE_20V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 4),
// .mode5_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_3P1A, VOLTAGE_20V, VOLTAGE_21V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 5),
// .mode5_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_3P1A, VOLTAGE_20V, VOLTAGE_21V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 5),
// .mode6_l = 0,
// .mode6_h = 0,
// .mode7_l = 0,
// .mode7_h = 0
// }
{
.out_mode_cnt = 1,
.mode1_l = UFCS_SRC_PDO_L(CURRENT_0P3A, CURRENT_3A, VOLTAGE_3P4V, VOLTAGE_11V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 1),
.mode1_h = UFCS_SRC_PDO_H(CURRENT_0P3A, CURRENT_3A, VOLTAGE_3P4V, VOLTAGE_11V, UFCS_VOL_STEP_20MV, UFCS_CUR_STEP_50MA, 1),
.mode2_l = 0,
.mode2_h = 0,
.mode3_l = 0,
.mode3_h = 0,
.mode4_l = 0,
.mode4_h = 0,
.mode5_l = 0,
.mode5_h = 0,
.mode6_l = 0,
.mode6_h = 0,
.mode7_l = 0,
.mode7_h = 0
}
};
const device_information_u DEVICE_INFO[] =
{
{
.bits.vdmid_h = (HUAWEI_UFCS_VDM_ID >> 8),
.bits.vdmid_l = (HUAWEI_UFCS_VDM_ID & 0xff),
.bits.chipid_h = SCP_RS82,
.bits.chipid_l = SCP_RS83,
.bits.hard_ware_h = 0x00,
.bits.hard_ware_l = 0x00,
.bits.soft_ware_h = SOFT_WARE_VERISION_H,
.bits.soft_ware_l = SOFT_WARE_VERISION_L
}
};
#if UFCS_DERATE_SUPPORT
const ufcs_power_change_capabilities_u DEF_POWER_CHANGE_PDO[] =
{
// 30W
{
.bits.index = 1,
.bits.resverd0 = 0,
.bits.max_output_cur_L = UFCS_POWER_CHANGE_L(CURRENT_3A),
.bits.max_output_cur_H = UFCS_POWER_CHANGE_H(CURRENT_3A),
},
// 20W
{
.bits.index = 1,
.bits.resverd0 = 0,
.bits.max_output_cur_L = UFCS_POWER_CHANGE_L(CURRENT_2A),
.bits.max_output_cur_H = UFCS_POWER_CHANGE_H(CURRENT_2A),
},
};
#endif
const ufcs_config_init_s UFCS_INIT_CONFIG[PORT_TYPE_DUAL_PORT] =
{
{
.prl_supported = true,
.ufcs_out_mode_info = UFCS_OUT_MODE_INFO,
.device_information = DEVICE_INFO,
#if UFCS_DERATE_SUPPORT
.def_power_change_pdo = &DEF_POWER_CHANGE_PDO[0],
#endif
// .prl_common_ops = &PRL_COMMON_OPS
}
};
#endif
extern uint8_t g_ufcs_curr_tx_len;
@ -107,13 +230,15 @@ static uint8_t ptach_ufcs_src_hw_scpb_power_packet(ufcs_param_s *ufcs_param)
*/
void ufcs_handshake_ping_callback_patch(ufcs_param_s *ufcs_param)
{
if((get_adp_prl_mgr_cur_prl() == PROTOCOL_PD_FIX) ||
(get_adp_prl_mgr_cur_prl() == PROTOCOL_PD_PPS))
if((dpdm_power_get_next_protocol() == PROTOCOL_PD_FIX) ||
(dpdm_power_get_next_protocol() == PROTOCOL_PD_PPS))
{
prl_mgr_set_curr_volt(VOLTAGE_5V);
// prl_mgr_set_curr_volt(VOLTAGE_5V);
comp_powerout_prl_set_volt(VOLTAGE_5V);
}
prl_mgr_set_cur_prl(PROTOCOL_UFCS);
// prl_mgr_set_cur_prl(PROTOCOL_UFCS);
dpdm_power_set_next_protocol(PROTOCOL_UFCS);
}
@ -134,8 +259,13 @@ static void app_src_power_set(ufcs_param_s *ufcs_param)
iset = (ufcs_param->ufcs_flags.ufcs_process_flag.bits.test_mode == true) ? \
((iset * 1126) >> 10) : iset;
prl_mgr_set_curr_volt(vset);
prl_mgr_set_curr_cur(iset);
// prl_mgr_set_curr_volt(vset);
// prl_mgr_set_curr_cur(iset);
// ufcs关闭线补
set_cable_comp_enable(false);
// dpdm_power_set_next_protocol(PROTOCOL_UFCS); // 在ping成功里置了
dpdm_power_set(vset, iset);
}
/*
@ -181,7 +311,9 @@ static void ufcs_src_volt_test_func(u_test_req *test_req)
volt_test_mode = test_req->bits.volt_test_mode;
if(g_ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.test_mode == volt_test_mode)
ufcs_port_s *ufcs_port = dpdm_get_ufcs_port();
if(ufcs_port->ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.test_mode == volt_test_mode)
{
return;
}
@ -192,10 +324,10 @@ static void ufcs_src_volt_test_func(u_test_req *test_req)
((iset * 1126) >> 10) : ((iset << 10) / 1126);
g_ufcs_port.ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.test_mode = volt_test_mode;
prl_mgr_set_curr_cur(iset);
ufcs_port->ufcs_prl_param.ufcs_flags.ufcs_process_flag.bits.test_mode = volt_test_mode;
// prl_mgr_set_curr_cur(iset);
comp_powerout_prl_set_cur(iset);
#endif
}
@ -213,16 +345,15 @@ static uint8_t ufcs_src_power_change_msg_assemble(ufcs_param_s *ufcs_param)
uint8_t power_change_len;
uint8_t ufcs_cap_cnt;
ufcs_port_s *ufcs_port = dpdm_get_ufcs_port();
ufcs_cap_cnt = ufcs_param->ufcs_assist.out_cap_cnt;
power_change_len = ufcs_cap_cnt * 3;
ufcs_param->ufcs_assist.ufcs_sent_pkt.ufcs_sent_buf[4] = power_change_len;
memcpy(&ufcs_param->ufcs_assist.power_change_cap[0].byte, &g_ufcs_port.ufcs_new_power_change_cur->byte, power_change_len);
memcpy(&ufcs_param->ufcs_assist.power_change_cap[0].byte, &ufcs_port->ufcs_new_power_change_cur->byte, power_change_len);
memcpy(&ufcs_param->ufcs_assist.ufcs_sent_pkt.ufcs_sent_buf[5], ufcs_param->ufcs_assist.power_change_cap[0].byte, power_change_len);
power_change_len += 5;
@ -255,6 +386,14 @@ void ufcs_port_init(ufcs_port_s *ufcs_port)
ufcs_port_prl_hook_register(ufcs_port);
ufcs_prl_init(ufcs_port);
ufcs_port->ufcs_prl_param.ufcs_phy_callback = &mtp_ufcs_phy_callback_func;
dpdn_mgr_enable_dpdn_prl(true);
#if UFCS_DERATE_SUPPORT
ufcs_port->current_cap_gear = UFCS_CAP_30W;
#endif
// 清除结构体等
ufcs_protocol_reset(&ufcs_port->ufcs_prl_param);
}
@ -266,28 +405,22 @@ void ufcs_port_deinit(ufcs_port_s *ufcs_port)
void ufcs_port_dpdn_port_num_config(uint8_t dpdn_num)
{
g_ufcs_port.dpdn_port = dpdn_num;
}
void ufcs_port_trans_port_type_config(uint8_t port_num, uint8_t port_type)
{
ufcs_port_s *ufcs_port = ufcs_get_ufcs_port(port_num);
ufcs_port->ufcs_curr_config = GET_ADP_INIT_CONFIG_ADR(port_num, port_type, UFCS);
ufcs_port_s *ufcs_port = dpdm_get_ufcs_port();
ufcs_port->dpdn_port = dpdn_num;
}
ufcs_port_s *ufcs_get_ufcs_port(uint8_t port_num)
{
return &g_ufcs_port;
}
// ufcs_port_s *ufcs_get_ufcs_port(uint8_t port_num)
// {
// return &g_ufcs_port;
// }
const ufcs_config_init_s * ufcs_get_ufcs_cur_config(uint8_t port_num)
{
const ufcs_config_init_s *config;
ufcs_port_s *ufcs_port = dpdm_get_ufcs_port();
config = g_ufcs_port.ufcs_curr_config;
config = ufcs_port->ufcs_curr_config;
return config;
}
@ -296,18 +429,14 @@ const ufcs_config_init_s * ufcs_get_ufcs_cur_config(uint8_t port_num)
void ufcs_port_send_power_change(ufcs_port_s *ufcs_port, const ufcs_power_change_capabilities_u *new_power_change)
{
ufcs_port->ufcs_new_power_change_cur = new_power_change;
ufcs_port->ufcs_send_power_change_en = !ufcs_port->ufcs_send_power_change_en;
}
}
void dpdm_mgr_ufcs_send_power_change(const ufcs_power_change_capabilities_u *new_power_change)
{
ufcs_port_s *ufcs_port = dpdm_get_ufcs_port();
// ufcs_port_send_power_change(ufcs_port, new_power_change);
ufcs_port->ufcs_new_power_change_cur = new_power_change;
ufcs_port->ufcs_send_power_change_en = !ufcs_port->ufcs_send_power_change_en;
}

10
PD_CPS8841H_33W/project/cps8841H.uvprojx

@ -614,6 +614,11 @@
<FileType>1</FileType>
<FilePath>..\code\prl_portable\src\afc.c</FilePath>
</File>
<File>
<FileName>ufcs.c</FileName>
<FileType>1</FileType>
<FilePath>..\code\prl_portable\src\ufcs.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -664,6 +669,11 @@
<FileType>1</FileType>
<FilePath>..\code\platform\protocol\apple_mode\src\apple_mode.c</FilePath>
</File>
<File>
<FileName>ufcs_protocol.c</FileName>
<FileType>1</FileType>
<FilePath>..\code\platform\protocol\ufcs_protocol\src\ufcs_protocol.c</FilePath>
</File>
</Files>
</Group>
</Groups>

Loading…
Cancel
Save