/** ****************************************************************************** * @file usbpd_dpm_user.h * @author MCD Application Team * @brief Header file for usbpd_dpm_user.c file ****************************************************************************** * @attention * *

© Copyright (c) 2018 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under Ultimate Liberty license * SLA0044, the "License"; You may not use this file except in compliance with * the License. You may obtain a copy of the License at: * www.st.com/SLA0044 * ****************************************************************************** */ #ifndef __USBPD_DPM_USER_H_ #define __USBPD_DPM_USER_H_ #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "usbpd_vdm_user.h" #ifdef _RTOS #include "cmsis_os.h" #endif /* _RTOS */ /** @addtogroup STM32_USBPD_LIBRARY * @{ */ /** @addtogroup USBPD_USER * @{ */ /* Exported typedef ----------------------------------------------------------*/ typedef struct { USBPD_SNKPowerRequest_TypeDef DPM_SNKRequestedPower; /*!< Requested Power by the sink board */ USBPD_SCEDB_TypeDef DPM_SRCExtendedCapa; /*!< SRC Extended Capability */ USBPD_MIDB_TypeDef DPM_ManuInfoPort; /*!< Manufacturer information used for the port */ uint16_t ReservedManu; uint32_t PE_DataSwap : 1; /*!< support data swap */ uint32_t PE_VconnSwap : 1; /*!< support VCONN swap */ uint32_t Reserved1 :30; /*!< Reserved bits */ #if defined(_GUI_INTERFACE) uint32_t PWR_AccessoryDetection : 1; /*!< It enables or disables powered accessory detection */ uint32_t PWR_AccessoryTransition : 1; /*!< It enables or disables transition from Powered.accessory to Try.SNK */ USBPD_CORE_PDO_ExtPowered_TypeDef PWR_UnconstrainedPower: 1; /*!< UUT has an external power source available that is sufficient to adequately power the system while charging external devices or the UUT primary function is to charge external devices. */ CAD_SNK_Source_Current_Adv_Typedef PWR_RpResistorValue : 2; /*!< RP resitor value based on @ref CAD_SNK_Source_Current_Adv_Typedef */ USBPD_CORE_PDO_USBCommCapable_TypeDef USB_Support : 1; /*!< USB_Comms_Capable, is the UUT capable of enumerating as a USB host or device? */ uint32_t USB_Device : 1; /*!< Type_C_Can_Act_As_Device, Indicates whether the UUT can communicate with USB 2.0 or USB 3.1 as a device or as the Upstream Facing Port of a hub. */ uint32_t USB_Host : 1; /*!< Type_C_Can_Act_As_Host, Indicates whether the UUT can communicate with USB 2.0 or USB 3.1 as a host or as the Downstream Facing Port of a hub */ USBPD_CORE_PDO_USBSuspendSupport_TypeDef USB_SuspendSupport: 1; /*!< USB Suspend support values in PDO definition (Source) */ uint32_t CAD_tDRP :7; /*!< The period that DRP shall complete a Source to Sink and back advertisement */ uint32_t CAD_dcSRC_DRP :7; /*!< The percent of time that a DRP shall advertise Source during tDRP (in %) */ uint32_t Reserved2 :31; /*!< reserved bits */ #endif /* _GUI_INTERFACE */ } USBPD_USER_SettingsTypeDef; #if defined(_GUI_INTERFACE) typedef struct { uint16_t VBUS_Level :16; /*!< VBUS Level */ uint16_t IBUS_Level :16; /*!< IBUS Level */ /* Measurement Reporting */ union { uint8_t MeasurementReporting; struct { uint8_t MeasReportValue :7; /*!< Enable Measure reporting every tr x 40 ms */ uint8_t MeasReportActivation :1; /*!< Enable or Disable Measure reporting */ }d; }u; uint8_t Reserved :8; /*!< Reserved bits */ } USBPD_USER_ParamsTypeDef; #endif /* _GUI_INTERFACE */ typedef enum { DPM_USER_EVENT_TIMER, /* TIMER EVENT */ DPM_USER_EVENT_GUI, /* GUI EVENT */ DPM_USER_EVENT_NONE, /* NO EVENT */ } DPM_USER_EVENT; /** * @brief USBPD DPM handle Structure definition * @{ */ typedef struct { uint32_t DPM_ListOfRcvSRCPDO[USBPD_MAX_NB_PDO]; /*!< The list of received Source Power Data Objects from Port partner (when Port partner is a Source or a DRP port). */ uint32_t DPM_NumberOfRcvSRCPDO; /*!< The number of received Source Power Data Objects from port Partner (when Port partner is a Source or a DRP port). This parameter must be set to a value lower than USBPD_MAX_NB_PDO */ uint32_t DPM_ListOfRcvSNKPDO[USBPD_MAX_NB_PDO]; /*!< The list of received Sink Power Data Objects from Port partner (when Port partner is a Sink or a DRP port). */ uint32_t DPM_NumberOfRcvSNKPDO; /*!< The number of received Sink Power Data Objects from port Partner (when Port partner is a Sink or a DRP port). This parameter must be set to a value lower than USBPD_MAX_NB_PDO */ uint32_t DPM_RDOPosition; /*!< RDO Position of requested DO in Source list of capabilities */ uint32_t DPM_RequestedVoltage; /*!< Value of requested voltage */ uint32_t DPM_RequestedCurrent; /*!< Value of requested current */ int16_t DPM_MeasuredCurrent; /*!< Value of measured current */ uint32_t DPM_RDOPositionPrevious; /*!< RDO Position of previous requested DO in Source list of capabilities */ uint32_t DPM_RequestDOMsg; /*!< Request Power Data Object message to be sent */ uint32_t DPM_RequestDOMsgPrevious; /*!< Previous Request Power Data Object message to be sent */ uint32_t DPM_RcvRequestDOMsg; /*!< Received request Power Data Object message from the port Partner */ volatile uint32_t DPM_ErrorCode; /*!< USB PD Error code */ volatile uint8_t DPM_IsConnected; /*!< USB PD connection state */ uint16_t DPM_Reserved; /*!< Reserved bytes */ uint8_t FlagSendGetSrcCapaExtended; volatile uint16_t DPM_TimerSRCExtendedCapa; /*!< timer to request the extended capa */ USBPD_SDB_TypeDef DPM_RcvStatus; /*!< Status received by port partner */ USBPD_PPSSDB_TypeDef DPM_RcvPPSStatus; /*!< PPS Status received by port partner */ USBPD_SCEDB_TypeDef DPM_RcvSRCExtendedCapa; /*!< SRC Extended Capability received by port partner */ USBPD_GMIDB_TypeDef DPM_GetManufacturerInfo; /*!< Get Manufacturer Info */ USBPD_GBSDB_TypeDef DPM_GetBatteryStatus; /*!< Get Battery status */ USBPD_GBCDB_TypeDef DPM_GetBatteryCapability; /*!< Get Battery Capability */ volatile uint16_t DPM_TimerAlert; /*!< Timer used to monitor current and trig an ALERT */ USBPD_ADO_TypeDef DPM_SendAlert; /*!< Save the Alert sent to port partner */ USBPD_ADO_TypeDef DPM_RcvAlert; /*!< Save the Alert received by port partner */ #if defined(_GUI_INTERFACE) volatile uint16_t DPM_TimerMeasReport; /*!< Timer used to send measurement report */ #endif /* _GUI_INTERFACE */ USBPD_DiscoveryIdentity_TypeDef VDM_DiscoCableIdentify; /*!< VDM Cable Discovery Identify */ USBPD_DiscoveryIdentity_TypeDef VDM_DiscoIdentify; /*!< VDM Discovery Identify */ USBPD_SVIDPortPartnerInfo_TypeDef VDM_SVIDPortPartner; /*!< VDM SVID list */ USBPD_ModeInfo_TypeDef VDM_ModesPortPartner; /*!< VDM Modes list */ } USBPD_HandleTypeDef; /* Exported define -----------------------------------------------------------*/ /* * USBPD FW version */ #define USBPD_FW_VERSION 0x06022019u /* * USBPD Start Port Number */ #define USBPD_START_PORT_NUMBER 1u /* * Number af thread defined by user to include in the low power control */ #define USBPD_USER_THREAD_COUNT 0 /* Exported constants --------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/ /* Exported variables --------------------------------------------------------*/ #if defined(USBPD_DPM_USER_C) osMessageQId DPMMsgBox; #else extern osMessageQId DPMMsgBox; #endif /* USBPD_DPM_USER_C */ #if !defined(USBPD_DPM_USER_C) extern USBPD_HandleTypeDef DPM_Ports[USBPD_PORT_COUNT]; #else USBPD_HandleTypeDef DPM_Ports[USBPD_PORT_COUNT] = { { .DPM_Reserved = 0, .FlagSendGetSrcCapaExtended = 0, .DPM_TimerSRCExtendedCapa = 0, /*!< timer to request the extended capa */ .DPM_RcvSRCExtendedCapa = {0}, /*!< SRC Extended Capability received by port partner */ .DPM_GetManufacturerInfo = {0}, /*!< Get Manufacturer Info */ .DPM_GetBatteryStatus = {0}, /*!< Get Battery status */ .DPM_GetBatteryCapability = {0}, /*!< Get Battery Capability */ .DPM_TimerAlert = 0, /*!< Timer used to monitor current and trig an ALERT */ .DPM_SendAlert = {0}, /*!< Save the Alert sent to port partner */ .DPM_RcvAlert = {0}, /*!< Save the Alert received by port partner */ } }; #endif /* !USBPD_DPM_USER_C */ /* Exported functions --------------------------------------------------------*/ /** @addtogroup USBPD_USER_EXPORTED_FUNCTIONS * @{ */ /** @addtogroup USBPD_USER_EXPORTED_FUNCTIONS_GROUP1 * @{ */ USBPD_StatusTypeDef USBPD_DPM_UserInit(void); void USBPD_DPM_UserExecute(void const *argument); void USBPD_DPM_UserCableDetection(uint8_t PortNum, USBPD_CAD_EVENT State); void USBPD_DPM_WaitForTime(uint32_t Time); void USBPD_DPM_UserTimerCounter(uint8_t PortNum); /** * @} */ /** @addtogroup USBPD_USER_EXPORTED_FUNCTIONS_GROUP2 * @{ */ USBPD_StatusTypeDef USBPD_DPM_SetupNewPower(uint8_t PortNum); void USBPD_DPM_HardReset(uint8_t PortNum, USBPD_PortPowerRole_TypeDef CurrentRole, USBPD_HR_Status_TypeDef Status); USBPD_StatusTypeDef USBPD_DPM_EvaluatePowerRoleSwap(uint8_t PortNum); void USBPD_DPM_Notification(uint8_t PortNum, USBPD_NotifyEventValue_TypeDef EventVal); USBPD_StatusTypeDef USBPD_DPM_IsContractStillValid(uint8_t PortNum); void USBPD_DPM_ExtendedMessageReceived(uint8_t PortNum, USBPD_ExtendedMsg_TypeDef MsgType, uint8_t *ptrData, uint16_t DataSize); void USBPD_DPM_GetDataInfo(uint8_t PortNum, USBPD_CORE_DataInfoType_TypeDef DataId , uint8_t *Ptr, uint32_t *Size); void USBPD_DPM_SetDataInfo(uint8_t PortNum, USBPD_CORE_DataInfoType_TypeDef DataId , uint8_t *Ptr, uint32_t Size); USBPD_StatusTypeDef USBPD_DPM_EvaluateRequest(uint8_t PortNum, USBPD_CORE_PDO_Type_TypeDef *PtrPowerObject); void USBPD_DPM_SNK_EvaluateCapabilities(uint8_t PortNum, uint32_t *PtrRequestData, USBPD_CORE_PDO_Type_TypeDef *PtrPowerObjectType); uint32_t USBPD_DPM_SNK_EvaluateMatchWithSRCPDO(uint8_t PortNum, uint32_t SrcPDO, uint32_t* PtrRequestedVoltage, uint32_t* PtrRequestedPower); void USBPD_DPM_PowerRoleSwap(uint8_t PortNum, USBPD_PortPowerRole_TypeDef CurrentRole, USBPD_PRS_Status_TypeDef Status); #if defined(_VCONN_SUPPORT) USBPD_StatusTypeDef USBPD_DPM_EvaluateVconnSwap(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_PE_VconnPwr(uint8_t PortNum, USBPD_FunctionalState State); #endif /* _VCONN_SUPPORT */ USBPD_StatusTypeDef USBPD_DPM_EvaluateDataRoleSwap(uint8_t PortNum); USBPD_FunctionalState USBPD_DPM_IsPowerReady(uint8_t PortNum, USBPD_VSAFE_StatusTypeDef Vsafe); /** * @} */ /** @addtogroup USBPD_USER_EXPORTED_FUNCTIONS_GROUP3 * @{ */ USBPD_StatusTypeDef USBPD_DPM_RequestHardReset(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestCableReset(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGotoMin(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestPing(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestMessageRequest(uint8_t PortNum, uint8_t IndexSrcPDO, uint16_t RequestedVoltage); USBPD_StatusTypeDef USBPD_DPM_RequestGetSourceCapability(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetSinkCapability(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestDataRoleSwap(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestPowerRoleSwap(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestVconnSwap(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestSoftReset(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType); USBPD_StatusTypeDef USBPD_DPM_RequestSourceCapability(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestVDM_DiscoveryIdentify(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType); USBPD_StatusTypeDef USBPD_DPM_RequestVDM_DiscoverySVID(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType); USBPD_StatusTypeDef USBPD_DPM_RequestVDM_DiscoveryMode(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID); USBPD_StatusTypeDef USBPD_DPM_RequestVDM_EnterMode(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID, uint8_t ModeIndex); USBPD_StatusTypeDef USBPD_DPM_RequestVDM_ExitMode(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID, uint8_t ModeIndex); USBPD_StatusTypeDef USBPD_DPM_RequestAttention(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID); USBPD_StatusTypeDef USBPD_DPM_RequestDisplayPortStatus(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID, uint32_t *pDPStatus); USBPD_StatusTypeDef USBPD_DPM_RequestDisplayPortConfig(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint16_t SVID, uint32_t *pDPConfig); USBPD_StatusTypeDef USBPD_DPM_RequestAlert(uint8_t PortNum, USBPD_ADO_TypeDef Alert); USBPD_StatusTypeDef USBPD_DPM_RequestGetSourceCapabilityExt(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetSinkCapabilityExt(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetManufacturerInfo(uint8_t PortNum, USBPD_SOPType_TypeDef SOPType, uint8_t* pManuInfoData); USBPD_StatusTypeDef USBPD_DPM_RequestGetStatus(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestFastRoleSwap(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetPPS_Status(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetCountryCodes(uint8_t PortNum); USBPD_StatusTypeDef USBPD_DPM_RequestGetCountryInfo(uint8_t PortNum, uint16_t CountryCode); USBPD_StatusTypeDef USBPD_DPM_RequestGetBatteryCapability(uint8_t PortNum, uint8_t *pBatteryCapRef); USBPD_StatusTypeDef USBPD_DPM_RequestGetBatteryStatus(uint8_t PortNum, uint8_t *pBatteryStatusRef); USBPD_StatusTypeDef USBPD_DPM_RequestSecurityRequest(uint8_t PortNum); /** * @} */ /** * @} */ /** * @} */ /** * @} */ #ifdef __cplusplus } #endif #endif /* __USBPD_DPM_USER_H_ */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/