mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 00:35:18 +03:00
Simplification for div_and_round function
This commit is contained in:
parent
740a2a71f5
commit
9c0e0a136a
5 changed files with 28 additions and 27 deletions
|
@ -19,7 +19,6 @@
|
|||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
#include "timers.h"
|
||||
|
||||
CustomFunctionsContext modelFunctionsContext = { 0 };
|
||||
|
||||
|
@ -57,16 +56,16 @@ PLAY_FUNCTION(playValue, source_t idx)
|
|||
if (telemetrySensor.prec > 0) {
|
||||
if (telemetrySensor.prec == 2) {
|
||||
if (val >= 5000) {
|
||||
val = div_and_round<100>(val);
|
||||
val = div_and_round(val, 100);
|
||||
}
|
||||
else {
|
||||
val = div_and_round<10>(val);
|
||||
val = div_and_round(val, 10);
|
||||
attr = PREC1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (val >= 500) {
|
||||
val = div_and_round<10>(val);
|
||||
val = div_and_round(val, 10);
|
||||
}
|
||||
else {
|
||||
attr = PREC1;
|
||||
|
@ -113,7 +112,7 @@ PLAY_FUNCTION(playValue, source_t idx)
|
|||
if (TELEMETRY_STREAMING()) {
|
||||
idx -= (MIXSRC_FIRST_TELEM+TELEM_A1-1);
|
||||
uint8_t att = 0;
|
||||
int16_t converted_value = div_and_round<10>(applyChannelRatio(idx, val));;
|
||||
int16_t converted_value = div_and_round(applyChannelRatio(idx, val), 10);
|
||||
if (ANA_CHANNEL_UNIT(idx) < UNIT_RAW) {
|
||||
att = PREC1;
|
||||
}
|
||||
|
@ -122,7 +121,7 @@ PLAY_FUNCTION(playValue, source_t idx)
|
|||
break;
|
||||
case MIXSRC_FIRST_TELEM+TELEM_CELL-1:
|
||||
case MIXSRC_FIRST_TELEM+TELEM_MIN_CELL-1:
|
||||
PLAY_NUMBER(div_and_round<10>(val), 1+UNIT_VOLTS, PREC1);
|
||||
PLAY_NUMBER(div_and_round(val, 10), 1+UNIT_VOLTS, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_FIRST_TELEM+TELEM_VFAS-1:
|
||||
|
@ -140,11 +139,11 @@ PLAY_FUNCTION(playValue, source_t idx)
|
|||
case MIXSRC_FIRST_TELEM+TELEM_ACCx-1:
|
||||
case MIXSRC_FIRST_TELEM+TELEM_ACCy-1:
|
||||
case MIXSRC_FIRST_TELEM+TELEM_ACCz-1:
|
||||
PLAY_NUMBER(div_and_round<10>(val), 1+UNIT_G, PREC1);
|
||||
PLAY_NUMBER(div_and_round(val, 10), 1+UNIT_G, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_FIRST_TELEM+TELEM_VSPEED-1:
|
||||
PLAY_NUMBER(div_and_round<10>(val), 1+UNIT_METERS_PER_SECOND, PREC1);
|
||||
PLAY_NUMBER(div_and_round(val, 10), 1+UNIT_METERS_PER_SECOND, PREC1);
|
||||
break;
|
||||
|
||||
case MIXSRC_FIRST_TELEM+TELEM_ASPEED-1:
|
||||
|
@ -176,9 +175,9 @@ PLAY_FUNCTION(playValue, source_t idx)
|
|||
{
|
||||
getvalue_t rpm = val;
|
||||
if (rpm > 100)
|
||||
rpm = 10 * div_and_round<10>(rpm);
|
||||
rpm = 10 * div_and_round(rpm, 10);
|
||||
if (rpm > 1000)
|
||||
rpm = 10 * div_and_round<10>(rpm);
|
||||
rpm = 10 * div_and_round(rpm, 10);
|
||||
PLAY_NUMBER(rpm, 1+UNIT_RPMS, 0);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -973,14 +973,14 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, lcdint_t v
|
|||
{
|
||||
lcdint_t converted_value = applyChannelRatio(channel, val);
|
||||
if (ANA_CHANNEL_UNIT(channel) >= UNIT_RAW) {
|
||||
converted_value = div_and_round<10>(converted_value);
|
||||
converted_value = div_and_round(converted_value, 10);
|
||||
}
|
||||
else {
|
||||
if (abs(converted_value) < 1000) {
|
||||
att |= PREC2;
|
||||
}
|
||||
else {
|
||||
converted_value = div_and_round<10>(converted_value);
|
||||
converted_value = div_and_round(converted_value, 10);
|
||||
att |= PREC1;
|
||||
}
|
||||
}
|
||||
|
@ -1023,7 +1023,7 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, lcdint_t v
|
|||
break;
|
||||
|
||||
case TELEM_VSPEED-1:
|
||||
putsValueWithUnit(x, y, div_and_round<10>(val), UNIT_RAW, att|PREC1);
|
||||
putsValueWithUnit(x, y, div_and_round(val, 10), UNIT_RAW, att|PREC1);
|
||||
break;
|
||||
|
||||
case TELEM_ASPEED-1:
|
||||
|
@ -1045,7 +1045,7 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, lcdint_t v
|
|||
|
||||
#if defined(FRSKY_SPORT)
|
||||
case TELEM_ALT-1:
|
||||
putsValueWithUnit(x, y, div_and_round<10>(val), UNIT_DIST, att|PREC1);
|
||||
putsValueWithUnit(x, y, div_and_round(val, 10), UNIT_DIST, att|PREC1);
|
||||
break;
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
case TELEM_ALT-1:
|
||||
|
|
|
@ -108,7 +108,7 @@ void applyExpos(int16_t * anas, uint8_t mode APPLY_EXPOS_EXTRA_PARAMS)
|
|||
//========== WEIGHT ===============
|
||||
#if defined(CPUARM)
|
||||
int32_t weight = GET_GVAR_PREC1(ed->weight, MIN_EXPO_WEIGHT, 100, mixerCurrentFlightMode);
|
||||
v = div_and_round<1000>((int32_t)v * weight);
|
||||
v = div_and_round((int32_t)v * weight, 1000);
|
||||
#else
|
||||
int16_t weight = GET_GVAR(ed->weight, MIN_EXPO_WEIGHT, 100, mixerCurrentFlightMode);
|
||||
weight = calc100to256(weight);
|
||||
|
@ -118,7 +118,7 @@ void applyExpos(int16_t * anas, uint8_t mode APPLY_EXPOS_EXTRA_PARAMS)
|
|||
#if defined(VIRTUALINPUTS)
|
||||
//========== OFFSET ===============
|
||||
int32_t offset = GET_GVAR_PREC1(ed->offset, -100, 100, mixerCurrentFlightMode);
|
||||
if (offset) v += div_and_round<10>(calc100toRESX(offset));
|
||||
if (offset) v += div_and_round(calc100toRESX(offset), 10);
|
||||
|
||||
//========== TRIMS ================
|
||||
if (ed->carryTrim < TRIM_ON)
|
||||
|
@ -895,14 +895,14 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
|
|||
//========== WEIGHT ===============
|
||||
int32_t dv = (int32_t)v * weight;
|
||||
#if defined(CPUARM)
|
||||
dv = div_and_round<10>(dv);
|
||||
dv = div_and_round(dv, 10);
|
||||
#endif
|
||||
|
||||
//========== OFFSET / AFTER ===============
|
||||
if (apply_offset_and_curve) {
|
||||
#if defined(CPUARM)
|
||||
int32_t offset = GET_GVAR_PREC1(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, mixerCurrentFlightMode);
|
||||
if (offset) dv += div_and_round<10>(calc100toRESX_16Bits(offset)) << 8;
|
||||
if (offset) dv += div_and_round(calc100toRESX_16Bits(offset), 10) << 8;
|
||||
#else
|
||||
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, mixerCurrentFlightMode);
|
||||
if (offset) dv += int32_t(calc100toRESX_16Bits(offset)) << 8;
|
||||
|
|
|
@ -1088,7 +1088,7 @@ extern const char vers_stamp[];
|
|||
|
||||
extern uint8_t g_vbat100mV;
|
||||
#if defined(PCBTARANIS)
|
||||
#define GET_TXBATT_BARS() (limit<int8_t>(0, 10 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 10))
|
||||
#define GET_TXBATT_BARS() (limit<int8_t>(0, div_and_round(10 * (g_vbat100mV - g_eeGeneral.vBatMin - 90), 30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 10))
|
||||
#else
|
||||
#define GET_TXBATT_BARS() (limit<int8_t>(2, 20 * (g_vbat100mV - g_eeGeneral.vBatMin - 90) / (30 + g_eeGeneral.vBatMax - g_eeGeneral.vBatMin), 20))
|
||||
#endif
|
||||
|
@ -1628,16 +1628,18 @@ lcdint_t applyChannelRatio(source_t channel, lcdint_t val);
|
|||
#define ANA_CHANNEL_UNIT(channel) g_model.frsky.channels[channel].type
|
||||
#endif
|
||||
|
||||
template<int I>
|
||||
getvalue_t div_and_round(getvalue_t value)
|
||||
inline int div_and_round(int num, int den)
|
||||
{
|
||||
if (value >= 0 ) {
|
||||
value += I / 2;
|
||||
if (den == 0) {
|
||||
return 0;
|
||||
}
|
||||
else if (num >= 0) {
|
||||
num += den / 2;
|
||||
}
|
||||
else {
|
||||
value -= I / 2;
|
||||
num -= den / 2;
|
||||
}
|
||||
return value / I;
|
||||
return num / den;
|
||||
}
|
||||
|
||||
#if defined(FRSKY)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# on 2.1 release: make PCB=9X EXT=FRSKY VOICE=YES AUDIO=YES AUTOSOURCE=YES AUTOSWITCH=YES HELI=YES TEMPLATES=YES GAUGES=NO
|
||||
# => 64818 (program) + 3236 (data)
|
||||
# on 2.2 release: cmake -DPCB=9X -DEXT=FRSKY -DAUDIO=YES -DVOICE=YES -DHELI=YES -DTEMPLATES=YES ~/git/opentx
|
||||
# => 64832 (program) + 3236 (data)
|
||||
# => 64828 (program) + 3236 (data)
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue