Fix usages, scaling.

This commit is contained in:
mikeller 2018-05-29 23:08:26 +12:00
parent 9a7c863c3c
commit d401e3bbbe
11 changed files with 30 additions and 25 deletions

View File

@ -495,7 +495,7 @@ static void applyLedFixedLayers(void)
case LED_FUNCTION_RSSI: case LED_FUNCTION_RSSI:
color = HSV(RED); color = HSV(RED);
hOffset += scaleRange(getRssi() * 100, 0, 1023, -30, 120); hOffset += scaleRange(getRssiPercent(), 0, 100, -30, 120);
break; break;
default: default:
@ -714,7 +714,7 @@ static void applyLedRssiLayer(bool updateNow, timeUs_t *timer)
int timerDelay = HZ_TO_US(1); int timerDelay = HZ_TO_US(1);
if (updateNow) { if (updateNow) {
int state = (getRssi() * 100) / 1023; int state = getRssiPercent();
if (state > 50) { if (state > 50) {
flash = true; flash = true;

View File

@ -1086,7 +1086,7 @@ void osdUpdateAlarms(void)
int32_t alt = osdGetMetersToSelectedUnit(getEstimatedAltitude()) / 100; int32_t alt = osdGetMetersToSelectedUnit(getEstimatedAltitude()) / 100;
if (scaleRange(getRssi(), 0, 1024, 0, 100) < osdConfig()->rssi_alarm) { if (getRssiPercent() < osdConfig()->rssi_alarm) {
SET_BLINK(OSD_RSSI_VALUE); SET_BLINK(OSD_RSSI_VALUE);
} else { } else {
CLR_BLINK(OSD_RSSI_VALUE); CLR_BLINK(OSD_RSSI_VALUE);
@ -1202,7 +1202,7 @@ static void osdUpdateStats(void)
stats.max_current = value; stats.max_current = value;
} }
value = scaleRange(getRssi(), 0, 1024, 0, 100); value = getRssiPercent();
if (stats.min_rssi > value) { if (stats.min_rssi > value) {
stats.min_rssi = value; stats.min_rssi = value;
} }

View File

@ -254,7 +254,7 @@ rx_spi_received_e frSkyDHandlePacket(uint8_t * const packet, uint8_t * const pro
timeoutUs = 50; timeoutUs = 50;
#if defined(USE_RX_FRSKY_SPI_TELEMETRY) #if defined(USE_RX_FRSKY_SPI_TELEMETRY)
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL); setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
#endif #endif
} }
@ -269,7 +269,7 @@ rx_spi_received_e frSkyDHandlePacket(uint8_t * const packet, uint8_t * const pro
ledIsOn = !ledIsOn; ledIsOn = !ledIsOn;
#if defined(USE_RX_FRSKY_SPI_TELEMETRY) #if defined(USE_RX_FRSKY_SPI_TELEMETRY)
setRssiUnfiltered(0, RSSI_SOURCE_RX_PROTOCOL); setRssi(0, RSSI_SOURCE_RX_PROTOCOL);
#endif #endif
nextChannel(13); nextChannel(13);
} }

View File

@ -106,7 +106,7 @@ void setRssiDbm(uint8_t value)
rssiDbm = ((((uint16_t)value) * 18) >> 5) + 65; rssiDbm = ((((uint16_t)value) * 18) >> 5) + 65;
} }
setRssiUnfiltered(constrain(rssiDbm << 3, 0, 1023), RSSI_SOURCE_RX_PROTOCOL); setRssi(rssiDbm << 3, RSSI_SOURCE_RX_PROTOCOL);
} }
#endif // USE_RX_FRSKY_SPI_TELEMETRY #endif // USE_RX_FRSKY_SPI_TELEMETRY

View File

@ -451,7 +451,7 @@ rx_spi_received_e frSkyXHandlePacket(uint8_t * const packet, uint8_t * const pro
ledIsOn = !ledIsOn; ledIsOn = !ledIsOn;
#if defined(USE_RX_FRSKY_SPI_TELEMETRY) #if defined(USE_RX_FRSKY_SPI_TELEMETRY)
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL); setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
#endif #endif
nextChannel(1); nextChannel(1);
cc2500Strobe(CC2500_SRX); cc2500Strobe(CC2500_SRX);

View File

