Fixes #1689 - Vario silent when within zero range

This commit is contained in:
bsongis
2015-06-09 21:15:10 +02:00
parent 1ae43970b4
commit 85329a67e4
15 changed files with 91 additions and 28 deletions
+35 -17
View File
@@ -74,11 +74,12 @@ enum menuModelTelemetryItems {
ITEM_TELEMETRY_SENSOR31,
ITEM_TELEMETRY_SENSOR32,
ITEM_TELEMETRY_NEWSENSOR,
CASE_VARIO(ITEM_TELEMETRY_VARIO_LABEL)
#if defined(VARIO)
ITEM_TELEMETRY_VARIO_LABEL,
ITEM_TELEMETRY_VARIO_SOURCE,
ITEM_TELEMETRY_VARIO_RANGE,
ITEM_TELEMETRY_VARIO_CENTER,
#endif
CASE_VARIO(ITEM_TELEMETRY_VARIO_RANGE)
ITEM_TELEMETRY_TOP_BAR_LABEL,
ITEM_TELEMETRY_TOP_BAR_VOLTAGE,
ITEM_TELEMETRY_TOP_BAR_ALTITUDE,
@@ -120,7 +121,11 @@ enum menuModelTelemetryItems {
#define SENSOR_ROWS(x) (isTelemetryFieldAvailable(x) ? (uint8_t)0 : HIDDEN_ROW)
#define SENSORS_ROWS LABEL(Sensors), SENSOR_ROWS(0), SENSOR_ROWS(1), SENSOR_ROWS(2), SENSOR_ROWS(3), SENSOR_ROWS(4), SENSOR_ROWS(5), SENSOR_ROWS(6), SENSOR_ROWS(7), SENSOR_ROWS(8), SENSOR_ROWS(9), SENSOR_ROWS(10), SENSOR_ROWS(11), SENSOR_ROWS(12), SENSOR_ROWS(13), SENSOR_ROWS(14), SENSOR_ROWS(15), SENSOR_ROWS(16), SENSOR_ROWS(17), SENSOR_ROWS(18), SENSOR_ROWS(19), SENSOR_ROWS(20), SENSOR_ROWS(21), SENSOR_ROWS(22), SENSOR_ROWS(23), SENSOR_ROWS(24), SENSOR_ROWS(25), SENSOR_ROWS(26), SENSOR_ROWS(27), SENSOR_ROWS(28), SENSOR_ROWS(29), SENSOR_ROWS(30), SENSOR_ROWS(31), 0,
#define USRDATA_ROWS
#if defined(VARIO)
#define VARIO_ROWS LABEL(Vario), 0, 1, 2,
#else
#define VARIO_ROWS
#endif
#define RSSI_ROWS LABEL(RSSI), 0, 0,
#if defined(LUA)
#define SCREEN_TYPE_ROWS 1
@@ -483,7 +488,7 @@ void onTelemetryScriptFileSelectionMenu(const char *result)
void menuModelTelemetry(uint8_t event)
{
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS USRDATA_ROWS CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) LABEL(TopBar), 0, 0, TOPLCD_ROWS TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), CASE_CPUARM(TELEMETRY_SCREEN_ROWS(2)) CASE_CPUARM(TELEMETRY_SCREEN_ROWS(3)) });
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS VARIO_ROWS LABEL(TopBar), 0, 0, TOPLCD_ROWS TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), CASE_CPUARM(TELEMETRY_SCREEN_ROWS(2)) CASE_CPUARM(TELEMETRY_SCREEN_ROWS(3)) });
int sub = m_posVert;
@@ -519,7 +524,7 @@ void menuModelTelemetry(uint8_t event)
}
TelemetrySensor * sensor = & g_model.telemetrySensors[index];
if (sensor->type == TELEM_TYPE_CUSTOM) {
lcd_outdezAtt(TELEM_COL3+1*FW, y, sensor->instance, LEFT);
lcd_outdezAtt(TELEM_COL3, y, sensor->instance, LEFT);
}
if (attr) {
s_editMode = 0;
@@ -545,7 +550,7 @@ void menuModelTelemetry(uint8_t event)
case ITEM_TELEMETRY_SENSORS_LABEL:
lcd_putsLeft(y, STR_TELEMETRY_SENSORS);
lcd_putsAtt(TELEM_COL2, y, STR_VALUE, 0);
lcd_putsAtt(TELEM_COL3+1*FW, y, STR_ID, 0);
lcd_putsAtt(TELEM_COL3, y, STR_ID, 0);
break;
case ITEM_TELEMETRY_NEWSENSOR:
@@ -592,28 +597,41 @@ void menuModelTelemetry(uint8_t event)
break;
case ITEM_TELEMETRY_VARIO_RANGE:
lcd_putsLeft(y, STR_LIMIT);
lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz<=0 ? attr : 0)|LEFT);
lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((CURSOR_ON_LINE() || m_posHorz==1) ? attr : 0)|PREC1);
lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, ((CURSOR_ON_LINE() || m_posHorz==2) ? attr : 0)|PREC1);
lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, ((CURSOR_ON_LINE() || m_posHorz==3) ? attr : 0));
lcd_putsLeft(y, STR_RANGE);
lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz==0 ? attr : 0)|LEFT);
lcd_outdezAtt(TELEM_COL2+7*FW, y, 10+g_model.frsky.varioMax, (m_posHorz==1 ? attr : 0)|LEFT);
if (attr && s_editMode>0) {
switch (m_posHorz) {
case 0:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMin, -7, 7);
break;
case 1:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
break;
case 2:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -5+max<int8_t>(-10, g_model.frsky.varioCenterMin-5), +15);
break;
case 3:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMax, -7, 7);
break;
}
}
break;
case ITEM_TELEMETRY_VARIO_CENTER:
lcd_putsLeft(y, STR_CENTER);
lcd_outdezAtt(TELEM_COL2, y, -5+g_model.frsky.varioCenterMin, (m_posHorz==0 ? attr : 0)|PREC1|LEFT);
lcd_outdezAtt(TELEM_COL2+7*FW, y, 5+g_model.frsky.varioCenterMax, (m_posHorz==1 ? attr : 0)|PREC1|LEFT);
lcd_putsiAtt(TELEM_COL3, y, STR_VVARIOCENTER, g_model.frsky.varioCenterSilent, (m_posHorz==2 ? attr : 0));
if (attr && s_editMode>0) {
switch (m_posHorz) {
case 0:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
break;
case 1:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -5+max<int8_t>(-10, g_model.frsky.varioCenterMin-5), +15);
break;
case 2:
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.varioCenterSilent, 1);
break;
}
}
break;
#endif
case ITEM_TELEMETRY_TOP_BAR_LABEL:
+2 -1
View File
@@ -1483,7 +1483,8 @@ PACK(typedef struct {
uint8_t altitudeSource;
uint8_t screensType; // 2bits per screen (None/Gauges/Numbers/Script)
FrSkyScreenData screens[MAX_TELEMETRY_SCREENS];
uint8_t varioSource;
uint8_t varioSource:7;
uint8_t varioCenterSilent:1;
int8_t varioCenterMax;
int8_t varioCenterMin;
int8_t varioMin;
+2
View File
@@ -112,6 +112,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
ISTR(VLCD)
ISTR(VUNITSSYSTEM)
ISTR(VBEEPCOUNTDOWN)
ISTR(VVARIOCENTER)
#endif
#if defined(PXX) || defined(CPUARM)
ISTR(COUNTRYCODES)
@@ -211,6 +212,7 @@ const pm_char STR_CV[] PROGMEM = TR_CV;
const pm_char STR_GV[] PROGMEM = TR_GV;
const pm_char STR_ACHANNEL[] PROGMEM = TR_ACHANNEL;
const pm_char STR_RANGE[] PROGMEM = TR_RANGE;
const pm_char STR_CENTER[] PROGMEM = TR_CENTER;
const pm_char STR_BAR[] PROGMEM = TR_BAR;
const pm_char STR_ALARM[] PROGMEM = TR_ALARM;
const pm_char STR_USRDATA[] PROGMEM = TR_USRDATA;
+4 -1
View File
@@ -180,7 +180,8 @@ extern const pm_char STR_OPEN9X[];
#if defined(CPUARM)
#define OFS_VUNITSSYSTEM (OFS_VLCD + sizeof(TR_VLCD))
#define OFS_VBEEPCOUNTDOWN (OFS_VUNITSSYSTEM + sizeof(TR_VUNITSSYSTEM))
#define OFS_COUNTRYCODES (OFS_VBEEPCOUNTDOWN + sizeof(TR_VBEEPCOUNTDOWN))
#define OFS_VVARIOCENTER (OFS_VBEEPCOUNTDOWN + sizeof(TR_VBEEPCOUNTDOWN))
#define OFS_COUNTRYCODES (OFS_VVARIOCENTER + sizeof(TR_VVARIOCENTER))
#else
#define OFS_COUNTRYCODES (OFS_VLCD)
#endif
@@ -297,6 +298,7 @@ extern const pm_char STR_OPEN9X[];
#define STR_VLCD (STR_OPEN9X + OFS_VLCD)
#define STR_VUNITSSYSTEM (STR_OPEN9X + OFS_VUNITSSYSTEM)
#define STR_VBEEPCOUNTDOWN (STR_OPEN9X + OFS_VBEEPCOUNTDOWN)
#define STR_VVARIOCENTER (STR_OPEN9X + OFS_VVARIOCENTER)
#endif
#if defined(PXX) || defined(CPUARM)
@@ -405,6 +407,7 @@ extern const pm_char STR_CV[];
extern const pm_char STR_GV[];
extern const pm_char STR_ACHANNEL[];
extern const pm_char STR_RANGE[];
extern const pm_char STR_CENTER[];
extern const pm_char STR_BAR[];
extern const pm_char STR_ALARM[];
extern const pm_char STR_USRDATA[];
+4
View File
@@ -121,6 +121,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "Ne\0 ""Zvuk\0 ""Hlas\0 "
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Rastr-X\0""Volná-XY"
@@ -655,6 +658,7 @@
#define TR_GV "GP"
#define TR_ACHANNEL "A\004Kanál"
#define TR_RANGE INDENT"Rozsah"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Ukazatel"
#define TR_ALARM INDENT"Alarm"
#define TR_USRDATA TR("UživData", "Uživ. data")
+4
View File
@@ -126,6 +126,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "Kein\0 Pieps\0Stimme"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES " Nur Y "" X und Y" //"Standard""Custom\0"
@@ -659,6 +662,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL TR("A\004gemessen","A\004Kanal gemessen =>") //9XR-Pro
#define TR_RANGE TR(INDENT"Bereich", INDENT "Reichweite") // 9XR-Pro
#define TR_CENTER INDENT "Center"
#define TR_BAR "Streifen"
#define TR_ALARM INDENT"Alarm"
#define TR_USRDATA "Daten berechnen aus"
+4
View File
@@ -121,6 +121,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voice\0"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Standard""Custom\0"
@@ -654,6 +657,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\004channel"
#define TR_RANGE INDENT "Range"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Bar"
#define TR_ALARM INDENT "Alarm"
#define TR_USRDATA TR("UsrData","User Data")
+4
View File
@@ -115,6 +115,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voz\0"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Standard""Custom\0"
@@ -616,6 +619,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\004canal"
#define TR_RANGE INDENT"Alcance"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Bar"
#define TR_ALARM INDENT"Alarma"
#define TR_USRDATA "UsrData"
+4
View File
@@ -115,6 +115,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voice\0"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Standard""Custom\0"
@@ -616,6 +619,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\004channel"
#define TR_RANGE INDENT"Range"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Bar"
#define TR_ALARM INDENT"Alarm"
#define TR_USRDATA "UsrData"
+5 -1
View File
@@ -1,4 +1,4 @@
/*
/*
* Authors (alphabetical order)
* - Andre Bernet <bernet.andre@gmail.com>
* - Bertrand Songis <bsongis@gmail.com>
@@ -121,6 +121,9 @@
#define LEN_VBEEPCOUNTDOWN "\007"
#define TR_VBEEPCOUNTDOWN "Aucun\0 ""Bips\0 ""Voix\0 "
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Standard""Libre\0"
@@ -654,6 +657,7 @@
#define TR_GV "VG"
#define TR_ACHANNEL "A"
#define TR_RANGE INDENT "Plage"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Barre"
#define TR_ALARM INDENT "Alarme"
#define TR_USRDATA "Données"
+4
View File
@@ -115,6 +115,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "NienteSuoni\0Voce\0 "
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Fisso\0 ""Modific."
@@ -616,6 +619,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\002ingresso"
#define TR_RANGE tr(INDENT"Inter.",INDENT"Intervallo")
#define TR_CENTER INDENT "Center"
#define TR_BAR "Barra"
#define TR_ALARM tr(INDENT"Allar.",INDENT"Allarme")
#define TR_USRDATA "Dati"
+4
View File
@@ -125,6 +125,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "Cichy Pik \0Dźwięk"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010" /*8 decimal*/
#define TR_CURVE_TYPES "Standard""Własny\0 "
@@ -658,6 +661,7 @@
#define TR_GV "ZG"
#define TR_ACHANNEL "A\004Kanał"
#define TR_RANGE INDENT "Zakres"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Pas"
#define TR_ALARM INDENT "Alarm"
#define TR_USRDATA TR("Dane Użytk.", "Dane użytkownika")
+4
View File
@@ -115,6 +115,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "SilentBeeps\0Voice\0"
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Standard""Custom\0"
@@ -616,6 +619,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\004Canal"
#define TR_RANGE INDENT"Range"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Bar"
#define TR_ALARM INDENT"Alarme"
#define TR_USRDATA "UsrData"
+4
View File
@@ -115,6 +115,9 @@
#define LEN_VBEEPCOUNTDOWN "\006"
#define TR_VBEEPCOUNTDOWN "Tyst\0 Pip\0 Röst\0 "
#define LEN_VVARIOCENTER "\006"
#define TR_VVARIOCENTER "Tone\0 ""Silent"
#define LEN_CURVE_TYPES "\010"
#define TR_CURVE_TYPES "Normal\0 ""Special\0"
@@ -616,6 +619,7 @@
#define TR_GV "GV"
#define TR_ACHANNEL "A\004kanal "
#define TR_RANGE INDENT"MinMax"
#define TR_CENTER INDENT "Center"
#define TR_BAR "Data"
#define TR_ALARM INDENT"Alarm"
#define TR_USRDATA "Användardata"
+7 -8
View File
@@ -45,7 +45,6 @@ void varioWakeup()
int varioFreq, varioDuration, varioPause=0;
uint8_t varioFlags;
#if defined(CPUARM)
int verticalSpeed = 0;
if (g_model.frsky.varioSource) {
TelemetryItem & varioItem = telemetryItems[g_model.frsky.varioSource-1];
@@ -53,9 +52,6 @@ void varioWakeup()
TelemetrySensor & sensor = g_model.telemetrySensors[g_model.frsky.varioSource-1];
if (sensor.prec != 2) verticalSpeed *= sensor.prec == 0 ? 100 : 10;
}
#else
int verticalSpeed = frskyData.hub.varioSpeed;
#endif
int varioCenterMin = (int)g_model.frsky.varioCenterMin * 10 - 50;
int varioCenterMax = (int)g_model.frsky.varioCenterMax * 10 + 50;
@@ -67,7 +63,12 @@ void varioWakeup()
else if (verticalSpeed < varioMin)
verticalSpeed = varioMin;
if (verticalSpeed > varioCenterMin) {
if (verticalSpeed <= varioCenterMin) {
varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-((VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10))/2)) * (verticalSpeed-varioCenterMin)) / varioMin);
varioDuration = 80; // continuous beep: we will enter again here before the tone ends
varioFlags = PLAY_BACKGROUND|PLAY_NOW;
}
else if (verticalSpeed >= varioCenterMax || !g_model.frsky.varioCenterSilent) {
varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * (verticalSpeed-varioCenterMin)) / varioMax);
int varioPeriod = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * (varioMax-verticalSpeed) * (varioMax-verticalSpeed)) / ((varioMax-varioCenterMin) * (varioMax-varioCenterMin));
if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax)
@@ -78,9 +79,7 @@ void varioWakeup()
varioFlags = PLAY_BACKGROUND;
}
else {
varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-((VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10))/2)) * (verticalSpeed-varioCenterMin)) / varioMin);
varioDuration = 80; // continuous beep: we will enter again here before the tone ends
varioFlags = PLAY_BACKGROUND|PLAY_NOW;
return;
}
AUDIO_VARIO(varioFreq, varioDuration, varioPause, varioFlags);