387 lines
13 KiB
C
387 lines
13 KiB
C
/**
|
|
******************************************************************************
|
|
* @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.</center></h2>
|
|
*
|
|
* 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****/
|