From 38e2f89e52ec15e6c1fcc4491152b0077fc4b1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=90=83=E6=B2=B9=E7=82=B8=E9=B8=A1?= <1425962791@qq.com> Date: Fri, 13 Feb 2026 14:11:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Power_Pico/BSP/PD/fusb302_dev.c | 6 ++++++ Power_Pico/BSP/PD/fusb302_dev.h | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Power_Pico/BSP/PD/fusb302_dev.c b/Power_Pico/BSP/PD/fusb302_dev.c index 0cfc8b0..e2f54b6 100644 --- a/Power_Pico/BSP/PD/fusb302_dev.c +++ b/Power_Pico/BSP/PD/fusb302_dev.c @@ -52,10 +52,12 @@ void handle_protocol_event(PD_protocol_event_t events) app_pd.get_src_cap_retry_count = 0; app_pd.wait_ps_rdy = 1; app_pd.time_wait_ps_rdy = clock_ms(); + app_pd.state = PD_STATE_GET_CAPS; // 更新状态:已收到能力,可以请求了 } if (events & PD_PROTOCOL_EVENT_REJECT) { if (app_pd.wait_ps_rdy) { app_pd.wait_ps_rdy = 0; + app_pd.state = PD_STATE_FAILED; // 更新状态:请求被拒绝 } } if (events & PD_PROTOCOL_EVENT_PS_RDY) { @@ -75,10 +77,12 @@ void handle_protocol_event(PD_protocol_event_t events) app_pd.time_PPS_request = clock_ms(); status_power_ready(STATUS_POWER_PPS, PD_protocol_get_PPS_voltage(&app_pd.protocol), PD_protocol_get_PPS_current(&app_pd.protocol)); + app_pd.state = PD_STATE_SUCCESS_PPS; // 更新状态:成功协商到PPS } } else { FUSB302_set_vbus_sense(&fusb302_dev, 1); status_power_ready(STATUS_POWER_TYP, p.max_v, p.max_i); + app_pd.state = PD_STATE_SUCCESS_FIXED; // 更新状态:协商到了一个固定电压 } } } @@ -154,6 +158,7 @@ bool fusb302_timer(void) } else if (app_pd.send_request || (app_pd.status_power == STATUS_POWER_PPS && t - app_pd.time_PPS_request > PPS_REQUEST)) { app_pd.wait_ps_rdy = 1; app_pd.send_request = 0; + app_pd.state = PD_STATE_NEGOTIATING; // 更新状态:正在协商中 app_pd.time_PPS_request = t; uint16_t header; uint32_t obj[7]; @@ -184,6 +189,7 @@ uint8_t fusb302_dev_init(void) { #endif if (FUSB302_init(&fusb302_dev) == FUSB302_SUCCESS && FUSB302_get_ID(&fusb302_dev, 0, 0) == FUSB302_SUCCESS) { PD_protocol_init(&app_pd.protocol); + app_pd.state = PD_STATE_IDLE; // 初始状态 return 0; } return 1; diff --git a/Power_Pico/BSP/PD/fusb302_dev.h b/Power_Pico/BSP/PD/fusb302_dev.h index 026c418..85d217b 100644 --- a/Power_Pico/BSP/PD/fusb302_dev.h +++ b/Power_Pico/BSP/PD/fusb302_dev.h @@ -45,8 +45,20 @@ enum { }; typedef uint8_t PD_user_state_t; +typedef enum { + PD_STATE_IDLE, // 空闲状态 + PD_STATE_NEGOTIATING, // 正在协商中 (已发送请求,等待PS_RDY) + PD_STATE_SUCCESS_PPS, // 成功协商到PPS模式 + PD_STATE_SUCCESS_FIXED, // 成功协商到固定电压 + PD_STATE_FAILED, // 协商失败 (收到Reject或超时) + PD_STATE_GET_CAPS // 刚刚收到能力列表,准备发起第一次请求 +} App_PD_State_t; + typedef struct { + + App_PD_State_t state; + PD_protocol_t protocol; // Power ready power