mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
Merge pull request #10582 from dkustec/osd_tx_uplink_power
This commit is contained in:
commit
122f8f29af
8 changed files with 57 additions and 1 deletions
|
@ -1352,6 +1352,9 @@ const clivalue_t valueTable[] = {
|
||||||
#ifdef USE_RX_LINK_QUALITY_INFO
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
{ "osd_link_quality_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_LINK_QUALITY]) },
|
{ "osd_link_quality_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_LINK_QUALITY]) },
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
{ "osd_link_tx_power_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_TX_UPLINK_POWER]) },
|
||||||
|
#endif
|
||||||
#ifdef USE_RX_RSSI_DBM
|
#ifdef USE_RX_RSSI_DBM
|
||||||
{ "osd_rssi_dbm_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RSSI_DBM_VALUE]) },
|
{ "osd_rssi_dbm_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RSSI_DBM_VALUE]) },
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -160,6 +160,7 @@ typedef enum {
|
||||||
OSD_EFFICIENCY,
|
OSD_EFFICIENCY,
|
||||||
OSD_TOTAL_FLIGHTS,
|
OSD_TOTAL_FLIGHTS,
|
||||||
OSD_UP_DOWN_REFERENCE,
|
OSD_UP_DOWN_REFERENCE,
|
||||||
|
OSD_TX_UPLINK_POWER,
|
||||||
OSD_ITEM_COUNT // MUST BE LAST
|
OSD_ITEM_COUNT // MUST BE LAST
|
||||||
} osd_items_e;
|
} osd_items_e;
|
||||||
|
|
||||||
|
|
|
@ -1036,6 +1036,18 @@ static void osdElementLinkQuality(osdElementParms_t *element)
|
||||||
}
|
}
|
||||||
#endif // USE_RX_LINK_QUALITY_INFO
|
#endif // USE_RX_LINK_QUALITY_INFO
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
static void osdElementTxUplinkPower(osdElementParms_t *element)
|
||||||
|
{
|
||||||
|
const uint16_t osdUplinkTxPowerMw = rxGetUplinkTxPwrMw();
|
||||||
|
if (osdUplinkTxPowerMw < 1000) {
|
||||||
|
tfp_sprintf(element->buff, "%c%3dMW", SYM_RSSI, osdUplinkTxPowerMw);
|
||||||
|
} else {
|
||||||
|
osdPrintFloat(element->buff, SYM_RSSI, osdUplinkTxPowerMw / 1000.0f, "", 1, false, 'W');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // USE_RX_LINK_UPLINK_POWER
|
||||||
|
|
||||||
#ifdef USE_BLACKBOX
|
#ifdef USE_BLACKBOX
|
||||||
static void osdElementLogStatus(osdElementParms_t *element)
|
static void osdElementLogStatus(osdElementParms_t *element)
|
||||||
{
|
{
|
||||||
|
@ -1422,6 +1434,9 @@ static const uint8_t osdElementDisplayOrder[] = {
|
||||||
#ifdef USE_RX_LINK_QUALITY_INFO
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
OSD_LINK_QUALITY,
|
OSD_LINK_QUALITY,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
OSD_TX_UPLINK_POWER,
|
||||||
|
#endif
|
||||||
#ifdef USE_RX_RSSI_DBM
|
#ifdef USE_RX_RSSI_DBM
|
||||||
OSD_RSSI_DBM_VALUE,
|
OSD_RSSI_DBM_VALUE,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1527,6 +1542,9 @@ const osdElementDrawFn osdElementDrawFunction[OSD_ITEM_COUNT] = {
|
||||||
#ifdef USE_RX_LINK_QUALITY_INFO
|
#ifdef USE_RX_LINK_QUALITY_INFO
|
||||||
[OSD_LINK_QUALITY] = osdElementLinkQuality,
|
[OSD_LINK_QUALITY] = osdElementLinkQuality,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
[OSD_TX_UPLINK_POWER] = osdElementTxUplinkPower,
|
||||||
|
#endif
|
||||||
#ifdef USE_GPS
|
#ifdef USE_GPS
|
||||||
[OSD_FLIGHT_DIST] = osdElementGpsFlightDistance,
|
[OSD_FLIGHT_DIST] = osdElementGpsFlightDistance,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -70,6 +70,12 @@ static uint8_t telemetryBufLen = 0;
|
||||||
|
|
||||||
static timeUs_t lastRcFrameTimeUs = 0;
|
static timeUs_t lastRcFrameTimeUs = 0;
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
#define CRSF_UPLINK_POWER_LEVEL_MW_ITEMS_COUNT 8
|
||||||
|
// Uplink power levels by uplinkTXPower expressed in mW (250 mW is from ver >=4.00)
|
||||||
|
const uint16_t uplinkTXPowerStatesMw[CRSF_UPLINK_POWER_LEVEL_MW_ITEMS_COUNT] = {0, 10, 25, 100, 500, 1000, 2000, 250};
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CRSF protocol
|
* CRSF protocol
|
||||||
*
|
*
|
||||||
|
@ -130,7 +136,7 @@ typedef struct crsfPayloadRcChannelsPacked_s crsfPayloadRcChannelsPacked_t;
|
||||||
* int8_t Uplink SNR ( db )
|
* int8_t Uplink SNR ( db )
|
||||||
* uint8_t Diversity active antenna ( enum ant. 1 = 0, ant. 2 )
|
* uint8_t Diversity active antenna ( enum ant. 1 = 0, ant. 2 )
|
||||||
* uint8_t RF Mode ( enum 4fps = 0 , 50fps, 150hz)
|
* uint8_t RF Mode ( enum 4fps = 0 , 50fps, 150hz)
|
||||||
* uint8_t Uplink TX Power ( enum 0mW = 0, 10mW, 25 mW, 100 mW, 500 mW, 1000 mW, 2000mW )
|
* uint8_t Uplink TX Power ( enum 0mW = 0, 10mW, 25 mW, 100 mW, 500 mW, 1000 mW, 2000mW, 250mW )
|
||||||
* uint8_t Downlink RSSI ( dBm * -1 )
|
* uint8_t Downlink RSSI ( dBm * -1 )
|
||||||
* uint8_t Downlink package success rate / Link quality ( % )
|
* uint8_t Downlink package success rate / Link quality ( % )
|
||||||
* int8_t Downlink SNR ( db )
|
* int8_t Downlink SNR ( db )
|
||||||
|
@ -175,6 +181,11 @@ static void handleCrsfLinkStatisticsFrame(const crsfLinkStatistics_t* statsPtr,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
const uint8_t crsfUplinkPowerStatesItemIndex = (stats.uplink_TX_Power < CRSF_UPLINK_POWER_LEVEL_MW_ITEMS_COUNT) ? stats.uplink_TX_Power : 0;
|
||||||
|
rxSetUplinkTxPwrMw(uplinkTXPowerStatesMw[crsfUplinkPowerStatesItemIndex]);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (debugMode) {
|
switch (debugMode) {
|
||||||
case DEBUG_CRSF_LINK_STATISTICS_UPLINK:
|
case DEBUG_CRSF_LINK_STATISTICS_UPLINK:
|
||||||
DEBUG_SET(DEBUG_CRSF_LINK_STATISTICS_UPLINK, 0, stats.uplink_RSSI_1);
|
DEBUG_SET(DEBUG_CRSF_LINK_STATISTICS_UPLINK, 0, stats.uplink_RSSI_1);
|
||||||
|
|
|
@ -85,6 +85,10 @@ static uint16_t linkQuality = 0;
|
||||||
static uint8_t rfMode = 0;
|
static uint8_t rfMode = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
static uint16_t uplinkTxPwrMw = 0; //Uplink Tx power in mW
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MSP_RSSI_TIMEOUT_US 1500000 // 1.5 sec
|
#define MSP_RSSI_TIMEOUT_US 1500000 // 1.5 sec
|
||||||
|
|
||||||
#define RSSI_ADC_DIVISOR (4096 / 1024)
|
#define RSSI_ADC_DIVISOR (4096 / 1024)
|
||||||
|
@ -455,6 +459,13 @@ void setLinkQualityDirect(uint16_t linkqualityValue)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
void rxSetUplinkTxPwrMw(uint16_t uplinkTxPwrMwValue)
|
||||||
|
{
|
||||||
|
uplinkTxPwrMw = uplinkTxPwrMwValue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool rxUpdateCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTimeUs)
|
bool rxUpdateCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTimeUs)
|
||||||
{
|
{
|
||||||
bool signalReceived = false;
|
bool signalReceived = false;
|
||||||
|
@ -881,6 +892,13 @@ uint16_t rxGetLinkQualityPercent(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_RX_LINK_UPLINK_POWER
|
||||||
|
uint16_t rxGetUplinkTxPwrMw(void)
|
||||||
|
{
|
||||||
|
return uplinkTxPwrMw;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
uint16_t rxGetRefreshRate(void)
|
uint16_t rxGetRefreshRate(void)
|
||||||
{
|
{
|
||||||
return rxRuntimeState.rxRefreshRate;
|
return rxRuntimeState.rxRefreshRate;
|
||||||
|
|
|
@ -206,6 +206,9 @@ void setRssiDbmDirect(int16_t newRssiDbm, rssiSource_e source);
|
||||||
void rxSetRfMode(uint8_t rfModeValue);
|
void rxSetRfMode(uint8_t rfModeValue);
|
||||||
uint8_t rxGetRfMode(void);
|
uint8_t rxGetRfMode(void);
|
||||||
|
|
||||||
|
void rxSetUplinkTxPwrMw(uint16_t uplinkTxPwrMwValue);
|
||||||
|
uint16_t rxGetUplinkTxPwrMw(void);
|
||||||
|
|
||||||
void resetAllRxChannelRangeConfigurations(rxChannelRangeConfig_t *rxChannelRangeConfig);
|
void resetAllRxChannelRangeConfigurations(rxChannelRangeConfig_t *rxChannelRangeConfig);
|
||||||
|
|
||||||
void suspendRxPwmPpmSignal(void);
|
void suspendRxPwmPpmSignal(void);
|
||||||
|
|
|
@ -231,6 +231,7 @@
|
||||||
#undef USE_RX_LINK_QUALITY_INFO
|
#undef USE_RX_LINK_QUALITY_INFO
|
||||||
#undef USE_OSD_PROFILES
|
#undef USE_OSD_PROFILES
|
||||||
#undef USE_OSD_STICK_OVERLAY
|
#undef USE_OSD_STICK_OVERLAY
|
||||||
|
#undef USE_RX_LINK_UPLINK_POWER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_GPS_RESCUE)
|
#if defined(USE_GPS_RESCUE)
|
||||||
|
|
|
@ -397,4 +397,5 @@
|
||||||
#define USE_BATTERY_VOLTAGE_SAG_COMPENSATION
|
#define USE_BATTERY_VOLTAGE_SAG_COMPENSATION
|
||||||
#define USE_RX_MSP_OVERRIDE
|
#define USE_RX_MSP_OVERRIDE
|
||||||
#define USE_SIMPLIFIED_TUNING
|
#define USE_SIMPLIFIED_TUNING
|
||||||
|
#define USE_RX_LINK_UPLINK_POWER
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue