From 0a292381e1623e97cc9111234d9f30ce4de826ad Mon Sep 17 00:00:00 2001 From: bsongis Date: Sun, 25 Mar 2012 10:37:02 +0000 Subject: [PATCH] Bug in MixWarning when Switches are sources. Negative differential now allowed --- src/model_menus.cpp | 4 ++-- src/myeeprom.h | 2 +- src/open9x.cpp | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/model_menus.cpp b/src/model_menus.cpp index fe951bf69..c4abfeb3b 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -1220,8 +1220,8 @@ void menuProcMixOne(uint8_t event) case 2: // TODO INFLIGHT lcd_puts(2*FW, y, STR_DIFFERENTIAL); - lcd_outdezAtt(FW*10, y, md2->differential, attr|LEFT); - if (attr) CHECK_INCDEC_MODELVAR(event, md2->differential, 0, 100); + lcd_outdezAtt(FW*10, y, md2->differential*2, attr|LEFT); + if (attr) CHECK_INCDEC_MODELVAR(event, md2->differential, -50, 50); break; case 3: lcd_puts(2*FW, y, STR_OFFSET); diff --git a/src/myeeprom.h b/src/myeeprom.h index e51eb1884..03fa74284 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -204,7 +204,7 @@ PACK(typedef struct t_MixData { uint8_t speedUp:4; // Servogeschwindigkeit aus Tabelle (10ms Cycle) uint8_t speedDown:4; // 0 nichts uint16_t srcRaw:7; // - uint16_t differential:7; + int16_t differential:7; uint16_t carryTrim:2; int8_t sOffset; }) MixData; diff --git a/src/open9x.cpp b/src/open9x.cpp index c13944710..8d8a353de 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -1386,7 +1386,7 @@ void perOut(uint8_t phase) v = chans[k-MIXSRC_CH1+1] / 100; else if (k>=MIXSRC_THR-1 && k<=MIXSRC_SWC-1) { v = getSwitch(k-MIXSRC_THR+1+1, 0) ? +1024 : -1024; - if (v<0 && !md->swtch && (md->delayDown || md->delayUp)) + if (v<0 && !md->swtch) sw = false; } else @@ -1487,9 +1487,11 @@ void perOut(uint8_t phase) //========== MULTIPLEX =============== int32_t dv = (int32_t)v*md->weight; - uint8_t differential = md->differential; - if (differential && dv<0) - dv = (dv * (100-differential)) / 100; + int8_t differential = md->differential; + if (differential>0 && dv<0) + dv = (dv * (50-differential)) / 50; + else if (differential<0 && dv>0) + dv = (dv * (50+differential)) / 50; int32_t *ptr = &chans[md->destCh]; // Save calculating address several times switch(md->mltpx){