diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 8a75f1c4f..6e8709dea 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -776,10 +776,7 @@ void menuModelSetup(event_t event) if (menuHorizontalPosition == 0) { uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); if (checkIncDec_Ret) { - // TODO this code should be common, in module.h (X10_new_UI branch) - memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); - g_model.moduleData[INTERNAL_MODULE].type = moduleType; - g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + setModuleType(INTERNAL_MODULE, moduleType); } } else if (isModuleXJT(INTERNAL_MODULE)) { @@ -849,22 +846,9 @@ void menuModelSetup(event_t event) switch (menuHorizontalPosition) { case 0: { - uint8_t moduleType = checkIncDec(event, - g_model.moduleData[EXTERNAL_MODULE].type, - MODULE_TYPE_NONE, - IS_TRAINER_EXTERNAL_MODULE() ? MODULE_TYPE_NONE : - MODULE_TYPE_COUNT - 1, - EE_MODEL, - isExternalModuleAvailable); + uint8_t moduleType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isExternalModuleAvailable); if (checkIncDec_Ret) { - // TODO this code should be common, in module.h (X10_new_UI branch) - memclear(&g_model.moduleData[EXTERNAL_MODULE], sizeof(ModuleData)); - g_model.moduleData[EXTERNAL_MODULE].type = moduleType; - g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE); - if (isModuleSBUS(EXTERNAL_MODULE)) - g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31; - else if (isModulePPM(EXTERNAL_MODULE)) - SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE); + setModuleType(EXTERNAL_MODULE, moduleType); } } break; @@ -1090,7 +1074,7 @@ void menuModelSetup(event_t event) case 1: CHECK_INCDEC_MODELVAR_CHECK(event, moduleData.channelsCount, -4, min(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart), moduleData.type == MODULE_TYPE_ISRM_PXX2 ? isPxx2IsrmChannelsCountAllowed : nullptr); if (checkIncDec_Ret && moduleData.type == MODULE_TYPE_PPM) { - SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); + setDefaultPpmFrameLength(moduleIdx); } break; } @@ -1562,11 +1546,11 @@ void menuModelSetup(event_t event) switch (menuHorizontalPosition) { case 0: CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[1].channelsStart, 32-8-g_model.moduleData[1].channelsCount); - SET_DEFAULT_PPM_FRAME_LENGTH(1); + setDefaultPpmFrameLength(1); break; case 1: CHECK_INCDEC_MODELVAR(event, g_model.moduleData[1].channelsCount, -4, min(8, 32-8-g_model.moduleData[1].channelsStart)); - SET_DEFAULT_PPM_FRAME_LENGTH(1); + setDefaultPpmFrameLength(1); break; } } diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 4c1d599c2..0372092fc 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -763,10 +763,7 @@ void menuModelSetup(event_t event) if (menuHorizontalPosition == 0) { uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); if (checkIncDec_Ret) { - // TODO this code should be common, in module.h (X10_new_UI branch) - memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); - g_model.moduleData[INTERNAL_MODULE].type = moduleType; - g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + setModuleType(INTERNAL_MODULE, moduleType); } } else if (isModuleXJT(INTERNAL_MODULE)) { @@ -839,16 +836,9 @@ void menuModelSetup(event_t event) switch (menuHorizontalPosition) { case 0: { - uint8_t moduleType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_COUNT - 1, EE_MODEL, - isExternalModuleAvailable); + uint8_t moduleType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isExternalModuleAvailable); if (checkIncDec_Ret) { - memclear(&g_model.moduleData[EXTERNAL_MODULE], sizeof(g_model.moduleData[EXTERNAL_MODULE])); - g_model.moduleData[EXTERNAL_MODULE].type = moduleType; - g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE); - if (isModuleSBUS(EXTERNAL_MODULE)) - g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31; - else if (isModulePPM(EXTERNAL_MODULE)) - SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE); + setModuleType(EXTERNAL_MODULE, moduleType); } break; } @@ -1043,7 +1033,7 @@ void menuModelSetup(event_t event) case 1: CHECK_INCDEC_MODELVAR_CHECK(event, moduleData.channelsCount, -4, min(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart), moduleData.type == MODULE_TYPE_ISRM_PXX2 ? isPxx2IsrmChannelsCountAllowed : nullptr); if (checkIncDec_Ret && moduleData.type == MODULE_TYPE_PPM) { - SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); + setDefaultPpmFrameLength(moduleIdx); } break; } diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index e6422bda1..afbeb3138 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -950,10 +950,7 @@ bool menuModelSetup(event_t event) if (menuHorizontalPosition == 0) { uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); if (checkIncDec_Ret) { - // TODO this code should be common, in module.h (X10_new_UI branch) - memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); - g_model.moduleData[INTERNAL_MODULE].type = moduleType; - g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + setModuleType(INTERNAL_MODULE, moduleType); } } else if (isModuleXJT(INTERNAL_MODULE)) { @@ -1021,16 +1018,9 @@ bool menuModelSetup(event_t event) switch (menuHorizontalPosition) { case 0: { - uint8_t moduleType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_COUNT - 1, EE_MODEL, - isExternalModuleAvailable); + uint8_t moduleType = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isExternalModuleAvailable); if (checkIncDec_Ret) { - memclear(&g_model.moduleData[EXTERNAL_MODULE], sizeof(g_model.moduleData[EXTERNAL_MODULE])); - g_model.moduleData[EXTERNAL_MODULE].type = moduleType; - g_model.moduleData[EXTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE); - if (isModuleSBUS(EXTERNAL_MODULE)) - g_model.moduleData[EXTERNAL_MODULE].sbus.refreshRate = -31; - else if (isModulePPM(EXTERNAL_MODULE)) - SET_DEFAULT_PPM_FRAME_LENGTH(EXTERNAL_MODULE); + setModuleType(EXTERNAL_MODULE, moduleType); } break; } @@ -1133,7 +1123,7 @@ bool menuModelSetup(event_t event) case 1: CHECK_INCDEC_MODELVAR_CHECK(event, moduleData.channelsCount, -4, min(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart), moduleData.type == MODULE_TYPE_ISRM_PXX2 ? isPxx2IsrmChannelsCountAllowed : nullptr); if (checkIncDec_Ret && moduleData.type == MODULE_TYPE_PPM) { - SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); + setDefaultPpmFrameLength(moduleIdx); } break; } diff --git a/radio/src/helpers.h b/radio/src/helpers.h new file mode 100644 index 000000000..baef4cdce --- /dev/null +++ b/radio/src/helpers.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _HELPERS_H_ +#define _HELPERS_H_ + +template inline t min(t a, t b) { return a inline t max(t a, t b) { return a>b?a:b; } +template inline t sgn(t a) { return a>0 ? 1 : (a < 0 ? -1 : 0); } +template inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); } +template inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; } + +#endif // _HELPERS_H_ diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 977cc58c9..c97c7cf5e 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -32,7 +32,6 @@ #define GET_SBUS_POLARITY(idx) g_model.moduleData[idx].sbus.noninverted #define GET_MODULE_PPM_DELAY(idx) (g_model.moduleData[idx].ppm.delay * 50 + 300) #define GET_TRAINER_PPM_DELAY() (g_model.trainerData.delay * 50 + 300) -#define SET_DEFAULT_PPM_FRAME_LENGTH(idx) g_model.moduleData[idx].ppm.frameLength = 4 * max((int8_t)0, g_model.moduleData[idx].channelsCount) #if defined(PCBHORUS) #define IS_TRAINER_EXTERNAL_MODULE() false diff --git a/radio/src/opentx.h b/radio/src/opentx.h index cae95ae0e..675382177 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -624,12 +624,9 @@ void checkAll(); void getADC(); static inline void GET_ADC_IF_MIXER_NOT_RUNNING() { - do { - if (s_pulses_paused) { - getADC(); - } + if (s_pulses_paused) { + getADC(); } - while(0); } #include "sbus.h" @@ -640,12 +637,6 @@ void doLoopCommonActions(); #define BITMASK(bit) (1<<(bit)) -template inline t min(t a, t b) { return a inline t max(t a, t b) { return a>b?a:b; } -template inline t sgn(t a) { return a>0 ? 1 : (a < 0 ? -1 : 0); } -template inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); } -template inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; } - uint16_t isqrt32(uint32_t n); #if defined(BOOT) diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index 1d4c2fa9b..a16e24dcf 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -23,6 +23,7 @@ #include "bitfield.h" #include "definitions.h" +#include "helpers.h" #include "telemetry/telemetry.h" #if defined(MULTIMODULE) #include "telemetry/multi.h" @@ -121,19 +122,15 @@ inline bool isExtraModule(uint8_t) } #endif -#if defined(INTERNAL_MODULE_PPM) +inline bool isModuleTypePPM(uint8_t type) +{ + return type == MODULE_TYPE_PPM; +} + inline bool isModulePPM(uint8_t idx) { - return (idx == INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || - (idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM); + return isModuleTypePPM(g_model.moduleData[idx].type); } -#else -inline bool isModulePPM(uint8_t idx) -{ - return isExtraModule(idx) || - (idx == EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM); -} -#endif inline bool isModuleTypeR9MNonAccess(uint8_t type) { @@ -479,4 +476,21 @@ inline void removePXX2ReceiverIfEmpty(uint8_t moduleIdx, uint8_t receiverIdx) } } +inline void setDefaultPpmFrameLength(uint8_t moduleIdx) +{ + g_model.moduleData[moduleIdx].ppm.frameLength = 4 * max(0, g_model.moduleData[moduleIdx].channelsCount); +} + +inline void setModuleType(uint8_t moduleIdx, uint8_t moduleType) +{ + ModuleData & moduleData = g_model.moduleData[moduleIdx]; + memclear(&moduleData, sizeof(ModuleData)); + moduleData.type = moduleType; + moduleData.channelsCount = defaultModuleChannels_M8(EXTERNAL_MODULE); + if (isModuleSBUS(moduleIdx)) + moduleData.sbus.refreshRate = -31; + else if (isModuleTypePPM(moduleData.type)) + setDefaultPpmFrameLength(EXTERNAL_MODULE); +} + #endif // _MODULES_HELPERS_H_ diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index b9f603b8a..68d6b95d1 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -754,6 +754,10 @@ void rtcInit() { } +void rtcGetTime(struct gtm * t) +{ +} + void rtcSetTime(const struct gtm * t) { }