/** ****************************************************************************** * @file radio_board_if.c * @author YunHorn Technology Limited Application Team * @brief This file provides an interface layer between MW and Radio Board ****************************************************************************** * @attention * * Copyright (c) 2023 YunHorn Technology Limited. * 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 * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "radio_board_if.h" /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* External variables ---------------------------------------------------------*/ /* USER CODE BEGIN EV */ /* USER CODE END EV */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Exported functions --------------------------------------------------------*/ int32_t RBI_Init(void) { /* USER CODE BEGIN RBI_Init_1 */ /* USER CODE END RBI_Init_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_Init(); #elif defined(YUNHORN_STS_WLE5CCxx) /* should be calling BSP_RADIO_Init() but not supported by MX*/ GPIO_InitTypeDef gpio_init_structure = {0}; #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) /* Enable the Radio Switch Clock */ RF_SW_CTRL1_GPIO_CLK_ENABLE(); RF_SW_CTRL2_GPIO_CLK_ENABLE(); /* Configure the Radio Switch pin */ gpio_init_structure.Pin = RF_SW_CTRL1_PIN; gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; gpio_init_structure.Pull = GPIO_NOPULL; gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(RF_SW_CTRL1_GPIO_PORT, &gpio_init_structure); gpio_init_structure.Pin = RF_SW_CTRL2_PIN; HAL_GPIO_Init(RF_SW_CTRL2_GPIO_PORT, &gpio_init_structure); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); #else /* Enable the Radio Switch Clock */ RF_SW_CTRL3_GPIO_CLK_ENABLE(); /* Configure the Radio Switch pin */ gpio_init_structure.Pin = RF_SW_CTRL1_PIN; gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; gpio_init_structure.Pull = GPIO_NOPULL; gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(RF_SW_CTRL1_GPIO_PORT, &gpio_init_structure); gpio_init_structure.Pin = RF_SW_CTRL2_PIN; HAL_GPIO_Init(RF_SW_CTRL2_GPIO_PORT, &gpio_init_structure); gpio_init_structure.Pin = RF_SW_CTRL3_PIN; HAL_GPIO_Init(RF_SW_CTRL3_GPIO_PORT, &gpio_init_structure); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET); #endif return 0; #else /* USER CODE BEGIN RBI_Init_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_Init_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_Init_3 */ /* USER CODE END RBI_Init_3 */ } int32_t RBI_DeInit(void) { /* USER CODE BEGIN RBI_DeInit_1 */ /* USER CODE END RBI_DeInit_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_DeInit(); #elif defined(YUNHORN_STS_WLE5CCxx) #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) RF_SW_CTRL1_GPIO_CLK_ENABLE(); RF_SW_CTRL2_GPIO_CLK_ENABLE(); /* Turn off switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); /* DeInit the Radio Switch pin */ HAL_GPIO_DeInit(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN); HAL_GPIO_DeInit(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN); #else RF_SW_CTRL3_GPIO_CLK_ENABLE(); /* Turn off switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET); /* DeInit the Radio Switch pin */ HAL_GPIO_DeInit(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN); HAL_GPIO_DeInit(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN); HAL_GPIO_DeInit(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN); #endif return 0; #else /* USER CODE BEGIN RBI_DeInit_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_DeInit_2 */ #endif /* USE_BSP_DRIVER || MX_NUCLEO_WL55JC1 */ /* USER CODE BEGIN RBI_DeInit_3 */ /* USER CODE END RBI_DeInit_3 */ } int32_t RBI_ConfigRFSwitch(RBI_Switch_TypeDef Config) { /* USER CODE BEGIN RBI_ConfigRFSwitch_1 */ /* USER CODE END RBI_ConfigRFSwitch_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_ConfigRFSwitch((BSP_RADIO_Switch_TypeDef) Config); #elif defined(YUNHORN_STS_WLE5CCxx) switch (Config) { case RBI_SWITCH_OFF: { #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) /* Turn off switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); #else /* Turn off switch */ HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); #endif break; } case RBI_SWITCH_RX: { #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) /*Turns On in Rx Mode the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); #else /*Turns On in Rx Mode the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); #endif break; } case RBI_SWITCH_RFO_LP: { #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) /*Turns On in Tx Low Power the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); #else /*Turns On in Tx Low Power the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); #endif break; } case RBI_SWITCH_RFO_HP: { #if defined(YUNHORN_STS_RF_CHANNEL_SWITCH) /*Turns On in Tx High Power the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); #else /*Turns On in Tx High Power the RF Switch */ HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); #endif break; } default: break; } return 0; #else /* USER CODE BEGIN RBI_ConfigRFSwitch_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_ConfigRFSwitch_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_ConfigRFSwitch_3 */ /* USER CODE END RBI_ConfigRFSwitch_3 */ } int32_t RBI_GetTxConfig(void) { /* USER CODE BEGIN RBI_GetTxConfig_1 */ /* USER CODE END RBI_GetTxConfig_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_GetTxConfig(); #elif defined(YUNHORN_STS_WLE5CCxx) return RBI_CONF_RFO; #else /* USER CODE BEGIN RBI_GetTxConfig_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_GetTxConfig_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_GetTxConfig_3 */ /* USER CODE END RBI_GetTxConfig_3 */ } int32_t RBI_GetWakeUpTime(void) { /* USER CODE BEGIN RBI_GetWakeUpTime_1 */ /* USER CODE END RBI_GetWakeUpTime_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_GetWakeUpTime(); #elif defined(YUNHORN_STS_WLE5CCxx) return RF_WAKEUP_TIME; #else /* USER CODE BEGIN RBI_GetWakeUpTime_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_GetWakeUpTime_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_GetWakeUpTime_3 */ /* USER CODE END RBI_GetWakeUpTime_3 */ } int32_t RBI_IsTCXO(void) { /* USER CODE BEGIN RBI_IsTCXO_1 */ /* USER CODE END RBI_IsTCXO_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_IsTCXO(); #elif defined(YUNHORN_STS_WLE5CCxx) return IS_TCXO_SUPPORTED; #else /* USER CODE BEGIN RBI_IsTCXO_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_IsTCXO_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_IsTCXO_3 */ /* USER CODE END RBI_IsTCXO_3 */ } int32_t RBI_IsDCDC(void) { /* USER CODE BEGIN RBI_IsDCDC_1 */ /* USER CODE END RBI_IsDCDC_1 */ #if defined(USE_BSP_DRIVER) /* code generated by MX does not support BSP */ /* In order to use BSP driver, add the correspondent files in the IDE workspace */ /* and define USE_BSP_DRIVER in the preprocessor definitions or in platform.h */ return BSP_RADIO_IsDCDC(); #elif defined(YUNHORN_STS_WLE5CCxx) return IS_DCDC_SUPPORTED; #else /* USER CODE BEGIN RBI_IsDCDC_2 */ #error user to provide its board code or to call his board driver functions /* USER CODE END RBI_IsDCDC_2 */ #endif /* USE_BSP_DRIVER || YUNHORN_STS_WLE5CCxx */ /* USER CODE BEGIN RBI_IsDCDC_3 */ /* USER CODE END RBI_IsDCDC_3 */ } int32_t RBI_GetRFOMaxPowerConfig(RBI_RFOMaxPowerConfig_TypeDef Config) { /* USER CODE BEGIN RBI_GetRFOMaxPowerConfig_1 */ /* USER CODE END RBI_GetRFOMaxPowerConfig_1 */ #if defined(USE_BSP_DRIVER) /* Important note: BSP code is board dependent * STM32WL_Nucleo code can be found * either in STM32CubeWL package under Drivers/BSP/STM32WLxx_Nucleo/ * or at https://github.com/STMicroelectronics/STM32CubeWL/tree/main/Drivers/BSP/STM32WLxx_Nucleo/ * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_GetRFOMaxPowerConfig((BSP_RADIO_RFOMaxPowerConfig_TypeDef) Config); #else /* 2/ Or implement RBI_RBI_GetRFOMaxPowerConfig here */ int32_t ret = 0; /* USER CODE BEGIN RBI_GetRFOMaxPowerConfig_2 */ /* #warning user to provide its board code or to call his board driver functions */ if (Config == RBI_RFO_LP_MAXPOWER) { ret = 15; /*dBm*/ } else { ret = 22; /*dBm*/ } /* USER CODE END RBI_GetRFOMaxPowerConfig_2 */ return ret; #endif /* USE_BSP_DRIVER */ } /* USER CODE BEGIN EF */ /* USER CODE END EF */ /* Private Functions Definition -----------------------------------------------*/ /* USER CODE BEGIN PrFD */ /* USER CODE END PrFD */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/