Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions code/base/config_file_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
#define FILE_FORCE_ROUTER "/boot/forcerouter"
#define FILE_FORCE_RESET "/boot/forcereset"
#define FILE_BOOT_LOG_STEPS "/boot/bootstepslog.txt"
#define FILE_FORCE_SHOW_ANTENNA_VALUES "/boot/showantennavalues"

//#define VIDEO_RECORDER_COMMAND "raspivid"
//#define VIDEO_RECORDER_COMMAND_VEYE "/usr/local/bin/veye_raspivid"
Expand Down Expand Up @@ -173,6 +174,7 @@
#define FILE_FORCE_ROUTER "/config/forcerouter"
#define FILE_FORCE_RESET "/config/forcereset"
#define FILE_BOOT_LOG_STEPS "/config/bootstepslog.txt"
#define FILE_FORCE_SHOW_ANTENNA_VALUES "/config/showantennavalues"

#define VIDEO_PLAYER_PIPE "ruby_player_radxa"
#define VIDEO_PLAYER_SM "ruby_player_radxa"
Expand Down
5 changes: 5 additions & 0 deletions code/base/hardware_radio.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ void reset_runtime_radio_rx_info(type_runtime_radio_rx_info* pRuntimeRadioRxInfo
pRuntimeRadioRxInfo->nDataRateBPSMCS = 0; // positive: bps, negative: mcs rate, 0: never
pRuntimeRadioRxInfo->nRadiotapFlags = 0;
pRuntimeRadioRxInfo->nAntennaCount = 1;
for( int i=0; i<MAX_RADIO_ANTENNAS; i++ )
{
pRuntimeRadioRxInfo->iAntennaDBM[i] = 1000;
pRuntimeRadioRxInfo->iAntennaDBMNoise[i] = 1000;
}
reset_runtime_radio_rx_signal_info(&(pRuntimeRadioRxInfo->signalInfoAll));
reset_runtime_radio_rx_signal_info(&(pRuntimeRadioRxInfo->signalInfoVideo));
reset_runtime_radio_rx_signal_info(&(pRuntimeRadioRxInfo->signalInfoData));
Expand Down
2 changes: 2 additions & 0 deletions code/base/hardware_radio.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ typedef struct
int nDataRateBPSMCS; // positive: bps, negative: mcs rate, 0: never
int nRadiotapFlags;
int nAntennaCount;
int iAntennaDBM[MAX_RADIO_ANTENNAS];
int iAntennaDBMNoise[MAX_RADIO_ANTENNAS];
type_runtime_radio_rx_signal_info signalInfoAll;
type_runtime_radio_rx_signal_info signalInfoVideo;
type_runtime_radio_rx_signal_info signalInfoData;
Expand Down
2 changes: 2 additions & 0 deletions code/base/shared_mem_radio.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ typedef struct
typedef struct
{
int iAntennaCount;
int iAntennaDBM[MAX_RADIO_ANTENNAS];
int iAntennaDBMNoise[MAX_RADIO_ANTENNAS];
type_runtime_radio_rx_signal_info signalInfoAll;
type_runtime_radio_rx_signal_info signalInfoVideo;
type_runtime_radio_rx_signal_info signalInfoData;
Expand Down
2 changes: 2 additions & 0 deletions code/common/radio_stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -1030,6 +1030,8 @@ int radio_stats_update_on_new_radio_packet_received(shared_mem_radio_stats* pSMR

if ( pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.nAntennaCount > pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.iAntennaCount )
pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.iAntennaCount = pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.nAntennaCount;
memcpy((u8*)&(pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.iAntennaDBM), (u8*)&(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBM), sizeof(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBM));
memcpy((u8*)&(pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.iAntennaDBMNoise), (u8*)&(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBMNoise), sizeof(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBMNoise));

memcpy((u8*)&(pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.signalInfoAll), (u8*)&(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.signalInfoAll), sizeof(type_runtime_radio_rx_signal_info));
memcpy((u8*)&(pSMRS->radio_interfaces[iInterfaceIndex].signalInfo.signalInfoVideo), (u8*)&(pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.signalInfoVideo), sizeof(type_runtime_radio_rx_signal_info));
Expand Down
65 changes: 58 additions & 7 deletions code/r_central/osd/osd_links.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,34 @@ float _osd_get_radio_link_new_height()
return fHeightLink;
}

float _osd_show_radio_bars_info(float xPos, float yPos, u32 uLastRxTime, int iMaxRxQuality, int dbm, int iSNR, bool bShowBars, bool bShowNumbers, bool bUplink, bool bHorizontal, u32 uRadioLinkNumbersFlags, bool bDraw, bool bDatarateChanged)
// Cached feature switch - showantennavalues file must exist for this to work
bool _osd_show_antenna_values_enabled()
{
static bool s_bChecked = false;
static bool s_bEnabled = false;
if ( ! s_bChecked )
{
s_bChecked = true;
s_bEnabled = ( access(FILE_FORCE_SHOW_ANTENNA_VALUES, R_OK) != -1 );
}
return s_bEnabled;
}

//show two antennas -65/-70 dBm as "65 70" due to the screen real estate limitation
void _osd_format_antenna_values(char* szOut, const int* piValues, int iCount)
{
szOut[0] = 0;
for( int k=0; k<iCount; k++ )
{
char szTmp[16];
if ( k > 0 )
strcat(szOut, " ");
sprintf(szTmp, "%02d", abs(piValues[k]));
strcat(szOut, szTmp);
}
}

float _osd_show_radio_bars_info(float xPos, float yPos, u32 uLastRxTime, int iMaxRxQuality, int dbm, int iSNR, bool bShowBars, bool bShowNumbers, bool bUplink, bool bHorizontal, u32 uRadioLinkNumbersFlags, bool bDraw, bool bDatarateChanged, const int* piAntennaDBM = NULL, const int* piAntennaSNR = NULL, int iAntennaValidCount = 0)
{
if ( ! bShowNumbers )
if ( ! bShowBars )
Expand Down Expand Up @@ -348,15 +375,19 @@ float _osd_show_radio_bars_info(float xPos, float yPos, u32 uLastRxTime, int iMa
}
else if ( uRadioLinkNumbersFlags & OSD_FLAG3_SHOW_RADIO_LINK_QUALITY_NUMBERS_DBM )
{
if ( dbm < -120 )
if ( iAntennaValidCount > 1 )
_osd_format_antenna_values(szLine1, piAntennaDBM, iAntennaValidCount);
else if ( dbm < -120 )
strcpy(szLine1, "--- dBm");
else
sprintf(szLine1, "%d dBm", dbm);
bAddedDBM = true;
}
else if ( uRadioLinkNumbersFlags & OSD_FLAG3_SHOW_RADIO_LINK_QUALITY_NUMBERS_SNR )
{
if ( iSNR <= 0 )
if ( iAntennaValidCount > 1 )
_osd_format_antenna_values(szLine1, piAntennaSNR, iAntennaValidCount);
else if ( iSNR <= 0 )
strcpy(szLine1, "SNR: ---");
else
sprintf(szLine1, "SNR: %d", iSNR);
Expand All @@ -372,7 +403,9 @@ float _osd_show_radio_bars_info(float xPos, float yPos, u32 uLastRxTime, int iMa
if ( ! bAddedDBM )
if ( uRadioLinkNumbersFlags & OSD_FLAG3_SHOW_RADIO_LINK_QUALITY_NUMBERS_DBM )
{
if ( dbm < -120 )
if ( iAntennaValidCount > 1 )
_osd_format_antenna_values(szLine2, piAntennaDBM, iAntennaValidCount);
else if ( dbm < -120 )
strcpy(szLine2, "--- dBm");
else
sprintf(szLine2, "%d dBm", dbm);
Expand All @@ -381,7 +414,9 @@ float _osd_show_radio_bars_info(float xPos, float yPos, u32 uLastRxTime, int iMa
if ( ! bAddedSNR )
if ( uRadioLinkNumbersFlags & OSD_FLAG3_SHOW_RADIO_LINK_QUALITY_NUMBERS_SNR )
{
if ( iSNR <= 0 )
if ( iAntennaValidCount > 1 )
_osd_format_antenna_values(szLine2, piAntennaSNR, iAntennaValidCount);
else if ( iSNR <= 0 )
strcpy(szLine2, "SNR: ---");
else
sprintf(szLine2, "SNR: %d", iSNR);
Expand Down Expand Up @@ -901,7 +936,23 @@ float _osd_show_radio_link_new(float xPos, float yPos, int iLocalRadioLinkId, in
}
}

float fSize = _osd_show_radio_bars_info(xPos, yPos+dySignalBars, uLastRxTime, nRxQuality, g_fOSDDbm[i], g_fOSDSNR[i], bShowBars, bShowNumbers, false, bHorizontal, uRadioLinkNumbersFlags, false, false);
// count valid antennas globally (per-packet count is unreliable)
int aAntennaDBM[MAX_RADIO_ANTENNAS];
int aAntennaSNR[MAX_RADIO_ANTENNAS];
int iAntennaValidCount = 0;
if ( _osd_show_antenna_values_enabled() )
for( int k=0; k<MAX_RADIO_ANTENNAS; k++ )
{
int iAntDBM = g_SM_RadioStats.radio_interfaces[i].signalInfo.iAntennaDBM[k];
if ( iAntDBM < 500 )
{
aAntennaDBM[iAntennaValidCount] = iAntDBM;
aAntennaSNR[iAntennaValidCount] = iAntDBM - g_SM_RadioStats.radio_interfaces[i].signalInfo.iAntennaDBMNoise[k];
iAntennaValidCount++;
}
}

float fSize = _osd_show_radio_bars_info(xPos, yPos+dySignalBars, uLastRxTime, nRxQuality, g_fOSDDbm[i], g_fOSDSNR[i], bShowBars, bShowNumbers, false, bHorizontal, uRadioLinkNumbersFlags, false, false, aAntennaDBM, aAntennaSNR, iAntennaValidCount);
if ( bHorizontal )
{
xPos -= fSize;
Expand All @@ -918,7 +969,7 @@ float _osd_show_radio_link_new(float xPos, float yPos, int iLocalRadioLinkId, in
iSNR = g_fOSDSNR[i];
}
if ( bRender )
_osd_show_radio_bars_info(xPos, yPos+dySignalBars, uLastRxTime, nRxQuality, iDBM, iSNR, bShowBars, bShowNumbers, false, bHorizontal, uRadioLinkNumbersFlags, true, true);
_osd_show_radio_bars_info(xPos, yPos+dySignalBars, uLastRxTime, nRxQuality, iDBM, iSNR, bShowBars, bShowNumbers, false, bHorizontal, uRadioLinkNumbersFlags, true, true, aAntennaDBM, aAntennaSNR, iAntennaValidCount);

if ( bIsTxCard && (1<iCountInterfacesForCurrentLink) )
if ( bRender )
Expand Down
26 changes: 26 additions & 0 deletions code/r_central/osd/osd_stats_radio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,32 @@ void osd_render_stats_full_rx_port()
g_pRenderEngine->drawTextLeft(xPos + widthCol - 2.0*padding, y, fontId, szBuff);
y += lineHeight;

// count antenna the reliable way
int iValidAntennas = 0;
int iHighestValidAntenna = -1;
for( int k=0; k<MAX_RADIO_ANTENNAS; k++ )
if ( g_SM_RadioStats.radio_interfaces[i].signalInfo.iAntennaDBM[k] < 500 )
{
iValidAntennas++;
iHighestValidAntenna = k;
}

if ( iValidAntennas > 1 )
{
g_pRenderEngine->drawText(xPos, y, fontId, "Rx Dbm/Antenna:");
szBuff[0] = 0;
for( int k=0; k<=iHighestValidAntenna; k++ )
{
if ( g_SM_RadioStats.radio_interfaces[i].signalInfo.iAntennaDBM[k] < 500 )
sprintf(szBuff2, "%d%s ", g_SM_RadioStats.radio_interfaces[i].signalInfo.iAntennaDBM[k], (k<iHighestValidAntenna)?",":"");
else
sprintf(szBuff2, "N/A%s ", (k<iHighestValidAntenna)?",":"");
strcat(szBuff, szBuff2);
}
g_pRenderEngine->drawTextLeft(xPos + widthCol - 2.0*padding, y, fontId, szBuff);
y += lineHeight;
}

if ( iRadioLinkId >= 0 )
{
sprintf(szBuff, "TX Time/Sec (link %d):", iRadioLinkId+1);
Expand Down
7 changes: 7 additions & 0 deletions code/radio/radiolink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1251,6 +1251,13 @@ u8* radio_process_wlan_data_in(int interfaceNumber, int* piOutPacketLength, int*
}
if ( iAntennaCount > pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.nAntennaCount )
pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.nAntennaCount = iAntennaCount;
for( int i=0; i<iAntennaCount && i<MAX_RADIO_ANTENNAS; i++ )
{
if ( iAntennaDBM[i] < 500 )
pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBM[i] = iAntennaDBM[i];
if ( iAntennaDBMNoise[i] < 500 )
pRadioHWInfo->runtimeInterfaceInfoRx.radioHwRxInfo.iAntennaDBMNoise[i] = iAntennaDBMNoise[i];
}


#ifdef FEATURE_RADIO_SYNCHRONIZE_RXTX_THREADS
Expand Down