diff --git a/src/board_ersky9x.h b/src/board_ersky9x.h index e5de85e56..6981ac24f 100644 --- a/src/board_ersky9x.h +++ b/src/board_ersky9x.h @@ -40,6 +40,7 @@ extern "C" { extern void init_SDcard(); +extern void sdInit(); extern void sdPoll10mS(); } diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index d1dbda47e..c90fef6e5 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -466,7 +466,7 @@ bool ee32LoadGeneral() void eeLoadModel(uint8_t id) { - uint16_t size ; + uint16_t size; if (idweight, attr|INFLIGHT((int8_t&)ed->weight)); if (attr) CHECK_INFLIGHT_INCDEC_MODELVAR(event, (int8_t&)ed->weight, 0, 100, 0, STR_DRWEIGHT); break; -#if defined(PCBARM) - case EXPO_FIELD_EXPO: - lcd_outdezAtt(EXPO_ONE_2ND_COLUMN+3*FW, y, ed->expo, attr|INFLIGHT(ed->expo)); - if (attr) CHECK_INFLIGHT_INCDEC_MODELVAR(event, ed->expo, -100, 100, 0, STR_DREXPO); - break; -#else case EXPO_FIELD_EXPO: if (ed->curveMode==MODE_EXPO || ed->curveParam==0) { ed->curveMode = MODE_EXPO; @@ -1569,20 +1544,7 @@ void menuProcExpoOne(uint8_t event) lcd_putsAtt(EXPO_ONE_2ND_COLUMN, y, STR_NA, attr); } break; -#endif #if defined(CURVES) -#if defined(PCBARM) - case EXPO_FIELD_CURVE: - putsCurve(EXPO_ONE_2ND_COLUMN, y, ed->curve, attr); - if (attr) { - CHECK_INCDEC_MODELVAR(event, ed->curve, 0, CURVE_BASE+MAX_CURVES-1); - if (ed->curve>=CURVE_BASE && event==EVT_KEY_FIRST(KEY_MENU)) { - s_curveChan = ed->curve - CURVE_BASE; - pushMenu(menuProcCurveOne); - } - } - break; -#else case EXPO_FIELD_CURVE: if (ed->curveMode!=MODE_EXPO || ed->curveParam==0) { putsCurve(EXPO_ONE_2ND_COLUMN, y, ed->curveParam, attr); @@ -1600,7 +1562,6 @@ void menuProcExpoOne(uint8_t event) } break; #endif -#endif #if defined(FLIGHT_PHASES) case EXPO_FIELD_FLIGHT_PHASE: ed->phases = editPhases(EXPO_ONE_2ND_COLUMN-2*FW, y, event, ed->phases, attr); @@ -2000,17 +1961,10 @@ void menuProcExpoMix(uint8_t expo, uint8_t _event_) CHECK_INCDEC_MODELVAR(_event, ed->weight, 0, 100); } -#if defined(PCBARM) - if (ed->curve) - putsCurve(EXPO_LINE_EXPO_POS-3*FW, y, ed->curve); - else if (ed->expo) - lcd_outdezAtt(EXPO_LINE_EXPO_POS, y, ed->expo, 0); -#else if (ed->curveMode == MODE_CURVE) putsCurve(EXPO_LINE_EXPO_POS-3*FW, y, ed->curveParam); else lcd_outdezAtt(EXPO_LINE_EXPO_POS, y, ed->curveParam, 0); -#endif #if defined(PCBARM) if (ed->name[0]) { diff --git a/src/myeeprom.h b/src/myeeprom.h index 7fddc85e2..cd8df55c2 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -172,12 +172,12 @@ PACK(typedef struct t_EEGeneral { PACK(typedef struct t_ExpoData { uint8_t mode; // 0=end, 1=pos, 2=neg, 3=both uint8_t chn; - int8_t curve; // 0=no curve, 1-6=std curves, 7-22=CV1-CV16 int8_t swtch; uint16_t phases; int8_t weight; + uint8_t curveMode; char name[6]; - int8_t expo; + int8_t curveParam; }) ExpoData; #else PACK(typedef struct t_ExpoData { diff --git a/src/open9x.cpp b/src/open9x.cpp index 85a02466f..ccefa2a16 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -32,10 +32,6 @@ */ #if defined(PCBARM) && !defined(SIMU) -extern "C" { -#include -} - #define MIXER_STACK_SIZE 500 #define MENUS_STACK_SIZE 1000 #define AUDIO_STACK_SIZE 500 @@ -54,6 +50,7 @@ OS_FlagID audioFlag; OS_MutexID sdMutex; OS_MutexID audioMutex; +OS_MutexID mixerMutex; /*OS_TID btTask; OS_STK btStack[BT_STACK_SIZE]; @@ -433,19 +430,12 @@ void applyExpos(int16_t *anas) int16_t v = anas2[ed.chn]; if((v<0 && ed.mode&1) || (v>=0 && ed.mode&2)) { cur_chn = ed.chn; -#if defined(PCBARM) - if (ed.curve) - v = applyCurve(v, ed.curve); - if (ed.expo) - v = expo(v, ed.expo); -#else if (ed.curveParam) { if (ed.curveMode == MODE_CURVE) v = applyCurve(v, ed.curveParam); else v = expo(v, ed.curveParam); } -#endif v = ((int32_t)v * ed.weight) / 100; anas[cur_chn] = v; } @@ -998,8 +988,6 @@ void doSplash() lcdSetRefVolt(contrast); #endif - clearKeyEvents(); - #ifndef SIMU for(uint8_t i=0; i<32; i++) getADC_filt(); // init ADC array @@ -3116,8 +3104,6 @@ inline void open9xInit(OPEN9X_INIT_ARGS) } #endif - clearKeyEvents(); //make sure no keys are down before proceeding - lcdSetRefVolt(g_eeGeneral.contrast); backlightOn(); @@ -3149,7 +3135,9 @@ void mixerTask(void * pdata) if (s_current_protocol < PROTO_NONE) { if (tick10ms) checkTrims(); + CoEnterMutexSection(mixerMutex); doMixerCalculations(tmr10ms, tick10ms); + CoLeaveMutexSection(mixerMutex); } heartbeat |= HEART_TIMER10ms; @@ -3717,13 +3705,15 @@ int main(void) init_rotary_sw(); #endif -#ifndef PCBARM +#if !defined(PCBARM) open9xInit(mcusr); #endif #if defined(PCBARM) CoInitOS(); + sdInit(); + // btFlag = CoCreateFlag(TRUE, FALSE); // Auto-reset, start FALSE // btTimer = CoCreateTmr(TMR_TYPE_PERIODIC, 1000/(1000/CFG_SYSTICK_FREQ), 1000/(1000/CFG_SYSTICK_FREQ), btTimerHandle); @@ -3737,6 +3727,7 @@ int main(void) sdMutex = CoCreateMutex(); audioMutex = CoCreateMutex(); + mixerMutex = CoCreateMutex(); CoStartOS(); #else diff --git a/src/open9x.h b/src/open9x.h index 0d12e1b8b..38ff7ca83 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -729,6 +729,42 @@ template FORCEINLINE t limit(t mi, t x, t ma) { return min(max(mi,x),ma uint16_t isqrt32(uint32_t n); #endif +#if defined(PCBARM) +#if !defined(SIMU) +extern "C" { +#include +} +#endif + +extern OS_MutexID mixerMutex; +inline void pauseMixerCalculations() +{ + CoEnterMutexSection(mixerMutex); +} + +inline void resumeMixerCalculations() +{ + CoLeaveMutexSection(mixerMutex); +} +#elif defined(PCBV4) +inline void pauseMixerCalculations() +{ + cli(); + TIMSK5 &= ~(1<