1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file power_table.c 5 * @author MCD Application Team 6 * @brief This file contains supported power tables 7 ****************************************************************************** 8 * @attention 9 * 10 * Copyright (c) 2022 STMicroelectronics. 11 * All rights reserved. 12 * 13 * This software is licensed under terms that can be found in the LICENSE file 14 * in the root directory of this software component. 15 * If no LICENSE file comes with this software, it is provided AS-IS. 16 * 17 ****************************************************************************** 18 */ 19 /* USER CODE END Header */ 20 21 /* Includes ------------------------------------------------------------------*/ 22 #include "power_table.h" 23 24 /* Private typedef -----------------------------------------------------------*/ 25 26 /* VDD_LDO values to be written in PHY registers to select the TX_Power mode. 27 * g_vdd_ldo_value_1 : is to be set in PHY register address 0x63. 28 * g_vdd_ldo_value_2 : is to be set in PHY register address 0xEA. */ 29 30 typedef enum _vdd_ldo_value_e { 31 VDD_LDO_VALUE_MAX_POWER = 0x70, 32 VDD_LDO_VALUE_LOW_POWER = 0x20, 33 VDD_LDO_VALUE_2_ID_0 = 0x00, 34 } vdd_ldo_value_e; 35 36 /* Private defines -----------------------------------------------------------*/ 37 /* Private macros ------------------------------------------------------------*/ 38 /* Private variables ---------------------------------------------------------*/ 39 40 const power_table_entry ll_tx_power_table_max_power[] = { 41 {0x02, 0x02, 0x01, -20}, /* Actual_Power = -20.4 dBm */ 42 {0x02, 0x03, 0x01, -19}, /* Actual_Power = -19.4 dBm */ 43 {0x02, 0x04, 0x01, -18}, /* Actual_Power = -18.3 dBm */ 44 {0x02, 0x05, 0x01, -17}, /* Actual_Power = -17.3 dBm */ 45 {0x02, 0x06, 0x01, -16}, /* Actual_Power = -16.4 dBm */ 46 {0x02, 0x07, 0x01, -15}, /* Actual_Power = -15.4 dBm */ 47 {0x02, 0x08, 0x01, -14}, /* Actual_Power = -14.3 dBm */ 48 {0x02, 0x09, 0x01, -13}, /* Actual_Power = -13.3 dBm */ 49 {0x02, 0x0A, 0x01, -12}, /* Actual_Power = -12.3 dBm */ 50 {0x02, 0x0B, 0x01, -11}, /* Actual_Power = -11.4 dBm */ 51 {0x02, 0x0C, 0x01, -10}, /* Actual_Power = -10.4 dBm */ 52 {0x02, 0x0D, 0x01, -9}, /* Actual_Power = -9.5 dBm */ 53 {0x02, 0x0E, 0x01, -8}, /* Actual_Power = -8.4 dBm */ 54 {0x00, 0x0F, 0x01, -7}, /* Actual_Power = -7.5 dBm */ 55 {0x00, 0x10, 0x01, -6}, /* Actual_Power = -6.5 dBm */ 56 {0x00, 0x11, 0x01, -5}, /* Actual_Power = -5.4 dBm */ 57 {0x00, 0x12, 0x01, -4}, /* Actual_Power = -4.5 dBm */ 58 {0x00, 0x13, 0x01, -3}, /* Actual_Power = -3.5 dBm */ 59 {0x02, 0x14, 0x01, -2}, /* Actual_Power = -2.4 dBm */ 60 {0x00, 0x15, 0x01, -1}, /* Actual_Power = -1.5 dBm */ 61 {0x02, 0x16, 0x01, 0}, /* Actual_Power = -0.3 dBm */ 62 {0x00, 0x17, 0x01, 1}, /* Actual_Power = 0.9 dBm */ 63 {0x00, 0x18, 0x01, 2}, /* Actual_Power = 2.3 dBm */ 64 {0x02, 0x18, 0x01, 3}, /* Actual_Power = 2.8 dBm */ 65 {0x00, 0x19, 0x01, 4}, /* Actual_Power = 3.9 dBm */ 66 {0x02, 0x19, 0x01, 5}, /* Actual_Power = 4.8 dBm */ 67 {0x03, 0x19, 0x01, 6}, /* Actual_Power = 5.6 dBm */ 68 {0x05, 0x19, 0x01, 7}, /* Actual_Power = 6.9 dBm */ 69 {0x06, 0x19, 0x01, 8}, /* Actual_Power = 7.5 dBm */ 70 {0x08, 0x19, 0x01, 9}, /* Actual_Power = 8.5 dBm */ 71 {0x0D, 0x19, 0x01, 10}, /* Actual_Power = 10 dBm */ 72 }; 73 74 const power_table_entry ll_tx_power_table_low_power[] = { 75 {0x02, 0x02, 0x01, -20}, /* Actual_Power = -20.5 dBm */ 76 {0x02, 0x03, 0x01, -19}, /* Actual_Power = -19.5 dBm */ 77 {0x00, 0x05, 0x01, -18}, /* Actual_Power = -17.9 dBm */ 78 {0x00, 0x06, 0x01, -17}, /* Actual_Power = -17.0 dBm */ 79 {0x00, 0x07, 0x01, -16}, /* Actual_Power = -16.0 dBm */ 80 {0x00, 0x08, 0x01, -15}, /* Actual_Power = -15.0 dBm */ 81 {0x00, 0x09, 0x01, -14}, /* Actual_Power = -14.1 dBm */ 82 {0x00, 0x0A, 0x01, -13}, /* Actual_Power = -13.1 dBm */ 83 {0x00, 0x0B, 0x01, -12}, /* Actual_Power = -12.2 dBm */ 84 {0x00, 0x0C, 0x01, -11}, /* Actual_Power = -11.3 dBm */ 85 {0x00, 0x0D, 0x01, -10}, /* Actual_Power = -10.4 dBm */ 86 {0x00, 0x0E, 0x01, -9}, /* Actual_Power = -9.4 dBm */ 87 {0x00, 0x0F, 0x01, -8}, /* Actual_Power = -8.3 dBm */ 88 {0x00, 0x10, 0x01, -7}, /* Actual_Power = -7.2 dBm */ 89 {0x00, 0x11, 0x01, -6}, /* Actual_Power = -6.2 dBm */ 90 {0x00, 0x12, 0x01, -5}, /* Actual_Power = -5.5 dBm */ 91 {0x00, 0x13, 0x01, -4}, /* Actual_Power = -4.5 dBm */ 92 {0x02, 0x14, 0x01, -3}, /* Actual_Power = -3.5 dBm */ 93 {0x02, 0x15, 0x01, -2}, /* Actual_Power = -2.5 dBm */ 94 {0x00, 0x17, 0x01, -1}, /* Actual_Power = -0.6 dBm */ 95 {0x02, 0x17, 0x01, 0}, /* Actual_Power = -0.4 dBm */ 96 {0x00, 0x18, 0x01, 1}, /* Actual_Power = 0.7 dBm */ 97 {0x00, 0x19, 0x01, 2}, /* Actual_Power = 2.0 dBm */ 98 {0x02, 0x19, 0x01, 3}, /* Actual_Power = 2.6 dBm */ 99 }; 100 101 const power_table_entry ll_tx_power_table_external_PA[] = { 102 {0x02, 0x14, 0x00, -20}, /* Actual_Power = 20 dBm */ 103 {0x02, 0x14, 0x00, -19}, /* Actual_Power = 20 dBm */ 104 {0x02, 0x14, 0x00, -18}, /* Actual_Power = 20 dBm */ 105 {0x02, 0x14, 0x00, -17}, /* Actual_Power = 20 dBm */ 106 {0x02, 0x14, 0x00, -16}, /* Actual_Power = 20 dBm */ 107 {0x02, 0x14, 0x00, -15}, /* Actual_Power = 20 dBm */ 108 {0x02, 0x14, 0x00, -14}, /* Actual_Power = 20 dBm */ 109 {0x02, 0x14, 0x00, -13}, /* Actual_Power = 20 dBm */ 110 {0x02, 0x14, 0x00, -12}, /* Actual_Power = 20 dBm */ 111 {0x02, 0x14, 0x00, -11}, /* Actual_Power = 20 dBm */ 112 {0x02, 0x14, 0x00, -10}, /* Actual_Power = 20 dBm */ 113 {0x02, 0x14, 0x00, -9}, /* Actual_Power = 20 dBm */ 114 {0x02, 0x14, 0x00, -8}, /* Actual_Power = 20 dBm */ 115 {0x02, 0x14, 0x00, -7}, /* Actual_Power = 20 dBm */ 116 {0x02, 0x14, 0x00, -6}, /* Actual_Power = 20 dBm */ 117 {0x02, 0x14, 0x00, -5}, /* Actual_Power = 20 dBm */ 118 {0x02, 0x14, 0x00, -4}, /* Actual_Power = 20 dBm */ 119 {0x02, 0x14, 0x00, -3}, /* Actual_Power = 20 dBm */ 120 {0x02, 0x14, 0x00, -2}, /* Actual_Power = 20 dBm */ 121 {0x02, 0x14, 0x00, -1}, /* Actual_Power = 20 dBm */ 122 {0x02, 0x14, 0x00, 0}, /* Actual_Power = 20 dBm */ 123 {0x02, 0x14, 0x00, 1}, /* Actual_Power = 20 dBm */ 124 {0x02, 0x14, 0x00, 2}, /* Actual_Power = 20 dBm */ 125 {0x02, 0x14, 0x00, 3}, /* Actual_Power = 20 dBm */ 126 {0x02, 0x14, 0x00, 4}, /* Actual_Power = 20 dBm */ 127 {0x02, 0x14, 0x00, 5}, /* Actual_Power = 20 dBm */ 128 {0x02, 0x14, 0x00, 6}, /* Actual_Power = 20 dBm */ 129 {0x02, 0x14, 0x00, 7}, /* Actual_Power = 20 dBm */ 130 {0x02, 0x14, 0x00, 8}, /* Actual_Power = 20 dBm */ 131 {0x02, 0x14, 0x00, 9}, /* Actual_Power = 20 dBm */ 132 {0x02, 0x14, 0x00, 10}, /* Actual_Power = 20 dBm */ 133 }; 134 135 /* USER CODE BEGIN ll_tx_power_table */ 136 137 /* USER CODE END ll_tx_power_table */ 138 139 /* Supported TX_Power tables. */ 140 const power_table_id_t ll_tx_power_tables[] = { 141 {ll_tx_power_table_max_power, sizeof(ll_tx_power_table_max_power)/sizeof(ll_tx_power_table_max_power[0]), VDD_LDO_VALUE_MAX_POWER, VDD_LDO_VALUE_2_ID_0, 0}, 142 {ll_tx_power_table_low_power, sizeof(ll_tx_power_table_low_power)/sizeof(ll_tx_power_table_low_power[0]), VDD_LDO_VALUE_LOW_POWER, VDD_LDO_VALUE_2_ID_0, 1}, 143 {ll_tx_power_table_external_PA, sizeof(ll_tx_power_table_external_PA)/sizeof(ll_tx_power_table_external_PA[0]), VDD_LDO_VALUE_LOW_POWER, VDD_LDO_VALUE_2_ID_0, 2}, 144 /* USER CODE BEGIN ll_tx_power_tables */ 145 146 /* USER CODE END ll_tx_power_tables */ 147 }; 148 149 /* Number of supported TX_Power tables. */ 150 const uint8_t num_of_supported_power_tables = sizeof(ll_tx_power_tables)/sizeof(ll_tx_power_tables[0]); 151 152 /* Functions Definition ------------------------------------------------------*/ 153 /* Private functions ----------------------------------------------------------*/ 154 /* Public functions ----------------------------------------------------------*/ 155