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

View File

@ -1086,7 +1086,7 @@ void osdUpdateAlarms(void)
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);
} else {
CLR_BLINK(OSD_RSSI_VALUE);
@ -1202,7 +1202,7 @@ static void osdUpdateStats(void)
stats.max_current = value;
}
value = scaleRange(getRssi(), 0, 1024, 0, 100);
value = getRssiPercent();
if (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;
#if defined(USE_RX_FRSKY_SPI_TELEMETRY)
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL);
setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
#endif
}
@ -269,7 +269,7 @@ rx_spi_received_e frSkyDHandlePacket(uint8_t * const packet, uint8_t * const pro
ledIsOn = !ledIsOn;
#if defined(USE_RX_FRSKY_SPI_TELEMETRY)
setRssiUnfiltered(0, RSSI_SOURCE_RX_PROTOCOL);
setRssi(0, RSSI_SOURCE_RX_PROTOCOL);
#endif
nextChannel(13);
}

View File

@ -106,7 +106,7 @@ void setRssiDbm(uint8_t value)
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

View File

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

View File

@ -183,7 +183,7 @@ static void checkTimeout (void)
if(countTimeout > 31) {
timeout = timings->syncPacket;
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL);
setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
} else {
timeout = timings->packet;
countTimeout++;
@ -206,8 +206,8 @@ static void checkRSSI (void)
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]
setRssiFiltered(constrain(tmp, 0, 1023), RSSI_SOURCE_RX_PROTOCOL);
int16_t tmp = 2280 - 24 * rssi_dBm; // convert to [0...1023]
setRssiDirect(tmp, RSSI_SOURCE_RX_PROTOCOL);
}
static bool isValidPacket (const uint8_t *packet) {

View File

@ -269,7 +269,7 @@ static uint8_t fportFrameStatus(rxRuntimeConfig_t *rxRuntimeConfig)
} else {
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();
}
@ -323,7 +323,7 @@ static uint8_t fportFrameStatus(rxRuntimeConfig_t *rxRuntimeConfig)
}
if (lastRcFrameReceivedMs && ((millis() - lastRcFrameReceivedMs) > FPORT_MAX_TELEMETRY_AGE_MS)) {
setRssiFiltered(0, RSSI_SOURCE_RX_PROTOCOL);
setRssiDirect(0, RSSI_SOURCE_RX_PROTOCOL);
lastRcFrameReceivedMs = 0;
}

View File

@ -374,10 +374,10 @@ bool rxUpdateCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTime)
if (frameStatus & (RX_FRAME_FAILSAFE | RX_FRAME_DROPPED)) {
// No (0%) signal
setRssiUnfiltered(0, RSSI_SOURCE_FRAME_ERRORS);
setRssi(0, RSSI_SOURCE_FRAME_ERRORS);
} else {
// 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) {
return;
@ -589,7 +589,7 @@ void setRssiFiltered(uint16_t newRssi, rssiSource_e source)
#define RSSI_SAMPLE_COUNT 16
void setRssiUnfiltered(uint16_t rssiValue, rssiSource_e source)
void setRssi(uint16_t rssiValue, rssiSource_e source)
{
if (source != rssiSource) {
return;
@ -632,7 +632,7 @@ static void updateRSSIPWM(void)
}
// 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)
@ -648,15 +648,14 @@ static void updateRSSIADC(timeUs_t currentTimeUs)
rssiUpdateAt = currentTimeUs + DELAY_50_HZ;
const uint16_t adcRssiSample = adcGetChannel(ADC_RSSI);
uint16_t rssiValue = (uint16_t)(adcRssiSample / RSSI_ADC_DIVISOR);
rssiValue = constrain(rssiValue, 0, RSSI_MAX_VALUE);
uint16_t rssiValue = adcRssiSample / RSSI_ADC_DIVISOR;
// RSSI_Invert option
if (rxConfig()->rssi_invert) {
rssiValue = RSSI_MAX_VALUE - rssiValue;
}
setRssiUnfiltered((uint16_t)rssiValue, RSSI_SOURCE_ADC);
setRssi((uint16_t)rssiValue, RSSI_SOURCE_ADC);
#endif
}
@ -684,6 +683,11 @@ uint16_t getRssi(void)
return (rxConfig()->rssi_scale / 100.0f) * rssi;
}
uint8_t getRssiPercent(void)
{
return scaleRange(getRssi(), 0, RSSI_MAX_VALUE, 0, 100);
}
uint16_t rxGetRefreshRate(void)
{
return rxRuntimeConfig.rxRefreshRate;

View File

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

View File

@ -196,7 +196,7 @@ static void ltm_sframe(void)
ltm_initialise_packet('S');
ltm_serialise_16(getBatteryVoltage() * 100); //vbat converted to mv
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((lt_flightmode << 2) | lt_statemode);
ltm_finalise();

View File

@ -281,7 +281,7 @@ void mavlinkSendRCChannelsAndRSSI(void)
// chan8_raw RC channel 8 value, in microseconds
(rxRuntimeConfig.channelCount >= 8) ? rcData[7] : 0,
// 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);
mavlinkSerialWrite(mavBuffer, msgLength);
}