diff options
-rw-r--r-- | zephyr/emul/tcpc/emul_tcpci_partner_snk.c | 8 | ||||
-rw-r--r-- | zephyr/include/emul/tcpc/emul_tcpci_partner_snk.h | 9 | ||||
-rw-r--r-- | zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c | 24 |
3 files changed, 41 insertions, 0 deletions
diff --git a/zephyr/emul/tcpc/emul_tcpci_partner_snk.c b/zephyr/emul/tcpc/emul_tcpci_partner_snk.c index fb314b54f3..f9cab652c8 100644 --- a/zephyr/emul/tcpc/emul_tcpci_partner_snk.c +++ b/zephyr/emul/tcpc/emul_tcpci_partner_snk.c @@ -345,6 +345,11 @@ void tcpci_snk_emul_clear_ping_received(struct tcpci_snk_emul_data *data) data->ping_received = false; } +void tcpci_snk_emul_clear_alert_received(struct tcpci_snk_emul_data *data) +{ + data->alert_received = false; +} + /** Check description in emul_tcpci_snk.h */ enum tcpci_partner_handler_res tcpci_snk_emul_handle_sop_msg( struct tcpci_snk_emul_data *data, @@ -362,6 +367,9 @@ enum tcpci_partner_handler_res tcpci_snk_emul_handle_sop_msg( tcpci_snk_emul_handle_source_cap(data, common_data, msg); return TCPCI_PARTNER_COMMON_MSG_HANDLED; + case PD_DATA_ALERT: + data->alert_received = true; + return TCPCI_PARTNER_COMMON_MSG_HANDLED; default: return TCPCI_PARTNER_COMMON_MSG_NOT_HANDLED; } diff --git a/zephyr/include/emul/tcpc/emul_tcpci_partner_snk.h b/zephyr/include/emul/tcpc/emul_tcpci_partner_snk.h index a50f750a4a..35d9b4fda3 100644 --- a/zephyr/include/emul/tcpc/emul_tcpci_partner_snk.h +++ b/zephyr/include/emul/tcpc/emul_tcpci_partner_snk.h @@ -37,6 +37,8 @@ struct tcpci_snk_emul_data { bool pd_completed; /** PD_CTRL_PING message received */ bool ping_received; + /** PD_DATA_ALERT message received */ + bool alert_received; }; /** Structure describing standalone sink device emulator */ @@ -116,6 +118,13 @@ void tcpci_snk_emul_hard_reset(void *data); void tcpci_snk_emul_clear_ping_received(struct tcpci_snk_emul_data *sink_data); /** + * @brief Clear the alert received flag. + * + * @param sink_data + */ +void tcpci_snk_emul_clear_alert_received(struct tcpci_snk_emul_data *sink_data); + +/** * @} */ diff --git a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c b/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c index 3f6925be25..e0b27a1b6f 100644 --- a/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c +++ b/zephyr/test/drivers/src/integration/usbc/usb_5v_3a_pd_sink.c @@ -14,6 +14,7 @@ #include "test/drivers/test_state.h" #include "test/drivers/utils.h" #include "timer.h" +#include "usb_common.h" #include "usb_pd.h" struct usb_attach_5v_3a_pd_sink_fixture { @@ -289,3 +290,26 @@ ZTEST_F(usb_attach_5v_3a_pd_sink, verify_ping_msg) zassert_true(this->sink_5v_3a.data.ping_received, NULL); } + +/** + * @brief TestPurpose: Verify Alert message. + * + * @details + * - Clear alert_received in emulated partner + * - Broadcast PD Alert + * - Check pd_broadcast_alert_msg can set the ADO and run pd_dpm_request + * - Check that emulated partner received a PD_DATA_ALERT message + * + * Expected Results + * - EC_SUCCESS returned from pd_broadcast_alert_msg + * - sink_5v_3a.data.alert_received is true + */ +ZTEST_F(usb_attach_5v_3a_pd_sink, verify_alert_msg) +{ + tcpci_snk_emul_clear_alert_received(&this->sink_5v_3a.data); + zassert_false(this->sink_5v_3a.data.alert_received, NULL); + zassert_equal(pd_broadcast_alert_msg(ADO_OTP_EVENT), EC_SUCCESS, NULL); + + k_sleep(K_SECONDS(2)); + zassert_true(this->sink_5v_3a.data.alert_received, NULL); +} |