加入状态

This commit is contained in:
不吃油炸鸡
2026-02-13 14:11:26 +08:00
parent 8245e732f6
commit 38e2f89e52
2 changed files with 18 additions and 0 deletions

View File

@@ -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;

View File

@@ -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