/** ****************************************************************************** * @file gui_api.h * @author MCD Application Team * @brief This file contains all the functions prototypes for GUI * interface. ****************************************************************************** * @attention * *

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

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef _GUI_API_H #define _GUI_API_H /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "usbpd_def.h" /** @addtogroup STM32_USBPD_LIBRARY * @{ */ /** @addtogroup USBPD_GUI_API * @{ */ /* Exported constants --------------------------------------------------------*/ /** @defgroup USBPD_GUI_API_Exported_Defines USBPD GUI API exported Defines * @{ */ #define GUI_PE_PORT_NUM_Pos (24u) #define GUI_PE_PORT_NUM_Msk (0x3u << GUI_PE_PORT_NUM_Pos) #define GUI_PE_PORT_NUM_0 (0x0u << GUI_PE_PORT_NUM_Pos) #define GUI_PE_PORT_NUM_1 (0x1u << GUI_PE_PORT_NUM_Pos) #define GUI_PE_NOTIF_Pos (4u) #define GUI_PE_NOTIF_Msk (0xFFu << GUI_PE_NOTIF_Pos) #define GUI_NOTIF_MEASUREMENT (USBPD_NOTIFY_ALL + 1) #define GUI_NOTIF_MEASUREMENT_STEP 40u /** * @brief USB PD GUI STATE MACHINE STATE */ typedef enum { GUI_STATE_INIT, /*!< GUI init state */ GUI_STATE_RUNNING, /*!< GUI running state */ GUI_STATE_RESET, /*!< GUI reset state */ } USBPD_GUI_State; /** * @brief USB PD GUI TAG TYPE */ typedef enum { DPM_RESET_REQ = 0x01, DPM_INIT_REQ = 0x02, DPM_INIT_CNF = 0x03, DPM_CONFIG_GET_REQ = 0x04, DPM_CONFIG_GET_CNF = 0x05, DPM_CONFIG_SET_REQ = 0x06, DPM_CONFIG_SET_CNF = 0x07, DPM_CONFIG_REJ = 0x08, DPM_MESSAGE_REQ = 0x09, DPM_MESSAGE_CNF = 0x0A, DPM_MESSAGE_REJ = 0x0B, DPM_MESSAGE_IND = 0x0C, DPM_MESSAGE_RSP = 0x0D, DPM_REGISTER_READ_REQ = 0x0E, DPM_REGISTER_READ_CNF = 0x0F, DPM_REGISTER_WRITE_REQ = 0x10, DPM_REGISTER_WRITE_CNF = 0x11, DEBUG_STACK_MESSAGE = 0x12, } USBPD_GUI_Tag_TypeDef; /** @defgroup USBPD_CORE_GUI_TYPE_NOTIFICATION USBPD CORE TRACE TYPE NOTIFICATION * @{ */ #define GUI_NOTIF_NUMBEROFRCVSNKPDO (1 << 0) #define GUI_NOTIF_RDOPOSITION (1 << 1) #define GUI_NOTIF_LISTOFRCVSRCPDO (1 << 2) #define GUI_NOTIF_NUMBEROFRCVSRCPDO (1 << 3) #define GUI_NOTIF_LISTOFRCVSNKPDO (1 << 4) #define GUI_NOTIF_ISCONNECTED (1 << 5) #define GUI_NOTIF_DATAROLE (1 << 6) #define GUI_NOTIF_POWERROLE (1 << 7) #define GUI_NOTIF_CCDEFAULTCURRENTADVERTISED (1 << 8) #define GUI_NOTIF_VCONNON (1 << 9) #define GUI_NOTIF_VCONNSWAPED (1 << 10) #define GUI_NOTIF_MEASUREREPORTING (1 << 11) #define GUI_NOTIF_CC (1 << 12) #define GUI_NOTIF_PE_EVENT (1 << 13) #define GUI_NOTIF_TIMESTAMP (1 << 14) #define GUI_NOTIF_POWER_EVENT (1 << 15) /** * @} */ /** * @} */ /* Exported types ------------------------------------------------------------*/ /** @defgroup USBPD_GUI_API_Exported_TypeDef USBPD GUI API exported TypeDef * @{ */ 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 */ } GUI_USER_ParamsTypeDef; typedef struct { uint32_t PE_DataSwap : 1; /*!< support data swap */ uint32_t PE_VconnSwap : 1; /*!< support VCONN swap */ uint32_t PE_DR_Swap_To_DFP : 1U; /*!< If supported, DR Swap to DFP can be accepted or not by the user else directly rejected */ uint32_t PE_DR_Swap_To_UFP : 1U; /*!< If supported, DR Swap to UFP can be accepted or not by the user else directly rejected */ uint32_t Reserved1 : 28U; /*!< Reserved bits */ #if defined(_SNK) || defined(_DRP) USBPD_SNKPowerRequest_TypeDef DPM_SNKRequestedPower; /*!< Requested Power by the sink board */ #else uint32_t Reserved_ReqPower[6]; /*!< Reserved bits to match with Resquested power information */ #endif /* _SNK || _DRP */ #if defined(USBPD_REV30_SUPPORT) #if _MANU_INFO USBPD_MIDB_TypeDef DPM_ManuInfoPort; /*!< Manufacturer information used for the port */ uint16_t ReservedManu; /*!< Reserved bits to match with Manufacturer information */ #else uint32_t ReservedManu[7]; /*!< Reserved bits to match with Manufacturer information */ #endif /* _MANU_INFO */ #if _SRC_CAPA_EXT && (defined(_SRC)||defined(_DRP)) USBPD_SCEDB_TypeDef DPM_SRCExtendedCapa; /*!< SRC Extended Capability */ #else uint32_t ReservedSrcCapa[6]; /*!< Reserved bits to match with SrcCapa information */ #endif /* _SRC_CAPA_EXT && (_SRC || _DRP) */ #if defined(_SNK)||defined(_DRP) USBPD_SKEDB_TypeDef DPM_SNKExtendedCapa; /*!< SNK Extended Capability */ uint8_t ReservedSnkCapa[3]; /*!< Reserved bits to match with SnkCapaExt information */ #else uint32_t ReservedSnkCapa[6]; /*!< Reserved bits to match with SnkCapaExt information */ #endif /* _SNK || _DRP */ #else uint32_t ReservedRev3[13]; /*!< Reserved bits to match with PD3.0 information */ #endif /* USBPD_REV30_SUPPORT */ 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 */ } USBPD_USER_SettingsTypeDef; typedef struct { uint32_t XID; /*!< Value provided by the USB-IF assigned to the product */ uint16_t VID; /*!< Vendor ID (assigned by the USB-IF) */ uint16_t PID; /*!< Product ID (assigned by the manufacturer) */ } USBPD_IdSettingsTypeDef; typedef struct { uint32_t VDM_XID_SOP :32; /*!< A decimal number assigned by USB-IF before certification */ uint32_t VDM_USB_VID_SOP :16; /*!< A unique 16-bit number, assigned to the Vendor by USB-IF. */ uint32_t VDM_PID_SOP :16; /*!< A unique number assigned by the Vendor ID holder identifying the product. */ uint32_t VDM_bcdDevice_SOP :16; /*!< A unique number assigned by the Vendor ID holder containing identity information relevant to the release version of the product. */ USBPD_ModalOp_TypeDef VDM_ModalOperation : 1; /*!< Product support Modes based on @ref USBPD_ModalOp_TypeDef */ USBPD_USBCapa_TypeDef VDM_USBHostSupport : 1; /*!< Indicates whether the UUT is capable of enumerating USB Host */ USBPD_USBCapa_TypeDef VDM_USBDeviceSupport: 1; /*!< Indicates whether the UUT is capable of enumerating USB Devices */ USBPD_ProductType_TypeDef VDM_ProductTypeUFPorCP : 3; /*!< Product type UFP or CablePlug of the UUT based on @ref USBPD_ProductType_TypeDef */ #if defined(USBPD_REV30_SUPPORT) USBPD_ProductType_TypeDef VDM_ProductTypeDFP : 3; /*!< Product type DFP of the UUT based on @ref USBPD_ProductType_TypeDef */ uint32_t Reserved3 : 7; /*!< Reserved bits */ #else uint32_t Reserved3 :10; /*!< Reserved bits */ #endif /* USBPD_REV30_SUPPORT */ } USBPD_VDM_SettingsTypeDef; /** * @} */ /* Exported macro ------------------------------------------------------------*/ /* Exported variable ---------------------------------------------------------*/ /** @defgroup USBPD_GUI_API_Exported_Variable USBPD GUI API exported Variable * @{ */ extern GUI_USER_ParamsTypeDef GUI_USER_Params[USBPD_PORT_COUNT]; #if !defined(_RTOS) extern volatile uint32_t GUI_Flag; #endif /* !_RTOS */ /** * @} */ /* Exported functions ------------------------------------------------------- */ /** @defgroup USBPD_GUI_API_Exported_Functions USBPD GUI API exported functions * @{ */ USBPD_FunctionalState GUI_Init(const uint8_t* (*CB_HWBoardVersion)(void), const uint8_t* (*CB_HWPDType)(void), uint16_t (*CB_GetVoltage)(uint8_t), int16_t (*CB_GetCurrent)(uint8_t)); void GUI_Start(void); void GUI_TimerCounter(void); uint32_t GUI_RXProcess(uint32_t Event); uint32_t GUI_FormatAndSendNotification(uint32_t PortNum, uint32_t TypeNotification, uint32_t Value); uint32_t GUI_GetMessage(uint8_t Character, uint8_t Error); USBPD_GUI_State GUI_SendAnswer(uint8_t **pMsgToSend, uint8_t *pSizeMsg); USBPD_GUI_State GUI_SendNotification(uint8_t PortNum, uint8_t **pMsgToSend, uint8_t *pSizeMsg, uint32_t TypeNotifcation, uint32_t Value); void GUI_PostNotificationMessage(uint8_t PortNum, uint16_t EventVal); void GUI_SaveInfo(uint8_t PortNum, uint8_t DataId, uint8_t *Ptr, uint32_t Size); USBPD_FunctionalState GUI_IsRunning(void); #if !defined(USE_STM32_UTILITY_OS) void GUI_Execute(void); #endif /* !USE_STM32_UTILITY_OS */ void GUI_RegisterCallback_FreeText(USBPD_StatusTypeDef (*CB_FreeText)(uint8_t, uint8_t*, uint16_t)); /** * @} */ /** * @} */ /** * @} */ #endif /* _GUI_API_H */