@ -183,7 +183,7 @@ static void checkTimeout (void)
if(countTimeout > 31) { if(countTimeout > 31) {
timeout = timings->syncPacket; timeout = timings->syncPacket;
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL); setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
} else { } else {
timeout = timings->packet; timeout = timings->packet;
countTimeout++; countTimeout++;
@ -206,8 +206,8 @@ static void checkRSSI (void)
rssi_dBm = 50 + sum / (3 * FLYSKY_RSSI_SAMPLE_COUNT); // range about [95...52], -dBm rssi_dBm = 50 + sum / (3 * FLYSKY_RSSI_SAMPLE_COUNT); // range about [95...52], -dBm
int16_t tmp = 2280 - 24 * rssi_dBm;// convert to [0...1023] int16_t tmp = 2280 - 24 * rssi_dBm; // convert to [0...1023]
setRssiFiltered(constrain(tmp, 0, 1023), RSSI_SOURCE_RX_PROTOCOL); setRssiDirect(tmp, RSSI_SOURCE_RX_PROTOCOL);
} }
static bool isValidPacket (const uint8_t *packet) { static bool isValidPacket (const uint8_t *packet) {

View File

@ -269,7 +269,7 @@ static uint8_t fportFrameStatus(rxRuntimeConfig_t *rxRuntimeConfig)
} else { } else {
result = sbusChannelsDecode(rxRuntimeConfig, &frame->data.controlData.channels); result = sbusChannelsDecode(rxRuntimeConfig, &frame->data.controlData.channels);
setRssiUnfiltered(scaleRange(constrain(frame->data.controlData.rssi, 0, 100), 0, 100, 0, 1024), RSSI_SOURCE_RX_PROTOCOL); setRssi(scaleRange(frame->data.controlData.rssi, 0, 100, 0, 1024), RSSI_SOURCE_RX_PROTOCOL);
lastRcFrameReceivedMs = millis(); lastRcFrameReceivedMs = millis();
} }
@ -323,7 +323,7 @@ static uint8_t fportFrameStatus(rxRuntimeConfig_t *rxRuntimeConfig)
} }
if (lastRcFrameReceivedMs && ((millis() - lastRcFrameReceivedMs) > FPORT_MAX_TELEMETRY_AGE_MS)) { if (lastRcFrameReceivedMs && ((millis() - lastRcFrameReceivedMs) > FPORT_MAX_TELEMETRY_AGE_MS)) {
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL); setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
lastRcFrameReceivedMs = 0; lastRcFrameReceivedMs = 0;
} }

View File

