Bug fixes + volume on stock board with VOICE mod

Flash savings
FrSky alarms sending now ok on ARM board
This commit is contained in:
bsongis
2012-08-18 16:57:18 +00:00
parent cae265b05c
commit f824c6c83c
9 changed files with 138 additions and 70 deletions
-1
View File
@@ -686,7 +686,6 @@ void eeWaitFinished()
#ifdef SIMU
sleep(5/*ms*/);
#endif
// TODO perMain()?
}
}
+89 -37
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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"