Bug fixes + volume on stock board with VOICE mod
Flash savings FrSky alarms sending now ok on ARM board
This commit is contained in:
@@ -686,7 +686,6 @@ void eeWaitFinished()
|
||||
#ifdef SIMU
|
||||
sleep(5/*ms*/);
|
||||
#endif
|
||||
// TODO perMain()?
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+89
-37
@@ -66,22 +66,6 @@ FrskyData frskyData;
|
||||
uint8_t barsThresholds[THLD_MAX];
|
||||
#endif
|
||||
|
||||
void frskyPushValue(uint8_t *&ptr, uint8_t value)
|
||||
{
|
||||
// byte stuff the only byte than might need it
|
||||
if (value == START_STOP) {
|
||||
*ptr++ = 0x5e;
|
||||
*ptr++ = BYTESTUFF;
|
||||
}
|
||||
else if (value == BYTESTUFF) {
|
||||
*ptr++ = 0x5d;
|
||||
*ptr++ = BYTESTUFF;
|
||||
}
|
||||
else {
|
||||
*ptr++ = value;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DISPLAY_USER_DATA
|
||||
/*
|
||||
Copies all available bytes (up to max bufsize) from frskyUserData circular
|
||||
@@ -563,50 +547,118 @@ void frskyTransmitBuffer()
|
||||
#endif
|
||||
|
||||
uint8_t frskyAlarmsSendState = 0 ;
|
||||
|
||||
#if defined(PCBARM)
|
||||
void frskyPushValue(uint8_t *&ptr, uint8_t value)
|
||||
{
|
||||
// byte stuff the only byte than might need it
|
||||
if (value == START_STOP) {
|
||||
*ptr++ = BYTESTUFF;
|
||||
*ptr++ = 0x5e;
|
||||
}
|
||||
else if (value == BYTESTUFF) {
|
||||
*ptr++ = BYTESTUFF;
|
||||
*ptr++ = 0x5d;
|
||||
}
|
||||
else {
|
||||
*ptr++ = value;
|
||||
}
|
||||
}
|
||||
|
||||
inline void FRSKY10mspoll(void)
|
||||
{
|
||||
#if defined(PCBARM)
|
||||
if (txPdcPending())
|
||||
#else
|
||||
if (frskyTxBufferCount)
|
||||
#endif
|
||||
return; // we only have one buffer. If it's in use, then we can't send yet.
|
||||
|
||||
uint8_t *ptr = &frskyTxBuffer[0];
|
||||
|
||||
*ptr++ = START_STOP; // Start of packet
|
||||
|
||||
// Now send a packet
|
||||
frskyAlarmsSendState -= 1;
|
||||
uint8_t alarm = 1 - (frskyAlarmsSendState % 2);
|
||||
if (frskyAlarmsSendState < 4) {
|
||||
uint8_t channel = 1 - (frskyAlarmsSendState / 2);
|
||||
*ptr++ = (A22PKT + frskyAlarmsSendState); // fc - fb - fa - f9
|
||||
frskyPushValue(ptr, g_model.frsky.channels[channel].alarms_value[alarm]);
|
||||
*ptr++ = ALARM_GREATER(channel, alarm);
|
||||
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ALARM_LEVEL(channel, alarm) : alarm_off);
|
||||
}
|
||||
else {
|
||||
*ptr++ = (RSSI1PKT-alarm); // f7 - f6
|
||||
frskyPushValue(ptr, getRssiAlarmValue(alarm));
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ((2+alarm+g_model.frsky.rssiAlarms[alarm].level) % 4) : alarm_off);
|
||||
}
|
||||
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = START_STOP; // End of packet
|
||||
|
||||
frskyTransmitBuffer(ptr - &frskyTxBuffer[0]);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void frskyPushValue(uint8_t *&ptr, uint8_t value)
|
||||
{
|
||||
// byte stuff the only byte than might need it
|
||||
bool bytestuff = false;
|
||||
|
||||
if (value == START_STOP) {
|
||||
bytestuff = true;
|
||||
value = 0x5e;
|
||||
}
|
||||
else if (value == BYTESTUFF) {
|
||||
bytestuff = true;
|
||||
value = 0x5d;
|
||||
}
|
||||
|
||||
*ptr++ = value;
|
||||
if (bytestuff)
|
||||
*ptr = BYTESTUFF;
|
||||
}
|
||||
|
||||
void FRSKY_setTxPacket(uint8_t type, uint8_t value, uint8_t p1, uint8_t p2)
|
||||
{
|
||||
uint8_t *ptr = &frskyTxBuffer[0];
|
||||
|
||||
*ptr++ = START_STOP; // End of packet
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = 0x00;
|
||||
*ptr++ = (g_eeGeneral.beeperMode == e_mode_quiet ? alarm_off : p2);
|
||||
*ptr++ = p1;
|
||||
frskyPushValue(ptr, value);
|
||||
*ptr++ = type;
|
||||
*ptr++ = START_STOP; // Start of packet
|
||||
|
||||
frskyTxBufferCount = ptr - &frskyTxBuffer[0];
|
||||
frskyTransmitBuffer();
|
||||
}
|
||||
|
||||
inline void FRSKY10mspoll(void)
|
||||
{
|
||||
if (frskyTxBufferCount)
|
||||
return; // we only have one buffer. If it's in use, then we can't send yet.
|
||||
|
||||
// Now send a packet
|
||||
frskyAlarmsSendState -= 1;
|
||||
uint8_t alarm = 1 - (frskyAlarmsSendState % 2);
|
||||
if (frskyAlarmsSendState < 4) {
|
||||
uint8_t channel = 1 - (frskyAlarmsSendState / 2);
|
||||
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ALARM_LEVEL(channel, alarm) : alarm_off);
|
||||
*ptr++ = ALARM_GREATER(channel, alarm);
|
||||
frskyPushValue(ptr, g_model.frsky.channels[channel].alarms_value[alarm]);
|
||||
*ptr++ = (A22PKT + frskyAlarmsSendState); // fc - fb - fa - f9
|
||||
FRSKY_setTxPacket(A22PKT + frskyAlarmsSendState, g_model.frsky.channels[channel].alarms_value[alarm], ALARM_GREATER(channel, alarm), ALARM_LEVEL(channel, alarm));
|
||||
}
|
||||
else {
|
||||
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ((2+alarm+g_model.frsky.rssiAlarms[alarm].level) % 4) : alarm_off);
|
||||
*ptr++ = 0x00 ;
|
||||
frskyPushValue(ptr, getRssiAlarmValue(alarm));
|
||||
*ptr++ = (RSSI1PKT-alarm); // f7 - f6
|
||||
FRSKY_setTxPacket(RSSI1PKT-alarm, getRssiAlarmValue(alarm), 0, (2+alarm+g_model.frsky.rssiAlarms[alarm].level) % 4);
|
||||
}
|
||||
|
||||
*ptr++ = START_STOP; // Start of packet
|
||||
|
||||
#if defined(PCBARM)
|
||||
frskyTransmitBuffer(ptr - &frskyTxBuffer[0]);
|
||||
#else
|
||||
frskyTxBufferCount = ptr - &frskyTxBuffer[0];
|
||||
frskyTransmitBuffer();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void check_frsky()
|
||||
{
|
||||
|
||||
+15
-2
@@ -118,7 +118,7 @@ void displaySlider(uint8_t x, uint8_t y, uint8_t value, uint8_t attr)
|
||||
|
||||
enum menuProcSetupItems {
|
||||
ITEM_SETUP_BEEPER_MODE,
|
||||
#if defined(PCBARM)
|
||||
#if defined(VOICE)
|
||||
ITEM_SETUP_SPEAKER_VOLUME,
|
||||
#endif
|
||||
ITEM_SETUP_BEEPER_LENGTH,
|
||||
@@ -212,14 +212,27 @@ void menuProcSetup(uint8_t event)
|
||||
#endif
|
||||
break;
|
||||
|
||||
#if defined(PCBARM)
|
||||
#if defined(VOICE)
|
||||
case ITEM_SETUP_SPEAKER_VOLUME:
|
||||
{
|
||||
lcd_putsLeft(y, STR_SPEAKER_VOLUME);
|
||||
#if defined(PCBARM)
|
||||
lcd_outdezAtt(GENERAL_PARAM_OFS, y, g_eeGeneral.speakerVolume, attr|LEFT);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.speakerVolume, 0, NUM_VOL_LEVELS-1);
|
||||
}
|
||||
#else
|
||||
uint8_t b ;
|
||||
b = g_eeGeneral.speakerVolume+7;
|
||||
lcd_outdezAtt(GENERAL_PARAM_OFS, y, b, attr|LEFT);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_GENVAR(event, b, 0, 7);
|
||||
if (g_eeGeneral.speakerVolume != (int8_t)b-7) {
|
||||
g_eeGeneral.speakerVolume = (int8_t)b-7;
|
||||
pushPrompt(b | 0xF0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
*/
|
||||
|
||||
#define PROMPT_SYSTEM_BASE 230
|
||||
#define PROMPT_CUSTOM_BASE 256
|
||||
#define PROMPT_CUSTOM_BASE 260
|
||||
|
||||
#define pushCustomPrompt(p) pushPrompt(PROMPT_CUSTOM_BASE+v)
|
||||
extern void pushPrompt(uint16_t prompt);
|
||||
|
||||
+23
-20
@@ -1431,13 +1431,14 @@ bool swapExpoMix(uint8_t expo, uint8_t &idx, uint8_t up)
|
||||
}
|
||||
|
||||
y = (MixData *)mixaddress(tgt_idx);
|
||||
if(!((MixData *)y)->srcRaw || ((MixData *)x)->destCh != ((MixData *)y)->destCh) {
|
||||
uint8_t destCh = ((MixData *)x)->destCh;
|
||||
if(!((MixData *)y)->srcRaw || destCh != ((MixData *)y)->destCh) {
|
||||
if (up) {
|
||||
if (((MixData *)x)->destCh>0) ((MixData *)x)->destCh--;
|
||||
if (destCh>0) ((MixData *)x)->destCh--;
|
||||
else return false;
|
||||
}
|
||||
else {
|
||||
if (((MixData *)x)->destCh<NUM_CHNOUT-1) ((MixData *)x)->destCh++;
|
||||
if (destCh<NUM_CHNOUT-1) ((MixData *)x)->destCh++;
|
||||
else return false;
|
||||
}
|
||||
return true;
|
||||
@@ -1590,6 +1591,15 @@ enum MixFields {
|
||||
#else
|
||||
#define MIXES_2ND_COLUMN (9*FW)
|
||||
#endif
|
||||
|
||||
uint8_t editMixDelay(const uint8_t y, const uint8_t event, const uint8_t attr, const pm_char *str, uint8_t delay)
|
||||
{
|
||||
lcd_putsLeft(y, str);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN, y, 5*delay, attr|PREC1|LEFT);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, MAX_DELAY);
|
||||
return delay;
|
||||
}
|
||||
|
||||
void menuProcMixOne(uint8_t event)
|
||||
{
|
||||
TITLEP(s_currCh ? STR_INSERTMIX : STR_EDITMIX);
|
||||
@@ -1651,9 +1661,10 @@ void menuProcMixOne(uint8_t event)
|
||||
lcd_putsLeft(y, STR_CURVE);
|
||||
|
||||
if (attr) {
|
||||
int8_t curveParam = md2->curveParam;
|
||||
if (md2->curveMode==MODE_CURVE) {
|
||||
if (event==EVT_KEY_FIRST(KEY_MENU) && (md2->curveParam<0 || md2->curveParam>=CURVE_BASE)){
|
||||
s_curveChan = (md2->curveParam<0 ? -md2->curveParam-1 : md2->curveParam-CURVE_BASE);
|
||||
if (event==EVT_KEY_FIRST(KEY_MENU) && (curveParam<0 || curveParam>=CURVE_BASE)){
|
||||
s_curveChan = (curveParam<0 ? -curveParam-1 : curveParam-CURVE_BASE);
|
||||
pushMenu(menuProcCurveOne);
|
||||
}
|
||||
CHECK_INCDEC_MODELVAR(event, md2->curveParam, -MAX_CURVES, CURVE_BASE+MAX_CURVES-1);
|
||||
@@ -1708,11 +1719,11 @@ void menuProcMixOne(uint8_t event)
|
||||
#endif
|
||||
case MIX_FIELD_WARNING:
|
||||
lcd_putsLeft(y, STR_MIXWARNING);
|
||||
if(md2->mixWarn)
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN,y,md2->mixWarn,attr|LEFT);
|
||||
if (md2->mixWarn)
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN, y, md2->mixWarn, attr|LEFT);
|
||||
else
|
||||
lcd_putsAtt(MIXES_2ND_COLUMN, y, STR_OFF, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0,3);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0, 3);
|
||||
break;
|
||||
case MIX_FIELD_MLTPX:
|
||||
lcd_putsLeft(y, STR_MULTPX);
|
||||
@@ -1720,24 +1731,16 @@ void menuProcMixOne(uint8_t event)
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mltpx, 0, 2);
|
||||
break;
|
||||
case MIX_FIELD_DELAY_UP:
|
||||
lcd_putsLeft(y, STR_DELAYUP);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->delayUp,attr|PREC1|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayUp, 0, MAX_DELAY);
|
||||
md2->delayUp = editMixDelay(y, event, attr, STR_DELAYUP, md2->delayUp);
|
||||
break;
|
||||
case MIX_FIELD_DELAY_DOWN:
|
||||
lcd_putsLeft(y, STR_DELAYDOWN);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->delayDown,attr|PREC1|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayDown, 0, MAX_DELAY);
|
||||
md2->delayDown = editMixDelay(y, event, attr, STR_DELAYDOWN, md2->delayDown);
|
||||
break;
|
||||
case MIX_FIELD_SLOW_UP:
|
||||
lcd_putsLeft(y, STR_SLOWUP);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->speedUp,attr|PREC1|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedUp, 0, MAX_SLOW);
|
||||
md2->speedUp = editMixDelay(y, event, attr, STR_SLOWUP, md2->speedUp);
|
||||
break;
|
||||
case MIX_FIELD_SLOW_DOWN:
|
||||
lcd_putsLeft(y, STR_SLOWDOWN);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN,y,5*md2->speedDown,attr|PREC1|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedDown, 0, MAX_SLOW);
|
||||
md2->speedDown = editMixDelay(y, event, attr, STR_SLOWDOWN, md2->speedDown);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -96,8 +96,11 @@ enum BeeperMode {
|
||||
uint8_t speakerVolume; \
|
||||
uint8_t backlightBright; \
|
||||
int8_t currentCalib;
|
||||
#define EXTRA_NON_ARM_FIELDS
|
||||
#else
|
||||
#define EXTRA_ARM_FIELDS
|
||||
#define EXTRA_NON_ARM_FIELDS \
|
||||
int8_t speakerVolume;
|
||||
#endif
|
||||
|
||||
enum AdcInput {
|
||||
@@ -159,7 +162,8 @@ PACK(typedef struct t_EEGeneral {
|
||||
EXTRA_ARM_FIELDS
|
||||
|
||||
uint8_t variants;
|
||||
|
||||
|
||||
EXTRA_NON_ARM_FIELDS;
|
||||
}) EEGeneral;
|
||||
|
||||
// eeprom modelspec
|
||||
|
||||
+1
-4
@@ -2965,10 +2965,7 @@ void instantTrim()
|
||||
if (i!=THR_STICK) {
|
||||
// don't instant trim the throttle stick
|
||||
uint8_t trim_phase = getTrimFlightPhase(s_perout_flight_phase, i);
|
||||
int16_t trim = (anas[i] + trims[i]) / 2;
|
||||
// TODO limit
|
||||
if (trim < TRIM_EXTENDED_MIN) trim = TRIM_EXTENDED_MIN;
|
||||
if (trim > TRIM_EXTENDED_MAX) trim = TRIM_EXTENDED_MAX;
|
||||
int16_t trim = limit((int16_t)TRIM_EXTENDED_MIN, (int16_t)((anas[i] + trims[i]) / 2), (int16_t)TRIM_EXTENDED_MAX);
|
||||
setTrimValue(trim_phase, i, trim);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@
|
||||
#define V_WAIT_BUSY_DELAY 5
|
||||
|
||||
#define PROMPT_SYSTEM_BASE 230
|
||||
#define PROMPT_CUSTOM_BASE 256
|
||||
#define PROMPT_CUSTOM_BASE 260
|
||||
|
||||
struct t_voice
|
||||
{
|
||||
|
||||
+3
-3
@@ -167,7 +167,7 @@ if __name__ == "__main__":
|
||||
(u"flight mode eight", "fltmd8"),
|
||||
(u"flight mode nine", "fltmd9"),
|
||||
]):
|
||||
sounds.extend(generate(s, f, 256+i))
|
||||
sounds.extend(generate(s, f, 260+i))
|
||||
|
||||
|
||||
elif "fr" in sys.argv:
|
||||
@@ -204,7 +204,7 @@ if __name__ == "__main__":
|
||||
(u"fin écolage", "trnoff"),
|
||||
(u"moteur coupé", "engoff"),
|
||||
]):
|
||||
sounds.extend(generate(s, f, 256+i))
|
||||
sounds.extend(generate(s, f, 260+i))
|
||||
|
||||
|
||||
elif "it" in sys.argv:
|
||||
@@ -263,7 +263,7 @@ if __name__ == "__main__":
|
||||
(u"fase di volo 8", "fltmd8"),
|
||||
(u"fase di volo 9", "fltmd9"),
|
||||
]):
|
||||
sounds.extend(generate(s, f, 256+i))
|
||||
sounds.extend(generate(s, f, 260+i))
|
||||
|
||||
if 'ad4' in sys.argv:
|
||||
voice += "-stock"
|
||||
|
||||
Reference in New Issue
Block a user