@ -374,10 +374,10 @@ bool rxUpdateCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTime)
if (frameStatus & (RX_FRAME_FAILSAFE | RX_FRAME_DROPPED)) { if (frameStatus & (RX_FRAME_FAILSAFE | RX_FRAME_DROPPED)) {
// No (0%) signal // No (0%) signal
setRssiUnfiltered(0, RSSI_SOURCE_FRAME_ERRORS); setRssi(0, RSSI_SOURCE_FRAME_ERRORS);
} else { } else {
// Valid (100%) signal // Valid (100%) signal
setRssiUnfiltered(RSSI_MAX_VALUE, RSSI_SOURCE_FRAME_ERRORS); setRssi(RSSI_MAX_VALUE, RSSI_SOURCE_FRAME_ERRORS);
} }
} }
@ -578,7 +578,7 @@ void parseRcChannels(const char *input, rxConfig_t *rxConfig)
} }
} }
void setRssiFiltered(uint16_t newRssi, rssiSource_e source) void setRssiDirect(uint16_t newRssi, rssiSource_e source)
{ {
if (source != rssiSource) { if (source != rssiSource) {
return; return;
@ -589,7 +589,7 @@ void setRssiFiltered(uint16_t newRssi, rssiSource_e source)
#define RSSI_SAMPLE_COUNT 16 #define RSSI_SAMPLE_COUNT 16
void setRssiUnfiltered(uint16_t rssiValue, rssiSource_e source) void setRssi(uint16_t rssiValue, rssiSource_e source)
{ {
if (source != rssiSource) { if (source != rssiSource) {
return; return;
@ -632,7 +632,7 @@ static void updateRSSIPWM(void)
} }
// Range of rawPwmRssi is [1000;2000]. rssi should be in [0;1023]; // Range of rawPwmRssi is [1000;2000]. rssi should be in [0;1023];
setRssiFiltered(constrain((uint16_t)(((pwmRssi - 1000) / 1000.0f) * 1024.0f), 0, RSSI_MAX_VALUE), RSSI_SOURCE_RX_CHANNEL); setRssiDirect(constrain(((pwmRssi - 1000) / 1000.0f) * RSSI_MAX_VALUE, 0, RSSI_MAX_VALUE), RSSI_SOURCE_RX_CHANNEL);
} }
static void updateRSSIADC(timeUs_t currentTimeUs) static void updateRSSIADC(timeUs_t currentTimeUs)
@ -648,15 +648,14 @@ static void updateRSSIADC(timeUs_t currentTimeUs)
rssiUpdateAt = currentTimeUs + DELAY_50_HZ; rssiUpdateAt = currentTimeUs + DELAY_50_HZ;
const uint16_t adcRssiSample = adcGetChannel(ADC_RSSI); const uint16_t adcRssiSample = adcGetChannel(ADC_RSSI);
uint16_t rssiValue = (uint16_t)(adcRssiSample / RSSI_ADC_DIVISOR); uint16_t rssiValue = adcRssiSample / RSSI_ADC_DIVISOR;
rssiValue = constrain(rssiValue, 0, RSSI_MAX_VALUE);
// RSSI_Invert option // RSSI_Invert option
if (rxConfig()->rssi_invert) { if (rxConfig()->rssi_invert) {
rssiValue = RSSI_MAX_VALUE - rssiValue; rssiValue = RSSI_MAX_VALUE - rssiValue;
} }
setRssiUnfiltered((uint16_t)rssiValue, RSSI_SOURCE_ADC); setRssi((uint16_t)rssiValue, RSSI_SOURCE_ADC);
#endif #endif
} }
@ -684,6 +683,11 @@ uint16_t getRssi(void)
return (rxConfig()->rssi_scale / 100.0f) * rssi; return (rxConfig()->rssi_scale / 100.0f) * rssi;
} }
uint8_t getRssiPercent(void)
{
return scaleRange(getRssi(), 0, RSSI_MAX_VALUE, 0, 100);
}
uint16_t rxGetRefreshRate(void) uint16_t rxGetRefreshRate(void)
{ {
return rxRuntimeConfig.rxRefreshRate; return rxRuntimeConfig.rxRefreshRate;

View File

@ -160,11 +160,12 @@ void parseRcChannels(const char *input, struct rxConfig_s *rxConfig);
#define RSSI_MAX_VALUE 1023 #define RSSI_MAX_VALUE 1023
void setRssiFiltered(uint16_t newRssi, rssiSource_e source); void setRssiDirect(uint16_t newRssi, rssiSource_e source);
void setRssiUnfiltered(uint16_t rssiValue, rssiSource_e source); void setRssi(uint16_t rssiValue, rssiSource_e source);
void setRssiMsp(uint8_t newMspRssi); void setRssiMsp(uint8_t newMspRssi);
void updateRSSI(timeUs_t currentTimeUs); void updateRSSI(timeUs_t currentTimeUs);
uint16_t getRssi(void); uint16_t getRssi(void);
uint8_t getRssiPercent(void);
void resetAllRxChannelRangeConfigurations(rxChannelRangeConfig_t *rxChannelRangeConfig); void resetAllRxChannelRangeConfigurations(rxChannelRangeConfig_t *rxChannelRangeConfig);

View File

@ -196,7 +196,7 @@ static void ltm_sframe(void)
ltm_initialise_packet('S'); ltm_initialise_packet('S');
ltm_serialise_16(getBatteryVoltage() * 100); //vbat converted to mv ltm_serialise_16(getBatteryVoltage() * 100); //vbat converted to mv
ltm_serialise_16(0); // current, not implemented ltm_serialise_16(0); // current, not implemented
ltm_serialise_8((uint8_t)((getRssi() * 254) / 1023)); // scaled RSSI (uchar) ltm_serialise_8(scaleRange(getRssi(), 0, RSSI_MAX_VALUE, 0, 255)); // scaled RSSI (uchar)
ltm_serialise_8(0); // no airspeed ltm_serialise_8(0); // no airspeed
ltm_serialise_8((lt_flightmode << 2) | lt_statemode); ltm_serialise_8((lt_flightmode << 2) | lt_statemode);
ltm_finalise(); ltm_finalise();

View File

@ -281,7 +281,7 @@ void mavlinkSendRCChannelsAndRSSI(void)
// chan8_raw RC channel 8 value, in microseconds // chan8_raw RC channel 8 value, in microseconds
(rxRuntimeConfig.channelCount >= 8) ? rcData[7] : 0, (rxRuntimeConfig.channelCount >= 8) ? rcData[7] : 0,
// rssi Receive signal strength indicator, 0: 0%, 255: 100% // rssi Receive signal strength indicator, 0: 0%, 255: 100%
scaleRange(getRssi(), 0, 1023, 0, 255)); scaleRange(getRssi(), 0, RSSI_MAX_VALUE, 0, 255));
msgLength = mavlink_msg_to_send_buffer(mavBuffer, &mavMsg); msgLength = mavlink_msg_to_send_buffer(mavBuffer, &mavMsg);
mavlinkSerialWrite(mavBuffer, msgLength); mavlinkSerialWrite(mavBuffer, msgLength);
} }