blob: 584458942b4774677ff35282e528a3cfea923a8b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/* Copyright 2021 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* @file
*
* @brief Backend API for USB-C sink device emulator
*/
#ifndef __EMUL_TCPCI_PARTNER_SNK_H
#define __EMUL_TCPCI_PARTNER_SNK_H
#include <zephyr/drivers/emul.h>
#include "emul/tcpc/emul_tcpci_partner_common.h"
#include "emul/tcpc/emul_tcpci.h"
#include "usb_pd.h"
/**
* @brief USB-C sink device extension backend API
* @defgroup tcpci_snk_emul USB-C sink device extension
* @{
*
* USB-C sink device extension can be used with TCPCI partner emulator. It is
* able to respond to some TCPM messages. It always attach as sink and present
* sink capabilities constructed from given PDOs.
*/
/** Structure describing sink device emulator data */
struct tcpci_snk_emul_data {
/** Common extension structure */
struct tcpci_partner_extension ext;
/** Power data objects returned in sink capabilities message */
uint32_t pdo[PDO_MAX_OBJECTS];
/** Emulator is waiting for PS RDY message */
bool wait_for_ps_rdy;
/** PS RDY was received and PD negotiation is completed */
bool pd_completed;
/** PD_CTRL_PING message received */
bool ping_received;
/** PD_DATA_ALERT message received */
bool alert_received;
/** Last received 5V fixed source cap */
uint32_t last_5v_source_cap;
};
/**
* @brief Initialise USB-C sink device data structure. Single PDO 5V@500mA is
* created and all flags are cleared.
*
* @param data Pointer to USB-C sink device emulator data
* @param common_data Pointer to USB-C device emulator common data
* @param ext Pointer to next USB-C emulator extension
*
* @return Pointer to USB-C sink extension
*/
struct tcpci_partner_extension *
tcpci_snk_emul_init(struct tcpci_snk_emul_data *data,
struct tcpci_partner_data *common_data,
struct tcpci_partner_extension *ext);
/**
* @brief Clear the ping received flag.
*
* @param sink_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);
/**
* @brief Clear the last received 5V fixed source cap.
*
* @param sink_data
*/
void tcpci_snk_emul_clear_last_5v_cap(struct tcpci_snk_emul_data *sink_data);
/**
* @}
*/
#endif /* __EMUL_TCPCI_PARTNER_SNK_H */
|