diff --git a/.travis.yml b/.travis.yml index 2d5cf70d6..04c4def17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,7 @@ env: # - FLAVOR=SKY9X # - FLAVOR=9XRPRO - FLAVOR=X7 + - FLAVOR=XLITE - FLAVOR=X9 # - FLAVOR=X9D # - FLAVOR=X9D+ diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 50f3ed274..cc5323ae5 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -60,6 +60,8 @@ uint32_t Boards::getFourCC(Type board) return 0x3478746F; case BOARD_X10: return 0x3778746F; + case BOARD_TARANIS_XLITE: + return 0x3978746F; case BOARD_TARANIS_X7: return 0x3678746F; case BOARD_TARANIS_X9E: @@ -94,6 +96,7 @@ const int Boards::getEEpromSize(Board::Type board) case BOARD_9XRPRO: case BOARD_AR9X: return EESIZE_9XRPRO; + case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: @@ -120,10 +123,11 @@ const int Boards::getFlashSize(Type board) case BOARD_9XRPRO: case BOARD_AR9X: return FSIZE_9XRPRO; + case BOARD_TARANIS_XLITE: + case BOARD_TARANIS_X7: case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: - case BOARD_TARANIS_X7: case BOARD_X12S: case BOARD_X10: return FSIZE_HORUS; @@ -136,6 +140,14 @@ const int Boards::getFlashSize(Type board) const SwitchInfo Boards::getSwitchInfo(Board::Type board, unsigned index) { + if (IS_TARANIS_XLITE(board)) { + const Board::SwitchInfo switches[] = { + {SWITCH_3POS, "SA"}, + {SWITCH_3POS, "SB"} + }; + if (index < DIM(switches)) + return switches[index]; + } if (IS_TARANIS_X7(board)) { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "SA"}, @@ -196,7 +208,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return 4; case Pots: - if (IS_TARANIS_X7(board)) + if (IS_TARANIS_SMALL(board)) return 2; else if (IS_TARANIS_X9E(board)) return 4; @@ -237,6 +249,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return 18; else if (IS_TARANIS_X7(board)) return 6; + else if (IS_TARANIS_XLITE(board)) + return 2; else if (IS_HORUS_OR_TARANIS(board)) return 8; else @@ -257,6 +271,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) case NumTrims: if (IS_HORUS(board)) return 6; + else if (IS_TARANIS_XLITE(board)) + return 2; else return 4; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index cf9296841..f32394a06 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -45,6 +45,7 @@ namespace Board { BOARD_TARANIS_X9E, BOARD_X12S, BOARD_X10, + BOARD_TARANIS_XLITE, BOARD_ENUM_COUNT }; @@ -185,12 +186,14 @@ class Boards #define IS_2560(board) (board==Board::BOARD_GRUVIN9X || board==Board::BOARD_MEGA2560) #define IS_SKY9X(board) (board==Board::BOARD_SKY9X || board==Board::BOARD_9XRPRO || board==Board::BOARD_AR9X) #define IS_9XRPRO(board) (board==Board::BOARD_9XRPRO) +#define IS_TARANIS_XLITE(board) (board==Board::BOARD_TARANIS_XLITE) #define IS_TARANIS_X7(board) (board==Board::BOARD_TARANIS_X7) #define IS_TARANIS_X9(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9D(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP) #define IS_TARANIS_PLUS(board) (board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9E(board) (board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board)) +#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)) +#define IS_TARANIS_SMALL(board) (board==Board::BOARD_TARANIS_X7 || board==Board::BOARD_TARANIS_XLITE) #define IS_TARANIS_NOT_X9E(board) (IS_TARANIS(board) && !IS_TARANIS_X9E(board)) #define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) #define IS_HORUS_X10(board) (board==Board::BOARD_X10) @@ -198,6 +201,6 @@ class Boards #define IS_HORUS_OR_TARANIS(board) (IS_HORUS(board) || IS_TARANIS(board)) #define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board)) #define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(board)) -#define HAS_LARGE_LCD(board) (IS_HORUS(board) || (IS_TARANIS(board) && !IS_TARANIS_X7(board))) +#define HAS_LARGE_LCD(board) (IS_HORUS(board) || IS_TARANIS_X9(board)) #endif // _BOARDS_H_ diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index caf6e9e3d..dd65853bc 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -112,7 +112,10 @@ GeneralSettings::GeneralSettings() speakerVolume = 12; } - if (IS_HORUS(board) || IS_TARANIS_X9E(board) || IS_TARANIS_X7(board)) { + if (IS_HORUS(board)) { + strcpy(bluetoothName, "Horus"); + } + else if (IS_TARANIS_X9E(board) || IS_TARANIS_SMALL(board)) { strcpy(bluetoothName, "Taranis"); } @@ -234,7 +237,7 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board) potConfig[1] = Board::POT_MULTIPOS_SWITCH; potConfig[2] = Board::POT_WITH_DETENT; } - else if (IS_TARANIS_X7(board)) { + else if (IS_TARANIS_SMALL(board)) { potConfig[0] = Board::POT_WITHOUT_DETENT; potConfig[1] = Board::POT_WITH_DETENT; } diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index b8be58496..be12d1751 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -18,6 +18,7 @@ * GNU General Public License for more details. */ +#include "boards.h" #include "helpers.h" #include "opentxeeprom.h" #include "customdebug.h" @@ -32,18 +33,18 @@ using namespace Board; #define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || IS_2560(board)) #define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256) -#define MAX_POTS(board, version) (IS_HORUS(board) ? 3 : (IS_TARANIS_X7(board) ? 2 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : (version >= 216 ? 3 : 2)) : 3))) -#define MAX_SLIDERS(board) (IS_HORUS(board) ? 4 : (IS_TARANIS_X7(board) ? 0 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : 2) : 0))) -#define MAX_MOUSE_ANALOGS(board) (IS_HORUS(board) ? 2 : 0) -#define MAX_SWITCHES(board, version) (IS_HORUS(board) ? 8 : (IS_TARANIS_X7(board) ? 6 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 18 : 8) : 7))) -#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : 8) -#define MAX_SWITCHES_POSITION(board, version) (IS_TARANIS_X7(board) ? 6*3 : (IS_TARANIS_X9E(board) ? 18*3 : (IS_HORUS_OR_TARANIS(board) ? 8*3 : 9))) +#define MAX_POTS(board, version) (IS_TARANIS_NOT_X9E(board) && version < 216 ? 2 : Boards::getCapability(board, Board::Pots)) +#define MAX_SLIDERS(board) (Boards::getCapability(board, Board::Sliders)) +#define MAX_MOUSE_ANALOGS(board) (Boards::getCapability(board, Board::MouseAnalogs)) +#define MAX_SWITCHES(board, version) (Boards::getCapability(board, Board::Switches)) +#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : 8) // bitsize of swconfig_t / 2 (see radio/src/datastructs.h) +#define MAX_SWITCHES_POSITION(board, version) (Boards::getCapability(board, Board::SwitchPositions)) #define MAX_ROTARY_ENCODERS(board) (IS_2560(board) ? 2 : (IS_SKY9X(board) ? 1 : 0)) #define MAX_FLIGHT_MODES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5)) #define MAX_TIMERS(board, version) ((IS_ARM(board) && version >= 217) ? 3 : 2) #define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32) #define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) -#define MAX_TRIMS(board) (IS_HORUS(board) ? 6 : 4) +#define MAX_TRIMS(board) (Boards::getCapability(board, Board::NumTrims)) #define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_HORUS_OR_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14)) #define MAX_LOGICAL_SWITCHES(board, version) (IS_ARM(board) ? (version >= 218 ? 64 : 32) : ((IS_DBLEEPROM(board, version) && version<217) ? 15 : 12)) #define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16)) diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index c91e70869..48fac923e 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -32,6 +32,7 @@ #define M128_VARIANT 0x8000 #define TARANIS_X9E_VARIANT 0x8000 #define TARANIS_X7_VARIANT 0x4000 +#define TARANIS_XLITE_VARIANT 0x4000 #define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT) #define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index eea4d5ae2..9409d81de 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -83,6 +83,8 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for FrSky Taranis X9E"; case BOARD_TARANIS_X7: return "OpenTX for FrSky Taranis X7"; + case BOARD_TARANIS_XLITE: + return "OpenTX for FrSky Taranis X-Lite"; case BOARD_SKY9X: return "OpenTX for Sky9x board / 9X"; case BOARD_9XRPRO: @@ -324,6 +326,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_TARANIS_X7(board)) { variant |= TARANIS_X7_VARIANT; } + else if (IS_TARANIS_XLITE(board)) { + variant |= TARANIS_XLITE_VARIANT; + } OpenTxGeneralData generator((GeneralSettings &)radioData.generalSettings, board, version, variant); // generator.Dump(); @@ -534,7 +539,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case SoundPitch: return 1; case Haptic: - return (IS_2560(board) || IS_SKY9X(board) || IS_TARANIS_PLUS(board) || IS_TARANIS_X7(board) || IS_TARANIS_X9E(board) || IS_HORUS(board) || id.contains("haptic")); + return (IS_2560(board) || IS_SKY9X(board) || IS_TARANIS_PLUS(board) || IS_TARANIS_SMALL(board) || IS_TARANIS_X9E(board) || IS_HORUS(board) || id.contains("haptic")); case ModelTrainerEnable: if (IS_HORUS_OR_TARANIS(board)) return 1; @@ -543,7 +548,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case MaxVolume: return (IS_ARM(board) ? 23 : 7); case MaxContrast: - if (IS_TARANIS_X7(board)) + if (IS_TARANIS_SMALL(board)) return 30; else return 45; @@ -631,7 +636,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case LcdWidth: if (IS_HORUS(board)) return 480; - else if (IS_TARANIS_X7(board)) + else if (IS_TARANIS_SMALL(board)) return 128; else if (IS_TARANIS(board)) return 212; @@ -645,7 +650,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case LcdDepth: if (IS_HORUS(board)) return 16; - else if (IS_TARANIS_X7(board)) + else if (IS_TARANIS_SMALL(board)) return 1; else if (IS_TARANIS(board)) return 4; @@ -689,6 +694,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return TARANIS_X9E_VARIANT; else if (IS_TARANIS_X7(board)) return TARANIS_X7_VARIANT; + else if (IS_TARANIS_XLITE(board)) + return TARANIS_XLITE_VARIANT; else return 0; case MavlinkTelemetry: @@ -887,6 +894,7 @@ EepromLoadErrors OpenTxEepromInterface::checkVersion(unsigned int version) bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant) { + bool variantError = false; if (board == BOARD_M128 && !(variant & M128_VARIANT)) { if (version == 212) { uint8_t tmp[1000]; @@ -899,27 +907,25 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari } } } + variantError = true; + } + else if (IS_TARANIS_X9E(board) && variant != TARANIS_X9E_VARIANT) { + variantError = true; + } + else if (IS_TARANIS_X7(board) && variant != TARANIS_X7_VARIANT) { + variantError = true; + } + else if (IS_TARANIS_XLITE(board) && variant != TARANIS_XLITE_VARIANT) { + variantError = true; + } + else if (IS_TARANIS(board) && variant != 0) { + variantError = true; + } + + if (variantError) { qWarning() << " wrong variant (" << variant << ")"; return false; } - else if (IS_TARANIS_X9E(board)) { - if (variant != TARANIS_X9E_VARIANT) { - qWarning() << " wrong variant (" << variant << ")"; - return false; - } - } - else if (IS_TARANIS_X7(board)) { - if (variant != TARANIS_X7_VARIANT) { - qWarning() << " wrong variant (" << variant << ")"; - return false; - } - } - else if (IS_TARANIS(board)) { - if (variant != 0) { - qWarning() << " wrong variant (" << variant << ")"; - return false; - } - } return true; } @@ -1167,12 +1173,14 @@ void registerOpenTxFirmwares() /* FrSky X7 board */ firmware = new OpenTxFirmware("opentx-x7", QCoreApplication::translate("Firmware", "FrSky Taranis X7 / X7S"), BOARD_TARANIS_X7); - // No mixersmon for now - addOpenTxFrskyOptions(firmware); - firmware->addOption("internalppm", QCoreApplication::translate("Firmware", "Support for PPM internal module hack")); - firmware->addOption("sqt5font", QCoreApplication::translate("Firmware", "Use alternative SQT5 font")); + addOpenTxTaranisOptions(firmware); registerOpenTxFirmware(firmware); + /* FrSky X-Lite board */ + // firmware = new OpenTxFirmware("opentx-xlite", QCoreApplication::translate("Firmware", "FrSky Taranis X-Lite"), BOARD_TARANIS_XLITE); + // addOpenTxTaranisOptions(firmware); + // registerOpenTxFirmware(firmware); + /* FrSky X10 board */ firmware = new OpenTxFirmware("opentx-x10", QCoreApplication::translate("Firmware", "FrSky Horus X10 / X10S"), BOARD_X10); addOpenTxFrskyOptions(firmware); diff --git a/companion/src/firmwares/rawsource.cpp b/companion/src/firmwares/rawsource.cpp index ad646049e..57ce40d63 100644 --- a/companion/src/firmwares/rawsource.cpp +++ b/companion/src/firmwares/rawsource.cpp @@ -320,6 +320,10 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con tr("TrmR"), tr("TrmE"), tr("TrmT"), tr("TrmA"), tr("Trm5"), tr("Trm6") }; + static const QString trims2[] = { + tr("TrmH"), tr("TrmV") + }; + static const QString special[] = { tr("Batt"), tr("Time"), tr("Timer1"), tr("Timer2"), tr("Timer3"), }; @@ -376,9 +380,11 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con return result; case SOURCE_TYPE_TRIM: - return CHECK_IN_ARRAY(trims, index); + return (Boards::getCapability(board, Board::NumTrims) == 2 ? CHECK_IN_ARRAY(trims2, index) : CHECK_IN_ARRAY(trims, index)); + case SOURCE_TYPE_ROTARY_ENCODER: return CHECK_IN_ARRAY(rotary, index); + case SOURCE_TYPE_MAX: return tr("MAX"); diff --git a/companion/src/firmwares/rawswitch.cpp b/companion/src/firmwares/rawswitch.cpp index 03fc0d773..5452e967a 100644 --- a/companion/src/firmwares/rawswitch.cpp +++ b/companion/src/firmwares/rawswitch.cpp @@ -45,6 +45,11 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen tr("Trim 6 Down"), tr("Trim 6 Up") }; + static const QString trimsSwitches2[] = { + tr("TrmH Left"), tr("TrmH Right"), + tr("TrmV Down"), tr("TrmV Up") + }; + static const QString rotaryEncoders[] = { tr("REa"), tr("REb") }; @@ -96,7 +101,7 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen return swName + "_" + QString::number(qr.rem + 1); case SWITCH_TYPE_TRIM: - return CHECK_IN_ARRAY(trimsSwitches, index-1); + return (Boards::getCapability(board, Board::NumTrims) == 2 ? CHECK_IN_ARRAY(trimsSwitches2, index-1) : CHECK_IN_ARRAY(trimsSwitches, index-1)); case SWITCH_TYPE_ROTARY_ENCODER: return CHECK_IN_ARRAY(rotaryEncoders, index-1); diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 770a226c2..40170ee5a 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -143,7 +143,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings setupSwitchType(16, ui->sqLabel, ui->sqName, ui->sqType); setupSwitchType(17, ui->srLabel, ui->srName, ui->srType); - if (IS_TARANIS(board) && !IS_TARANIS_X7(board)) { + if (IS_TARANIS(board) && !IS_TARANIS_SMALL(board)) { ui->serialPortMode->setCurrentIndex(generalSettings.hw_uartMode); } else { diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 5e7e83157..e72a9449e 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -1,7 +1,7 @@ include(CMakeForceCompiler) include(Bitmaps) -set(PCB_TYPES X7 X9D X9D+ X9E X10 X12S 9X 9XR 9X128 9XR128 9X2561 GRUVIN9X MEGA2560 SKY9X 9XRPRO AR9X) +set(PCB_TYPES X7 XLITE X9D X9D+ X9E X10 X12S 9X 9XR 9X128 9XR128 9X2561 GRUVIN9X MEGA2560 SKY9X 9XRPRO AR9X) set(GUI_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU NL) set(TTS_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU RU) @@ -83,7 +83,7 @@ set(FATFS_SRC if(PCB STREQUAL X12S OR PCB STREQUAL X10) include(targets/horus/CMakeLists.txt) -elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7) +elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7 OR PCB STREQUAL XLITE) include(targets/taranis/CMakeLists.txt) elseif(PCB STREQUAL SKY9X OR PCB STREQUAL 9XRPRO OR PCB STREQUAL AR9X) include(targets/sky9x/CMakeLists.txt) @@ -166,7 +166,8 @@ else() add_definitions(-DEEPROM -DEEPROM_RAW) endif() -if(ARCH STREQUAL ARM AND NOT PCB STREQUAL X12S AND NOT PCB STREQUAL X10) +if(ARCH STREQUAL ARM AND NOT PCB STREQUAL X12S AND NOT PCB STREQUAL X10 AND NOT PCB STREQUAL XLITE) + add_definitions(-DEEPROM_CONVERSIONS) set(SRC ${SRC} storage/eeprom_conversions.cpp) endif() @@ -491,7 +492,7 @@ if(NOT MSVC) endif() - if(PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X10 OR PCB STREQUAL X12S) + if(PCB STREQUAL XLITE OR PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X10 OR PCB STREQUAL X12S) add_subdirectory(targets/common/arm/stm32/bootloader) include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader) set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} bootloader) diff --git a/radio/src/bluetooth.h b/radio/src/bluetooth.h index 8e757a01b..d61506dda 100644 --- a/radio/src/bluetooth.h +++ b/radio/src/bluetooth.h @@ -44,7 +44,7 @@ enum BluetoothStates { #define LEN_BLUETOOTH_ADDR 16 -#if defined(PCBX7) +#if defined(PCBX7) || defined(PCBXLITE) extern uint8_t btChipPresent; #endif diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index bde00a8aa..5935066d0 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -117,9 +117,9 @@ enum CurveType { }; #if defined(CPUARM) -#define MIN_POINTS_PER_CURVE 3 + #define MIN_POINTS_PER_CURVE 3 #else -#define MIN_POINTS_PER_CURVE 3 + #define MIN_POINTS_PER_CURVE 3 #endif #define MAX_POINTS_PER_CURVE 17 @@ -136,18 +136,7 @@ enum CurveType { #define LEN_FUNCTION_NAME 6 #define MAX_CURVES 32 #define MAX_CURVE_POINTS 512 -#elif defined(PCBSKY9X) || defined(PCBX7) - #define LEN_MODEL_NAME 10 - #define LEN_TIMER_NAME 3 - #define LEN_FLIGHT_MODE_NAME 6 - #define LEN_EXPOMIX_NAME 6 - #define LEN_CHANNEL_NAME 4 - #define LEN_INPUT_NAME 3 - #define LEN_CURVE_NAME 3 - #define LEN_FUNCTION_NAME 6 - #define MAX_CURVES 16 // TODO next EEPROM check if can be changed to 32 to have all ARM the same - #define MAX_CURVE_POINTS 512 -#elif defined(PCBTARANIS) +#elif LCD_W == 212 #define LEN_MODEL_NAME 12 #define LEN_TIMER_NAME 8 #define LEN_FLIGHT_MODE_NAME 10 @@ -159,6 +148,17 @@ enum CurveType { #define LEN_FUNCTION_NAME 8 #define MAX_CURVES 32 #define MAX_CURVE_POINTS 512 +#elif defined(CPUARM) + #define LEN_MODEL_NAME 10 + #define LEN_TIMER_NAME 3 + #define LEN_FLIGHT_MODE_NAME 6 + #define LEN_EXPOMIX_NAME 6 + #define LEN_CHANNEL_NAME 4 + #define LEN_INPUT_NAME 3 + #define LEN_CURVE_NAME 3 + #define LEN_FUNCTION_NAME 6 + #define MAX_CURVES 16 // TODO next EEPROM check if can be changed to 32 to have all ARM the same + #define MAX_CURVE_POINTS 512 #else #define LEN_MODEL_NAME 10 #define LEN_FLIGHT_MODE_NAME 6 @@ -189,15 +189,15 @@ enum CurveType { #endif #if defined(PCBX10) - #define NUM_AUX_TRIMS 2 + #define NUM_TRIMS (NUM_STICKS + 2) #define NUM_MOUSE_ANALOGS 2 #define NUM_DUMMY_ANAS 2 #elif defined(PCBHORUS) - #define NUM_AUX_TRIMS 2 + #define NUM_TRIMS (NUM_STICKS + 2) #define NUM_MOUSE_ANALOGS 2 #define NUM_DUMMY_ANAS 0 #else - #define NUM_AUX_TRIMS 0 + #define NUM_TRIMS NUM_STICKS #define NUM_MOUSE_ANALOGS 0 #define NUM_DUMMY_ANAS 0 #endif @@ -266,7 +266,7 @@ enum BeeperMode { #if defined(BLUETOOTH) #define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH -#elif defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE #else #define TRAINER_MODE_MAX() HAS_WIRELESS_TRAINER_HARDWARE() ? TRAINER_MODE_MASTER_BATTERY_COMPARTMENT : TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE @@ -529,7 +529,15 @@ enum SwitchSources { SWSRC_FIRST_SWITCH, -#if defined(PCBTARANIS) || defined(PCBHORUS) +#if defined(PCBXLITE) + SWSRC_SA0 = SWSRC_FIRST_SWITCH, + SWSRC_SA1, + SWSRC_SA2, + SWSRC_SB0, + SWSRC_SB1, + SWSRC_SB2, + SWSRC_LAST_SWITCH = SWSRC_SB2, +#elif defined(PCBTARANIS) || defined(PCBHORUS) SWSRC_SA0 = SWSRC_FIRST_SWITCH, SWSRC_SA1, SWSRC_SA2, @@ -542,7 +550,7 @@ enum SwitchSources { SWSRC_SD0, SWSRC_SD1, SWSRC_SD2, -#if !defined(PCBX7) +#if !defined(PCBX7) && !defined(PCBXLITE) SWSRC_SE0, SWSRC_SE1, SWSRC_SE2, @@ -550,7 +558,7 @@ enum SwitchSources { SWSRC_SF0, SWSRC_SF1, SWSRC_SF2, -#if !defined(PCBX7) +#if !defined(PCBX7) && !defined(PCBXLITE) SWSRC_SG0, SWSRC_SG1, SWSRC_SG2, @@ -618,18 +626,17 @@ enum SwitchSources { SWSRC_TrimRudRight, SWSRC_TrimEleDown, SWSRC_TrimEleUp, +#if NUM_TRIMS > 2 SWSRC_TrimThrDown, SWSRC_TrimThrUp, SWSRC_TrimAilLeft, SWSRC_TrimAilRight, -#if defined(PCBHORUS) +#endif +#if NUM_TRIMS > 4 SWSRC_TrimT5Down, SWSRC_TrimT5Up, SWSRC_TrimT6Down, SWSRC_TrimT6Up, - SWSRC_LAST_TRIM = SWSRC_TrimT6Up, -#else - SWSRC_LAST_TRIM = SWSRC_TrimAilRight, #endif #if defined(PCBSKY9X) @@ -689,6 +696,8 @@ enum SwitchSources { #endif }; +#define SWSRC_LAST_TRIM (SWSRC_FIRST_TRIM + 2*NUM_TRIMS - 1) + enum MixSources { MIXSRC_NONE, @@ -730,7 +739,7 @@ enum MixSources { MIXSRC_SLIDER3, LUA_EXPORT("lcs", "Left center slider (X9E only)") MIXSRC_SLIDER4, LUA_EXPORT("rcs", "Right center slider (X9E only)") MIXSRC_LAST_POT = MIXSRC_SLIDER4, -#elif defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) MIXSRC_POT1 = MIXSRC_FIRST_POT, LUA_EXPORT("s1", "Potentiometer 1") MIXSRC_POT2, LUA_EXPORT("s2", "Potentiometer 2") MIXSRC_LAST_POT = MIXSRC_POT2, @@ -791,7 +800,11 @@ enum MixSources { MIXSRC_FIRST_SWITCH, -#if defined(PCBTARANIS) || defined(PCBHORUS) +#if defined(PCBXLITE) + MIXSRC_SA = MIXSRC_FIRST_SWITCH, LUA_EXPORT("sa", "Switch A") + MIXSRC_SB, LUA_EXPORT("sb", "Switch B") + MIXSRC_LAST_SWITCH = MIXSRC_SB, +#elif defined(PCBTARANIS) || defined(PCBHORUS) MIXSRC_SA = MIXSRC_FIRST_SWITCH, LUA_EXPORT("sa", "Switch A") MIXSRC_SB, LUA_EXPORT("sb", "Switch B") MIXSRC_SC, LUA_EXPORT("sc", "Switch C") diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 53fbd4fdd..63d7c5815 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -329,7 +329,7 @@ typedef int16_t gvar_t; #if defined(CPUARM) PACK(struct FlightModeData { - trim_t trim[NUM_STICKS+NUM_AUX_TRIMS]; + trim_t trim[NUM_TRIMS]; NOBACKUP(char name[LEN_FLIGHT_MODE_NAME]); int16_t swtch:9; // swtch of phase[0] is not used int16_t spare:7; @@ -928,7 +928,7 @@ PACK(struct TrainerData { NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); #elif defined(PCBTARANIS) - #if defined(PCBX9E) || defined(PCBX7) + #if defined(BLUETOOTH) #define BLUETOOTH_FIELDS \ uint8_t spare; \ char bluetoothName[LEN_BLUETOOTH_NAME]; @@ -1068,13 +1068,13 @@ static inline void check_struct() /* Difference between Taranis/Horus is LEN_EXPOMIX_NAME */ /* LEN_FUNCTION_NAME is the difference in CustomFunctionData */ -#if defined(PCBX7) +#if defined(PCBX7) || defined(PCBXLITE) CHKSIZE(MixData, 20); CHKSIZE(ExpoData, 17); CHKSIZE(LimitData, 11); CHKSIZE(LogicalSwitchData, 9); CHKSIZE(CustomFunctionData, 11); - CHKSIZE(FlightModeData, 36); + CHKSIZE(FlightModeData, 28 + 2*NUM_TRIMS); CHKSIZE(TimerData, 11); CHKSIZE(SwashRingData, 8); CHKSIZE(FrSkyBarData, 6); @@ -1083,10 +1083,6 @@ static inline void check_struct() CHKSIZE(FrSkyTelemetryData, 104); CHKSIZE(ModelHeader, 12); CHKSIZE(CurveData, 4); - - CHKSIZE(RadioData, 850); - CHKSIZE(ModelData, 6025); - #elif defined(PCBTARANIS) CHKSIZE(MixData, 22); CHKSIZE(ExpoData, 19); @@ -1102,14 +1098,6 @@ static inline void check_struct() CHKSIZE(FrSkyTelemetryData, 104); CHKSIZE(ModelHeader, 24); CHKSIZE(CurveData, 4); -#if defined(PCBX9E) - CHKSIZE(RadioData, 952); - CHKSIZE(ModelData, 6520); -#else - CHKSIZE(RadioData, 872); - CHKSIZE(ModelData, 6507); -#endif - #elif defined(PCBHORUS) CHKSIZE(MixData, 20); CHKSIZE(ExpoData, 17); @@ -1118,12 +1106,9 @@ static inline void check_struct() CHKSIZE(FlightModeData, 44); CHKSIZE(TimerData, 16); CHKSIZE(SwashRingData, 8); - CHKSIZE(FrSkyTelemetryData, 5); CHKSIZE(ModelHeader, 27); CHKSIZE(CurveData, 4); - CHKSIZE(RadioData, 847); - CHKSIZE(ModelData, 9380); CHKSIZE(CustomScreenData, 610); CHKSIZE(Topbar::PersistentData, 216); #elif defined(PCBSKY9X) @@ -1139,8 +1124,6 @@ static inline void check_struct() CHKSIZE(FrSkyTelemetryData, 88); CHKSIZE(ModelHeader, 12); CHKTYPE(CurveData, 4); - CHKSIZE(RadioData, 727); - CHKSIZE(ModelData, 5188); #else // Common for all variants CHKSIZE(LimitData, 5); @@ -1199,6 +1182,26 @@ static inline void check_struct() #endif CHKSIZE(TrainerData, 16); +#if defined(PCBXLITE) + CHKSIZE(RadioData, 838); + CHKSIZE(ModelData, 6025); +#elif defined(PCBX7) + CHKSIZE(RadioData, 850); + CHKSIZE(ModelData, 6025); +#elif defined(PCBX9E) + CHKSIZE(RadioData, 952); + CHKSIZE(ModelData, 6520); +#elif defined(PCBX9D) + CHKSIZE(RadioData, 872); + CHKSIZE(ModelData, 6507); +#elif defined(PCBSKY9X) + CHKSIZE(RadioData, 727); + CHKSIZE(ModelData, 5188); +#elif defined(PCBHORUS) + CHKSIZE(RadioData, 847); + CHKSIZE(ModelData, 9380); +#endif + #undef CHKSIZE #undef CHKSIZEUNION } diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index a4bf26a87..502c2e1f4 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -279,7 +279,7 @@ void evalFunctions() #endif #if defined(GVARS) - for (uint8_t i=0; i=ITEM_MODEL_PHASE_SWITCH) sub += VERTICAL_SHIFT; + if (s_currIdx == 0 && sub>=ITEM_MODEL_FLIGHT_MODE_SWITCH) sub += VERTICAL_SHIFT; for (uint8_t k=0; k=ITEM_MODEL_PHASE_SWITCH) i += VERTICAL_SHIFT; + if (s_currIdx == 0 && i>=ITEM_MODEL_FLIGHT_MODE_SWITCH) i += VERTICAL_SHIFT; uint8_t attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0); #else - for (uint8_t i=0, k=0, y=PHASE_ONE_FIRST_LINE; i0 ? BLINK|INVERS : INVERS) : 0); #endif switch (i) { - case ITEM_MODEL_PHASE_NAME: + case ITEM_MODEL_FLIGHT_MODE_NAME: editSingleName(MIXES_2ND_COLUMN, y, STR_PHASENAME, fm->name, sizeof(fm->name), event, attr); break; - case ITEM_MODEL_PHASE_SWITCH: + case ITEM_MODEL_FLIGHT_MODE_SWITCH: fm->swtch = editSwitch(MIXES_2ND_COLUMN, y, fm->swtch, attr, event); break; - case ITEM_MODEL_PHASE_TRIMS: + case ITEM_MODEL_FLIGHT_MODE_TRIMS: lcdDrawTextAlignedLeft(y, STR_TRIMS); #if defined(CPUARM) for (uint8_t t = 0; t < NUM_STICKS; t++) { @@ -164,7 +164,7 @@ void menuModelFlightModeOne(event_t event) break; #if ROTARY_ENCODERS > 0 - case ITEM_MODEL_PHASE_ROTARY_ENCODERS: + case ITEM_MODEL_FLIGHT_MODE_ROTARY_ENCODERS: lcdDrawTextAlignedLeft(y, STR_ROTARY_ENCODER); for (uint8_t t=0; tfadeIn = EDIT_DELAY(0, y, event, attr, STR_FADEIN, fm->fadeIn); break; - case ITEM_MODEL_PHASE_FADE_OUT: + case ITEM_MODEL_FLIGHT_MODE_FADE_OUT: fm->fadeOut = EDIT_DELAY(0, y, event, attr, STR_FADEOUT, fm->fadeOut); break; #if defined(GVARS) && !defined(PCBSTD) - case ITEM_MODEL_PHASE_GVARS_LABEL: + case ITEM_MODEL_FLIGHT_MODE_GVARS_LABEL: lcdDrawTextAlignedLeft(y, STR_GLOBAL_VARS); break; default: { - uint8_t idx = i-ITEM_MODEL_PHASE_GV1; + uint8_t idx = i-ITEM_MODEL_FLIGHT_MODE_GV1; uint8_t posHorz = menuHorizontalPosition; if (attr && posHorz > 0 && s_currIdx==0) posHorz++; @@ -247,7 +247,7 @@ void menuModelFlightModeOne(event_t event) #define TRIMS_OFS (-FW/2-4) #define ROTARY_ENC_OFS (2) #endif -#elif defined(PCBX7) +#elif defined(PCBTARANIS) #define NAME_POS 20 #define SWITCH_POS 59 #define TRIMS_POS 79 @@ -292,14 +292,14 @@ void menuModelFlightModesAll(event_t event) att = (i==sub ? INVERS : 0); FlightModeData * p = flightModeAddress(i); drawFlightMode(0, y, i+1, att|(getFlightMode()==i ? BOLD : 0)); -#if defined(PCBX7) +#if defined(PCBTARANIS) lcdDrawSizedText(NAME_POS, y, p->name, sizeof(p->name), ZCHAR); #else lcdDrawSizedText(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR); #endif if (i == 0) { for (uint8_t t=0; tswtch, 0); for (uint8_t t=0; tname[0]) { lcdDrawSizedText(EXPO_LINE_NAME_POS, y, md->name, sizeof(md->name), ZCHAR); diff --git a/radio/src/gui/128x64/model_select.cpp b/radio/src/gui/128x64/model_select.cpp index c2d4b255e..05179b5b4 100644 --- a/radio/src/gui/128x64/model_select.cpp +++ b/radio/src/gui/128x64/model_select.cpp @@ -20,7 +20,6 @@ #include "opentx.h" -#define MODELSIZE_POS_X 170 #define MODELSEL_W LCD_W #if defined(NAVIGATION_MENUS) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index b6c570f30..78321969a 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -53,12 +53,12 @@ enum MenuModelSetupItems { CASE_CPUARM(ITEM_MODEL_CHECKLIST_DISPLAY) ITEM_MODEL_THROTTLE_WARNING, ITEM_MODEL_SWITCHES_WARNING, -#if defined(PCBX7) +#if defined(PCBTARANIS) ITEM_MODEL_POTS_WARNING, #endif ITEM_MODEL_BEEP_CENTER, CASE_CPUARM(ITEM_MODEL_USE_GLOBAL_FUNCTIONS) -#if defined(PCBX7) +#if defined(PCBTARANIS) ITEM_MODEL_INTERNAL_MODULE_LABEL, ITEM_MODEL_INTERNAL_MODULE_MODE, ITEM_MODEL_INTERNAL_MODULE_CHANNELS, @@ -117,7 +117,9 @@ enum MenuModelSetupItems { #define MODEL_SETUP_RANGE_OFS 4*FW+3 #define MODEL_SETUP_SET_FAILSAFE_OFS 7*FW-2 -#if defined(PCBX7) +#if defined(PCBXLITE) + #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE) +#elif defined(PCBX7) #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)) #elif defined(PCBSKY9X) && !defined(REVA) #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE) @@ -231,7 +233,7 @@ void onBindMenu(const char * result) void menuModelSetup(event_t event) { -#if defined(PCBX7) +#if defined(PCBTARANIS) MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, NUM_SWITCHES-1, NUM_POTS, NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_ROTARY_ENCODERS-1, 0, LABEL(InternalModule), INTERNAL_MODULE_MODE_ROWS, @@ -537,7 +539,7 @@ void menuModelSetup(event_t event) g_model.switchWarningEnable ^= (1 << menuHorizontalPosition); storageDirty(EE_MODEL); #else -#if defined(PCBX7) +#if defined(PCBTARANIS) if (menuHorizontalPosition < NUM_SWITCHES) { g_model.switchWarningEnable ^= (1 << (menuHorizontalPosition-1)); #else @@ -555,7 +557,7 @@ void menuModelSetup(event_t event) g_model.switchWarningState = switches_states; AUDIO_WARNING1(); storageDirty(EE_MODEL); -#elif defined(PCBX7) +#elif defined(PCBTARANIS) if (attr && menuHorizontalPosition == 0) { getMovedSwitch(); g_model.switchWarningState = switches_states; @@ -577,7 +579,7 @@ void menuModelSetup(event_t event) } } LcdFlags line = attr; -#if defined(PCBX7) +#if defined(PCBTARANIS) int current = 0; for (int i=0; i0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) { - do { - newval++; - } while (isValueAvailable && !isValueAvailable(newval) && newval<=i_max); + do { + newval++; + } while (isValueAvailable && !isValueAvailable(newval) && newval<=i_max); - if (newval > i_max) { - newval = val; - killEvents(event); - AUDIO_KEY_ERROR(); + if (newval > i_max) { + newval = val; + killEvents(event); + AUDIO_KEY_ERROR(); } } else if (event==EVT_KEY_FIRST(KEY_LEFT) || event==EVT_KEY_REPT(KEY_LEFT) || (s_editMode>0 && (IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)))) { do { - if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) { - newval -= min(10, val-i_min); - } - else { - newval--; - } - } while (isValueAvailable && !isValueAvailable(newval) && newval>=i_min); + if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) { + newval -= min(10, val-i_min); + } + else { + newval--; + } + } while (isValueAvailable && !isValueAvailable(newval) && newval>=i_min); - if (newval < i_min) { - newval = val; - killEvents(event); - AUDIO_KEY_ERROR(); - } + if (newval < i_min) { + newval = val; + killEvents(event); + AUDIO_KEY_ERROR(); + } } if (!READ_ONLY() && i_min==0 && i_max==1 && (event==EVT_KEY_BREAK(KEY_ENTER) || IS_ROTARY_BREAK(event))) { @@ -409,7 +409,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla } return newval; } - #endif +#endif #else int16_t checkIncDec(event_t event, int16_t val, int16_t i_min, int16_t i_max, uint8_t i_flags) { diff --git a/radio/src/gui/128x64/radio_diaganas.cpp b/radio/src/gui/128x64/radio_diaganas.cpp index 3e88fc111..2d1d7e6be 100644 --- a/radio/src/gui/128x64/radio_diaganas.cpp +++ b/radio/src/gui/128x64/radio_diaganas.cpp @@ -57,14 +57,14 @@ void menuRadioDiagAnalogs(event_t event) } // RAS -#if defined(PCBX7) - if(IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON()) { +#if defined(PCBTARANIS) + if (IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON()) { coord_t y = MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 1 * FH + 2; lcdDrawText(1, y, "RAS:"); lcdDrawNumber(1 + 4*FW, y, telemetryData.swr.value, LEFT); } #elif defined(CPUARM) - if(IS_MODULE_XJT(EXTERNAL_MODULE)) { + if (IS_MODULE_XJT(EXTERNAL_MODULE)) { coord_t y = MENU_HEADER_HEIGHT + 1 + ((NUM_STICKS+NUM_POTS+NUM_SLIDERS)/2)*FH; uint8_t x = ((NUM_STICKS+NUM_POTS+NUM_SLIDERS) & 1) ? (LCD_W/2)+FW : 0; @@ -79,7 +79,7 @@ void menuRadioDiagAnalogs(event_t event) lcdDrawNumber(64+5+6*FW-3, 1+4*FH, BandGap, RIGHT); #endif -#if defined(PCBX7) +#if defined(PCBTARANIS) lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 2, STR_BATT_CALIB); putsVolts(LEN_CALIB_FIELDS*FW+FW, MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 2, getBatteryVoltage(), (menuVerticalPosition==HEADER_LINE ? INVERS | (s_editMode > 0 ? BLINK : 0) : 0) | PREC2 | LEFT); #elif defined(PCBSKY9X) diff --git a/radio/src/gui/128x64/radio_diagkeys.cpp b/radio/src/gui/128x64/radio_diagkeys.cpp index 33a900502..d08b028c8 100644 --- a/radio/src/gui/128x64/radio_diagkeys.cpp +++ b/radio/src/gui/128x64/radio_diagkeys.cpp @@ -49,16 +49,22 @@ void menuRadioDiagKeys(event_t event) displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i); } - if (i < 6) { - y = MENU_HEADER_HEIGHT + FH + FH*i; + if (i < TRM_BASE) { #if defined(PCBX7) - if (i > 1) { - lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0); - displayKeyState(5*FW+4, y, KEY_MENU+(5-i)); + y = MENU_HEADER_HEIGHT + FH + FH*i; + if (i >= 2) { + // hide PLUS and MINUS virtual buttons + lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); + displayKeyState(5*FW+4, y, KEY_MENU+(TRM_BASE-1-i)); } +#elif defined(PCBXLITE) + y = MENU_HEADER_HEIGHT + FH*i; + lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); + displayKeyState(5*FW+2, y, KEY_MENU+(TRM_BASE-1-i)); #else - lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0); - displayKeyState(5*FW+2, y, KEY_MENU+(5-i)); + y = MENU_HEADER_HEIGHT + FH + FH*i; + lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); + displayKeyState(5*FW+2, y, KEY_MENU+(TRM_BASE-1-i)); #endif } diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index 747a7d391..79a834815 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -94,7 +94,7 @@ void menuRadioHardware(event_t event) } #endif // PCBSKY9X -#if defined(PCBX7) +#if defined(PCBTARANIS) enum MenuRadioHardwareItems { ITEM_RADIO_HARDWARE_LABEL_STICKS, ITEM_RADIO_HARDWARE_STICK1, @@ -125,14 +125,18 @@ enum MenuRadioHardwareItems { #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 #define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 -#if defined(PCBX7) +#if defined(PCBTARANIS) #define BLUETOOTH_ROWS uint8_t(btChipPresent ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? -1 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), #elif defined(BLUETOOTH) #define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), #else #define BLUETOOTH_ROWS #endif +#if defined(PCBXLITE) +#define SWITCH_TYPE_MAX(sw) SWITCH_3POS +#else #define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF-MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH-MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS) +#endif #define HW_SETTINGS_COLUMN1 30 #define HW_SETTINGS_COLUMN2 (30 + 5*FW) diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 4919b1b3b..7e3abc5f3 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -21,7 +21,7 @@ #include "opentx.h" #define BIGSIZE DBLSIZE -#if defined (PCBX7) +#if defined (PCBTARANIS) #define LBOX_CENTERX (LCD_W/4 + 14) #define RBOX_CENTERX (3*LCD_W/4 - 13) #else @@ -544,7 +544,7 @@ void menuMainView(event_t event) doMainScreenGraphics(); // Switches -#if defined(PCBX7) +#if defined(PCBTARANIS) for (int i=0; i 0) { buzzTimeLeft--; // time gets counted down -#if defined(PCBSKY9X) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBHORUS) - // TODO define HAPTIC_PWM option +#if defined(HAPTIC_PWM) hapticOn(HAPTIC_STRENGTH() * 20); #else if (hapticTick-- > 0) { diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index e4c9224d6..07487d790 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -342,7 +342,13 @@ void logsWrite() f_printf(&g_oLogFile, "%d,", calibratedAnalogs[i]); } -#if defined(PCBX7) +#if defined(PCBXLITE) + f_printf(&g_oLogFile, "%d,%d,0x%08X%08X,", + GET_3POS_STATE(SA), + GET_3POS_STATE(SB), + getLogicalSwitchesStates(32), + getLogicalSwitchesStates(0)); +#elif defined(PCBX7) f_printf(&g_oLogFile, "%d,%d,%d,%d,%d,%d,0x%08X%08X,", GET_3POS_STATE(SA), GET_3POS_STATE(SB), diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 576c2a545..a6d22568d 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -28,7 +28,7 @@ #endif int16_t anas [NUM_INPUTS] = {0}; -int16_t trims[NUM_STICKS+NUM_AUX_TRIMS] = {0}; +int16_t trims[NUM_TRIMS] = {0}; int32_t chans[MAX_OUTPUT_CHANNELS] = {0}; BeepANACenter bpanaCenter = 0; @@ -534,13 +534,6 @@ void evalInputs(uint8_t mode) if (v < -RESX) v = -RESX; if (v > RESX) v = RESX; -#if defined(PCBTARANIS) && !defined(PCBX7) && !defined(SIMU) - // TODO why not in the driver? - if (i==POT1 || i==SLIDER1) { - v = -v; - } -#endif - if (g_model.throttleReversed && ch==THR_STICK) { v = -v; } diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 8f6ea9769..38a259241 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -256,14 +256,16 @@ void generalDefault() #endif g_eeGeneral.slidersConfig = 0x0f; // 4 sliders g_eeGeneral.blOffBright = 20; -#elif defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) g_eeGeneral.potsConfig = 0x07; // S1 = pot without detent, S2 = pot with detent #elif defined(PCBTARANIS) g_eeGeneral.potsConfig = 0x05; // S1 and S2 = pots with detent g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent #endif -#if defined(PCBX7) +#if defined(PCBXLITE) + g_eeGeneral.switchConfig = 0x0000000f; // 2x3POS +#elif defined(PCBX7) g_eeGeneral.switchConfig = 0x000006ff; // 4x3POS, 1x2POS, 1xTOGGLE #elif defined(PCBTARANIS) || defined(PCBHORUS) g_eeGeneral.switchConfig = 0x00007bff; // 6x3POS, 1x2POS, 1xTOGGLE @@ -1290,7 +1292,13 @@ void alert(const pm_char * title, const pm_char * msg ALERT_SOUND_ARG) } #if defined(GVARS) -int8_t trimGvar[NUM_STICKS+NUM_AUX_TRIMS] = { -1, -1, -1, -1 }; +#if NUM_TRIMS == 6 + int8_t trimGvar[NUM_TRIMS] = { -1, -1, -1, -1, -1, -1 }; +#elif NUM_TRIMS == 4 + int8_t trimGvar[NUM_TRIMS] = { -1, -1, -1, -1 }; +#elif NUM_TRIMS == 2 + int8_t trimGvar[NUM_TRIMS] = { -1, -1 }; +#endif #endif #if defined(CPUARM) @@ -1630,7 +1638,7 @@ uint16_t s_sum_samples_thr_10s; void evalTrims() { uint8_t phase = mixerCurrentFlightMode; - for (uint8_t i=0; i throttle trim if applicable int16_t trim = getTrimValue(phase, i); #if !defined(CPUARM) @@ -2393,18 +2401,18 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim } // reset all trims, except throttle (if throttle trim) - for (uint8_t i=0; icount>0 && cal->count= 0 #else #define TRIM_REUSED(idx) 0 @@ -875,9 +875,7 @@ void getADC(); #endif #endif -#if defined(SBUS) #include "sbus.h" -#endif void backlightOn(); void checkBacklight(); @@ -1157,7 +1155,7 @@ LogicalSwitchData * lswAddress(uint8_t idx); #endif extern int16_t anas [NUM_INPUTS]; -extern int16_t trims[NUM_STICKS+NUM_AUX_TRIMS]; +extern int16_t trims[NUM_TRIMS]; extern BeepANACenter bpanaCenter; extern uint8_t s_mixer_first_run_done; @@ -1431,7 +1429,7 @@ void opentxClose(uint8_t shutdown=true); void opentxInit(); void opentxResume(); -#if defined(PCBHORUS) || defined(PCBX7) +#if defined(STATUS_LEDS) #define LED_ERROR_BEGIN() ledRed() #define LED_ERROR_END() ledBlue() #else diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 138270d94..f14e707e4 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -247,9 +247,9 @@ void setupPulses(uint8_t port) #endif #if defined(MULTIMODULE) - case PROTO_MULTIMODULE: + case PROTO_MULTIMODULE: #endif - case PROTO_SBUS: + case PROTO_SBUS: init_sbusOut(port); break; diff --git a/radio/src/pulses/pulses_arm.h b/radio/src/pulses/pulses_arm.h index 288d37c21..73e7587d5 100644 --- a/radio/src/pulses/pulses_arm.h +++ b/radio/src/pulses/pulses_arm.h @@ -64,7 +64,7 @@ PACK(struct Dsm2SerialPulsesData { }); #endif -#if defined(PPM_PIN_UART) +#if defined(INTMODULE_USART) PACK(struct PxxUartPulsesData { uint8_t pulses[64]; uint8_t * ptr; @@ -74,7 +74,7 @@ PACK(struct PxxUartPulsesData { #endif #define MULTIMODULE_BAUDRATE 100000 -#if defined(PPM_PIN_TIMER) +#if defined(INTMODULE_PULSES) || defined(EXTMODULE_PULSES) /* PXX uses 20 bytes (as of Rev 1.1 document) with 8 changes per byte + stop bit ~= 162 max pulses */ /* DSM2 uses 2 header + 12 channel bytes, with max 10 changes (8n2) per byte + 16 bits trailer ~= 156 max pulses */ /* Multimodule uses 3 bytes header + 22 channel bytes with max 11 changes per byte (8e2) + 16 bits trailer ~= 291 max pulses */ @@ -108,11 +108,12 @@ union ModulePulsesData { #if defined(PPM_PIN_SERIAL) PxxSerialPulsesData pxx; Dsm2SerialPulsesData dsm2; -#else +#endif +#if defined(INTMODULE_PULSES) || defined(EXTMODULE_PULSES) PxxTimerPulsesData pxx; Dsm2TimerPulsesData dsm2; #endif -#if defined(PPM_PIN_UART) +#if defined(INTMODULE_USART) PxxUartPulsesData pxx_uart; #endif PpmPulsesData ppm; diff --git a/radio/src/pulses/pxx_arm.cpp b/radio/src/pulses/pxx_arm.cpp index d80c142a5..dacef662e 100644 --- a/radio/src/pulses/pxx_arm.cpp +++ b/radio/src/pulses/pxx_arm.cpp @@ -60,7 +60,7 @@ const uint16_t CRCTable[]= 0x7bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78 }; -#if defined(PPM_PIN_UART) +#if defined(INTMODULE_USART) inline void uartPutPcmPart(uint8_t port, uint8_t byte) { if (0x7E == byte) { @@ -204,7 +204,7 @@ void pxxPutPcmCrc(uint8_t port) pxxPutPcmByte(port, pulseValue); } -#if defined(PPM_PIN_UART) +#if defined(INTMODULE_USART) inline void initPcmArray(uint8_t port) { if (IS_UART_MODULE(port)) diff --git a/radio/src/sbus.cpp b/radio/src/sbus.cpp index 5fbd5f445..6817fa0f1 100644 --- a/radio/src/sbus.cpp +++ b/radio/src/sbus.cpp @@ -45,7 +45,7 @@ void processSbusFrame(uint8_t * sbus, int16_t * pulses, uint32_t size) return; // SBUS invalid frame or failsafe mode } - sbus++; // skip start byte + sbus++; // skip start byte uint32_t inputbitsavailable = 0; uint32_t inputbits = 0; diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index f3e588f35..a636e21c9 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -125,6 +125,9 @@ const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t ext #elif defined(PCBX9E) #define OTX_FOURCC 0x3578746F // otx for Taranis X9E #define O9X_FOURCC 0x3378396F // o9x for Taranis X9E +#elif defined(PCBXLITE) + #define OTX_FOURCC 0x3978746F // otx for Taranis X-Lite + #define O9X_FOURCC 0x3978396F // o9x for Taranis X-Lite #elif defined(PCBX7) #define OTX_FOURCC 0x3678746F // otx for Taranis X7 #define O9X_FOURCC 0x3378396F // o9x for Taranis X7 diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 2346870e6..e5cd5ff95 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -250,9 +250,19 @@ void Open9xSim::updateKeysAndSwitches(bool start) KEY_Down, KEY_DOWN, KEY_Right, KEY_RIGHT, KEY_Left, KEY_LEFT, +#elif defined(PCBXLITE) + KEY_Page_Up, KEY_MENU, + KEY_Return, KEY_ENTER, + KEY_BackSpace, KEY_EXIT, + KEY_Right, KEY_RIGHT, + KEY_Left, KEY_LEFT, + KEY_Up, KEY_UP, + KEY_Down, KEY_DOWN, #elif defined(PCBTARANIS) KEY_Page_Up, KEY_MENU, + #if defined(KEYS_GPIO_REG_PAGE) KEY_Page_Down, KEY_PAGE, + #endif KEY_Return, KEY_ENTER, KEY_BackSpace, KEY_EXIT, KEY_Up, KEY_PLUS, diff --git a/radio/src/storage/eeprom_raw.cpp b/radio/src/storage/eeprom_raw.cpp index a1f9dc6a2..edda1f87d 100644 --- a/radio/src/storage/eeprom_raw.cpp +++ b/radio/src/storage/eeprom_raw.cpp @@ -586,7 +586,7 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) eeLoadModelHeader(i_fileDst, &modelHeaders[i_fileDst]); -#if defined(PCBSKY9X) +#if defined(EEPROM_CONVERSIONS) if (version < EEPROM_VER) { ConvertModel(i_fileDst, version); eeLoadModel(g_eeGeneral.currModel); diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index 28898fb43..72758d3b2 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -213,7 +213,7 @@ bool eepromOpen() { eepromReadBlock((uint8_t *)&eeFs, 0, sizeof(eeFs)); -#ifdef SIMU +#if defined(SIMU) if (eeFs.version != EEFS_VERS) { TRACE("bad eeFs.version (%d instead of %d)", eeFs.version, EEFS_VERS); } @@ -628,7 +628,7 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) f_close(&g_oLogFile); -#if defined(PCBTARANIS) +#if defined(EEPROM_CONVERSIONS) if (version < EEPROM_VER) { storageCheck(true); ConvertModel(i_fileDst, version); @@ -837,7 +837,9 @@ bool eeLoadGeneral() TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); return false; } - else if (g_eeGeneral.version != EEPROM_VER) { +#endif +#if defined(EEPROM_CONVERSIONS) + if (g_eeGeneral.version != EEPROM_VER) { TRACE("EEPROM version %d instead of %d", g_eeGeneral.version, EEPROM_VER); if (!eeConvert()) { return false; diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index f63b72b16..8edd24c04 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -141,16 +141,22 @@ void getSwitchesPosition(bool startup) uint64_t newPos = 0; CHECK_3POS(0, SW_SA); CHECK_3POS(1, SW_SB); +#if !defined(PCBXLITE) CHECK_3POS(2, SW_SC); CHECK_3POS(3, SW_SD); -#if !defined(PCBX7) +#endif +#if !defined(PCBX7) && !defined(PCBXLITE) CHECK_3POS(4, SW_SE); #endif +#if !defined(PCBXLITE) CHECK_2POS(SW_SF); -#if !defined(PCBX7) +#endif +#if !defined(PCBX7) && !defined(PCBXLITE) CHECK_3POS(5, SW_SG); #endif +#if !defined(PCBXLITE) CHECK_2POS(SW_SH); +#endif #if defined(PCBX9E) CHECK_3POS(6, SW_SI); CHECK_3POS(7, SW_SJ); diff --git a/radio/src/targets/common/arm/CMakeLists.txt b/radio/src/targets/common/arm/CMakeLists.txt index 06961f905..12b5da77b 100644 --- a/radio/src/targets/common/arm/CMakeLists.txt +++ b/radio/src/targets/common/arm/CMakeLists.txt @@ -109,7 +109,6 @@ set(TARGET_SRC ${TARGET_SRC} pulses_driver.cpp keys_driver.cpp - trainer_driver.cpp telemetry_driver.cpp ) set(FIRMWARE_SRC diff --git a/radio/src/targets/common/arm/stm32/CMakeLists.txt b/radio/src/targets/common/arm/stm32/CMakeLists.txt index c99efa075..2db6d0ed4 100644 --- a/radio/src/targets/common/arm/stm32/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/CMakeLists.txt @@ -6,7 +6,7 @@ option(LUA_ALLOCATOR_TRACER "Trace Lua memory (de)allocations to debug port (als set(ARCH ARM) set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries) -add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO -DSBUS -DCROSSFIRE) +add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO -DCROSSFIRE) include_directories(${RADIO_SRC_DIRECTORY}/targets/common/arm/stm32) include_directories(${STM32USB_DIR}/STM32_USB_OTG_Driver/inc) include_directories(${STM32USB_DIR}/STM32_USB_Device_Library/Core/inc) @@ -86,7 +86,6 @@ foreach(FILE ${STM32USB_SRC}) endforeach() set(SRC ${SRC} - sbus.cpp telemetry/crossfire.cpp io/bootloader_flash.cpp ) diff --git a/radio/src/targets/common/arm/stm32/adc_driver.cpp b/radio/src/targets/common/arm/stm32/adc_driver.cpp index f28bca44d..524702840 100644 --- a/radio/src/targets/common/arm/stm32/adc_driver.cpp +++ b/radio/src/targets/common/arm/stm32/adc_driver.cpp @@ -26,22 +26,22 @@ const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,1,-1, 1,-1, 1, 1,1}; #elif defined(PCBX9E) #if defined(HORUS_STICKS) - const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,-1,-1,1, -1,1,1,1, -1}; + const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,-1,-1,1, -1,1,-1,-1, -1}; #else - const int8_t ana_direction[NUM_ANALOGS] = {1,1,-1,-1, -1,-1,-1,1, -1,1,1,1, -1}; + const int8_t ana_direction[NUM_ANALOGS] = {1,1,-1,-1, -1,-1,-1,1, -1,1,-1,-1, -1}; #endif const uint8_t ana_mapping[NUM_ANALOGS] = { 0 /*STICK1*/, 1 /*STICK2*/, 2 /*STICK3*/, 3 /*STICK4*/, 10 /*POT1*/, 4 /*POT2*/, 5 /*POT3*/, 6 /*POT4*/, 11 /*SLIDER1*/, 12 /*SLIDER2*/, 7 /*SLIDER3*/, 8 /*SLIDER4*/, 9 /*TX_VOLTAGE*/ }; #elif defined(PCBX9DP) - const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,1,-1, -1,1, 1}; -#elif defined(PCBX7) + const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, 1,1,-1, 1,1, 1}; +#elif defined(PCBX7) || defined(PCBXLITE) const int8_t ana_direction[NUM_ANALOGS] = {-1,1,-1,1, 1,1, 1}; #elif defined(REV4a) - const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,-1,0, -1,1, 1}; + const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, 1,-1,0, 1,1, 1}; #else - const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, -1,1,0, -1,1, 1}; + const int8_t ana_direction[NUM_ANALOGS] = {1,-1,1,-1, 1,1,0, 1,1, 1}; #endif #if NUM_PWMANALOGS > 0 @@ -102,6 +102,9 @@ void adcInit() #elif defined(PCBX9E) ADC_MAIN->SQR2 = (ADC_CHANNEL_POT4<<0) + (ADC_CHANNEL_SLIDER3<<5) + (ADC_CHANNEL_SLIDER4<<10) + (ADC_CHANNEL_BATT<<15); // conversions 7 and more ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT2<<20) + (ADC_CHANNEL_POT3<<25); // conversions 1 to 6 +#elif defined(PCBXLITE) + ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT<<0); // conversions 7 and more + ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT1<<25) + (ADC_CHANNEL_POT2<<20); // conversions 1 to 6 #elif defined(PCBX7) ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT<<0); // conversions 7 and more ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH<<0) + (ADC_CHANNEL_STICK_LV<<5) + (ADC_CHANNEL_STICK_RV<<10) + (ADC_CHANNEL_STICK_RH<<15) + (ADC_CHANNEL_POT1<<25) + (ADC_CHANNEL_POT2<<20); // conversions 1 to 6 diff --git a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp index 539f292f5..9ab7d6eeb 100644 --- a/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp +++ b/radio/src/targets/common/arm/stm32/bluetooth_driver.cpp @@ -23,7 +23,7 @@ Fifo btTxFifo; Fifo btRxFifo; -#if defined(PCBX7) +#if defined(PCBX7) || defined(PCBXLITE) uint8_t btChipPresent = 0; #endif @@ -109,7 +109,7 @@ extern "C" void BT_USART_IRQHandler(void) USART_ClearITPendingBit(BT_USART, USART_IT_RXNE); uint8_t byte = USART_ReceiveData(BT_USART); btRxFifo.push(byte); -#if defined(PCBX7) +#if defined(PCBX7) || defined(PCBXLITE) if (!btChipPresent) { //This is to differentiate X7 and X7S btChipPresent = 1; bluetoothDone(); diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp new file mode 100644 index 000000000..07f9a55c6 --- /dev/null +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -0,0 +1,163 @@ +/* + * 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. + */ + +#include "opentx.h" + +void intmoduleStop() +{ + INTERNAL_MODULE_OFF(); + + NVIC_DisableIRQ(INTMODULE_TIMER_IRQn); + + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; +} + +void intmoduleNoneStart() +{ + INTERNAL_MODULE_OFF(); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PIN); // Set high + + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; + INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) + INTMODULE_TIMER->ARR = 36000; // 18mS + INTMODULE_TIMER->CCR2 = 32000; // Update time + INTMODULE_TIMER->EGR = 1; // Restart + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt + INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; + NVIC_EnableIRQ(INTMODULE_TIMER_IRQn); + NVIC_SetPriority(INTMODULE_TIMER_IRQn, 7); +} + +void intmodulePxxStart() +{ + INTERNAL_MODULE_ON(); + + NVIC_InitTypeDef NVIC_InitStructure; + NVIC_InitStructure.NVIC_IRQChannel = INTMODULE_DMA_STREAM_IRQ; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + // TX Pin + GPIO_PinAFConfig(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PinSource, INTMODULE_TX_GPIO_AF); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); + + // RX Pin + GPIO_PinAFConfig(INTMODULE_RX_GPIO, INTMODULE_RX_GPIO_PinSource, INTMODULE_TX_GPIO_AF); + GPIO_InitStructure.GPIO_Pin = INTMODULE_RX_GPIO_PIN; + GPIO_Init(INTMODULE_RX_GPIO, &GPIO_InitStructure); + + // UART config + USART_DeInit(INTMODULE_USART); + USART_InitTypeDef USART_InitStructure; + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_Init(INTMODULE_USART, &USART_InitStructure); + USART_Cmd(INTMODULE_USART, ENABLE); + + // Timer + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; + INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) + INTMODULE_TIMER->ARR = 18000; // 9mS + INTMODULE_TIMER->CCR2 = 15000; // Update time + INTMODULE_TIMER->CCER = TIM_CCER_CC3E; + INTMODULE_TIMER->CCMR2 = 0; + INTMODULE_TIMER->EGR = 1; // Restart + + INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0; // Toggle CC1 o/p + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt + INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; + + NVIC_EnableIRQ(INTMODULE_TIMER_IRQn); + NVIC_SetPriority(INTMODULE_TIMER_IRQn, 7); +} + +extern "C" void INTMODULE_DMA_STREAM_IRQHandler(void) +{ + DEBUG_INTERRUPT(INT_DMA2S7); + if (DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) { + // TODO we could send the 8 next channels here (when needed) + DMA_ClearITPendingBit(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC); + } +} + +void intmoduleSendNextFrame() +{ + if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { + DMA_InitTypeDef DMA_InitStructure; + DMA_DeInit(INTMODULE_DMA_STREAM); + DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL; + DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&INTMODULE_USART->DR); + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses); + DMA_InitStructure.DMA_BufferSize = modulePulsesData[INTERNAL_MODULE].pxx_uart.ptr - modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(INTMODULE_DMA_STREAM, &DMA_InitStructure); + + DMA_Cmd(INTMODULE_DMA_STREAM, ENABLE); + USART_DMACmd(INTMODULE_USART, USART_DMAReq_Tx, ENABLE); + } +} + +extern "C" void INTMODULE_TIMER_IRQHandler() +{ + DEBUG_INTERRUPT(INT_TIM1CC); + DEBUG_TIMER_SAMPLE(debugTimerIntPulses); + DEBUG_TIMER_START(debugTimerIntPulsesDuration); + + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // clear flag + setupPulses(INTERNAL_MODULE); + intmoduleSendNextFrame(); + + DEBUG_TIMER_STOP(debugTimerIntPulsesDuration); +} diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index e848b616d..8e4316a8f 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -65,7 +65,7 @@ endif() set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET}) -add_definitions(-DPCBHORUS -DSTM32F429_439xx -DSDRAM -DCOLORLCD -DPPM_PIN_UART -DPPM_PIN_TIMER) +add_definitions(-DPCBHORUS -DSTM32F429_439xx -DSDRAM -DCOLORLCD) add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) @@ -121,6 +121,8 @@ set(TARGET_SRC board.cpp led_driver.cpp extmodule_driver.cpp + trainer_driver.cpp + ../common/arm/stm32/intmodule_serial_driver.cpp ../common/arm/stm32/bluetooth_driver.cpp ) diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index a4c9cfdb0..544ed9bd2 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -545,7 +545,6 @@ void serial2Putc(char c); void serial2SbusInit(void); void serial2Stop(void); #define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE) -int sbusGetByte(uint8_t * byte); // BT driver #define BLUETOOTH_FACTORY_BAUDRATE 57600 diff --git a/radio/src/targets/horus/extmodule_driver.cpp b/radio/src/targets/horus/extmodule_driver.cpp index 16a68c49e..0b369bab0 100644 --- a/radio/src/targets/horus/extmodule_driver.cpp +++ b/radio/src/targets/horus/extmodule_driver.cpp @@ -38,16 +38,16 @@ void extmoduleNoneStart() { EXTERNAL_MODULE_OFF(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, 0); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) @@ -66,15 +66,15 @@ void extmodulePpmStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); // PPM generation principle: // @@ -119,15 +119,15 @@ void extmodulePxxStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) @@ -166,15 +166,15 @@ void extmoduleDsm2Start() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) @@ -213,16 +213,16 @@ void extmoduleCrossfireStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, 0); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index f08800762..9d642229e 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -252,6 +252,8 @@ #define PWR_ON_GPIO_MODER GPIO_MODER_MODER1 #define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER1_0 +// S.Port update connector +#define SPORT_MAX_BAUDRATE 250000 // < 400000 #if defined(PCBX10) #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOH #define SPORT_UPDATE_PWR_GPIO GPIOH @@ -266,6 +268,7 @@ #define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11 // Led +#define STATUS_LEDS #if defined(PCBX12S) #define LED_RCC_AHB1Periph RCC_AHB1Periph_GPIOI #define LED_GPIO GPIOI @@ -481,6 +484,7 @@ #define I2C_SPEED 400000 // Haptic +#define HAPTIC_PWM #if defined(PCBX12S) #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define HAPTIC_RCC_APB2Periph RCC_APB2ENR_TIM9EN @@ -516,7 +520,7 @@ #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource6 #define INTMODULE_RX_GPIO_PinSource GPIO_PinSource7 #define INTMODULE_USART USART1 -#define INTMODULE_GPIO_AF GPIO_AF_USART1 +#define INTMODULE_TX_GPIO_AF GPIO_AF_USART1 #define INTMODULE_USART_IRQn USART1_IRQn #define INTMODULE_DMA_STREAM DMA2_Stream7 #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn @@ -547,16 +551,17 @@ #endif // External Module +#define EXTMODULE_PULSES #define EXTMODULE_PWR_GPIO GPIOB #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 #if defined(PCBX10) || PCBREV >= 13 #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) #define EXTMODULE_RCC_APB1Periph 0 #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 - #define EXTMODULE_PPM_GPIO GPIOA - #define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_10 // PA.10 - #define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource10 - #define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM1 + #define EXTMODULE_TX_GPIO GPIOA + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource10 + #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM1 #define EXTMODULE_TIMER TIM1 #define EXTMODULE_TIMER_IRQn TIM1_CC_IRQn #define EXTMODULE_TIMER_IRQHandler TIM1_CC_IRQHandler @@ -570,10 +575,10 @@ #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define EXTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM2 #define EXTMODULE_RCC_APB2Periph 0 - #define EXTMODULE_PPM_GPIO GPIOA - #define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_15 // PA.15 - #define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource15 - #define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM2 + #define EXTMODULE_TX_GPIO GPIOA + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_15 // PA.15 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource15 + #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM2 #define EXTMODULE_TIMER TIM2 #define EXTMODULE_TIMER_IRQn TIM2_IRQn #define EXTMODULE_TIMER_IRQHandler TIM2_IRQHandler diff --git a/radio/src/targets/horus/pulses_driver.cpp b/radio/src/targets/horus/pulses_driver.cpp index 356b3b2c7..096de56da 100644 --- a/radio/src/targets/horus/pulses_driver.cpp +++ b/radio/src/targets/horus/pulses_driver.cpp @@ -119,150 +119,3 @@ void disable_crossfire(uint32_t port) extmoduleStop(); } } - -void intmoduleStop() -{ - INTERNAL_MODULE_OFF(); - - NVIC_DisableIRQ(INTMODULE_TIMER_IRQn); - - INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; -} - -void intmoduleNoneStart() -{ - INTERNAL_MODULE_OFF(); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); - GPIO_SetBits(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PIN); // Set high - - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - INTMODULE_TIMER->ARR = 36000; // 18mS - INTMODULE_TIMER->CCR2 = 32000; // Update time - INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - - INTMODULE_TIMER->CCER = TIM_CCER_CC3E; - - INTMODULE_TIMER->CCMR2 = 0; - INTMODULE_TIMER->EGR = 1; // Restart - - INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0; // Toggle CC1 o/p - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt - INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - NVIC_EnableIRQ(INTMODULE_TIMER_IRQn); - NVIC_SetPriority(INTMODULE_TIMER_IRQn, 7); -} - -void intmodulePxxStart() -{ - NVIC_InitTypeDef NVIC_InitStructure; - GPIO_InitTypeDef GPIO_InitStructure; - - INTERNAL_MODULE_ON(); - - NVIC_InitStructure.NVIC_IRQChannel = INTMODULE_DMA_STREAM_IRQ; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); - - // TX Pin - GPIO_PinAFConfig(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PinSource, INTMODULE_GPIO_AF); - GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); - - // RX Pin - GPIO_PinAFConfig(INTMODULE_RX_GPIO, INTMODULE_RX_GPIO_PinSource, INTMODULE_GPIO_AF); - GPIO_InitStructure.GPIO_Pin = INTMODULE_RX_GPIO_PIN; - GPIO_Init(INTMODULE_RX_GPIO, &GPIO_InitStructure); - - // UART config - USART_DeInit(INTMODULE_USART); - USART_InitTypeDef USART_InitStructure; - USART_InitStructure.USART_BaudRate = 115200; - USART_InitStructure.USART_Parity = USART_Parity_No; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - USART_Init(INTMODULE_USART, &USART_InitStructure); - USART_Cmd(INTMODULE_USART, ENABLE); - - // Timer - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - INTMODULE_TIMER->ARR = 18000; // 9mS - INTMODULE_TIMER->CCR2 = 15000; // Update time - INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - INTMODULE_TIMER->CCER = TIM_CCER_CC3E; - INTMODULE_TIMER->CCMR2 = 0; - INTMODULE_TIMER->EGR = 1; // Restart - - INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0; // Toggle CC1 o/p - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt - INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - NVIC_EnableIRQ(INTMODULE_TIMER_IRQn); - NVIC_SetPriority(INTMODULE_TIMER_IRQn, 7); -} - -extern "C" void INTMODULE_DMA_STREAM_IRQHandler(void) -{ - DEBUG_INTERRUPT(INT_DMA2S7); - if (DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) { - // TODO we could send the 8 next channels here (when needed) - DMA_ClearITPendingBit(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC); - } -} - -void intmoduleSendNextFrame() -{ - if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { - DMA_InitTypeDef DMA_InitStructure; - DMA_DeInit(INTMODULE_DMA_STREAM); - DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL; - DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&INTMODULE_USART->DR); - DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; - DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses); - DMA_InitStructure.DMA_BufferSize = modulePulsesData[INTERNAL_MODULE].pxx_uart.ptr - modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses; - DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; - DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; - DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; - DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; - DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; - DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; - DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; - DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; - DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; - DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; - DMA_Init(INTMODULE_DMA_STREAM, &DMA_InitStructure); - - DMA_Cmd(INTMODULE_DMA_STREAM, ENABLE); - USART_DMACmd(INTMODULE_USART, USART_DMAReq_Tx, ENABLE); - } -} - -extern "C" void INTMODULE_TIMER_IRQHandler() -{ - DEBUG_INTERRUPT(INT_TIM1CC); - DEBUG_TIMER_SAMPLE(debugTimerIntPulses); - DEBUG_TIMER_START(debugTimerIntPulsesDuration); - - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // clear flag - setupPulses(INTERNAL_MODULE); - intmoduleSendNextFrame(); - - DEBUG_TIMER_STOP(debugTimerIntPulsesDuration); -} diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index d9ac3b578..a2fbe90e2 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -58,7 +58,7 @@ uint32_t Peri1_frequency, Peri2_frequency; GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj; TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; RCC_TypeDef rcc; -DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6; +DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; DMA_TypeDef dma2; USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; SysTick_Type systick; @@ -145,7 +145,7 @@ void simuInit() simuSetSwitch(i, 0); simuSetKey(i, false); // a little dirty, but setting keys that don't exist is perfectly OK here } - for (int i=0; i < (NUM_STICKS+NUM_AUX_TRIMS)*2; i++) + for (int i = 0; i < 2*NUM_TRIMS; i++) simuSetTrim(i, false); #if defined(ROTARY_ENCODERS) || defined(ROTARY_ENCODER_NAVIGATION) @@ -217,11 +217,19 @@ void simuSetKey(uint8_t key, bool state) KEY_CASE(KEY_RADIO, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT) KEY_CASE(KEY_MODEL, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP) KEY_CASE(KEY_EXIT, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN) +#elif defined(PCBXLITE) + KEY_CASE(KEY_ENTER, KEYS_GPIO_REG_ENTER, KEYS_GPIO_PIN_ENTER) + KEY_CASE(KEY_RIGHT, KEYS_GPIO_REG_RIGHT, KEYS_GPIO_PIN_RIGHT) + KEY_CASE(KEY_LEFT, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT) + KEY_CASE(KEY_UP, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP) + KEY_CASE(KEY_DOWN, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN) #elif defined(PCBTARANIS) KEY_CASE(KEY_ENTER, KEYS_GPIO_REG_ENTER, KEYS_GPIO_PIN_ENTER) KEY_CASE(KEY_PAGE, KEYS_GPIO_REG_PAGE, KEYS_GPIO_PIN_PAGE) + #if defined(KEYS_GPIO_REG_MINUS) KEY_CASE(KEY_MINUS, KEYS_GPIO_REG_MINUS, KEYS_GPIO_PIN_MINUS) KEY_CASE(KEY_PLUS, KEYS_GPIO_REG_PLUS, KEYS_GPIO_PIN_PLUS) + #endif #else KEY_CASE(KEY_RIGHT, KEYS_GPIO_REG_RIGHT, KEYS_GPIO_PIN_RIGHT) KEY_CASE(KEY_LEFT, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT) @@ -247,10 +255,12 @@ void simuSetTrim(uint8_t trim, bool state) TRIM_CASE(1, TRIMS_GPIO_REG_LHR, TRIMS_GPIO_PIN_LHR) TRIM_CASE(2, TRIMS_GPIO_REG_LVD, TRIMS_GPIO_PIN_LVD) TRIM_CASE(3, TRIMS_GPIO_REG_LVU, TRIMS_GPIO_PIN_LVU) + #if defined(TRIMS_GPIO_REG_RVD) TRIM_CASE(4, TRIMS_GPIO_REG_RVD, TRIMS_GPIO_PIN_RVD) TRIM_CASE(5, TRIMS_GPIO_REG_RVU, TRIMS_GPIO_PIN_RVU) TRIM_CASE(6, TRIMS_GPIO_REG_RHL, TRIMS_GPIO_PIN_RHL) TRIM_CASE(7, TRIMS_GPIO_REG_RHR, TRIMS_GPIO_PIN_RHR) + #endif #if defined(PCBHORUS) TRIM_CASE(8, TRIMS_GPIO_REG_LSD, TRIMS_GPIO_PIN_LSD) TRIM_CASE(9, TRIMS_GPIO_REG_LSU, TRIMS_GPIO_PIN_LSU) @@ -267,20 +277,24 @@ void simuSetSwitch(uint8_t swtch, int8_t state) switch (swtch) { #if defined(PCBTARANIS) + #if defined(SWITCHES_GPIO_REG_A_L) SWITCH_3_CASE(0, SWITCHES_GPIO_REG_A_L, SWITCHES_GPIO_REG_A_H, SWITCHES_GPIO_PIN_A_L, SWITCHES_GPIO_PIN_A_H) SWITCH_3_CASE(1, SWITCHES_GPIO_REG_B_L, SWITCHES_GPIO_REG_B_H, SWITCHES_GPIO_PIN_B_L, SWITCHES_GPIO_PIN_B_H) + #endif + #if defined(SWITCHES_GPIO_REG_C_L) SWITCH_3_CASE(2, SWITCHES_GPIO_REG_C_L, SWITCHES_GPIO_REG_C_H, SWITCHES_GPIO_PIN_C_L, SWITCHES_GPIO_PIN_C_H) SWITCH_3_CASE(3, SWITCHES_GPIO_REG_D_L, SWITCHES_GPIO_REG_D_H, SWITCHES_GPIO_PIN_D_L, SWITCHES_GPIO_PIN_D_H) + #endif #if defined(PCBX7) SWITCH_CASE (4, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F) SWITCH_CASE (5, SWITCHES_GPIO_REG_H, SWITCHES_GPIO_PIN_H) - #else + #elif !defined(PCBXLITE) SWITCH_3_CASE(4, SWITCHES_GPIO_REG_E_L, SWITCHES_GPIO_REG_E_H, SWITCHES_GPIO_PIN_E_L, SWITCHES_GPIO_PIN_E_H) SWITCH_CASE (5, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F) SWITCH_3_CASE(6, SWITCHES_GPIO_REG_G_L, SWITCHES_GPIO_REG_G_H, SWITCHES_GPIO_PIN_G_L, SWITCHES_GPIO_PIN_G_H) SWITCH_CASE (7, SWITCHES_GPIO_REG_H, SWITCHES_GPIO_PIN_H) #endif - #if defined(PCBX9E) + #if defined(SWITCHES_GPIO_REG_I_L) SWITCH_3_CASE(8, SWITCHES_GPIO_REG_I_L, SWITCHES_GPIO_REG_I_H, SWITCHES_GPIO_PIN_I_L, SWITCHES_GPIO_PIN_I_H) SWITCH_3_CASE(9, SWITCHES_GPIO_REG_J_L, SWITCHES_GPIO_REG_J_H, SWITCHES_GPIO_PIN_J_L, SWITCHES_GPIO_PIN_J_H) SWITCH_3_CASE(10, SWITCHES_GPIO_REG_K_L, SWITCHES_GPIO_REG_K_H, SWITCHES_GPIO_PIN_K_L, SWITCHES_GPIO_PIN_K_H) diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index d1edfe084..7e8141300 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -92,7 +92,7 @@ extern GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpio extern TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; extern USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; extern RCC_TypeDef rcc; -extern DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6; +extern DMA_Stream_TypeDef dma1_stream2, dma1_stream5, dma1_stream7, dma2_stream1, dma2_stream2, dma2_stream5, dma2_stream6, dma2_stream7; extern DMA_TypeDef dma2; extern SysTick_Type systick; #undef SysTick @@ -154,6 +154,7 @@ extern SysTick_Type systick; #undef DMA2_Stream2 #undef DMA2_Stream5 #undef DMA2_Stream6 +#undef DMA2_Stream7 #define DMA1_Stream2 (&dma1_stream2) #define DMA1_Stream5 (&dma1_stream5) #define DMA1_Stream7 (&dma1_stream7) @@ -161,6 +162,7 @@ extern SysTick_Type systick; #define DMA2_Stream2 (&dma2_stream2) #define DMA2_Stream5 (&dma2_stream5) #define DMA2_Stream6 (&dma2_stream6) +#define DMA2_Stream7 (&dma2_stream7) #undef DMA2 #define DMA2 (&dma2) #elif defined(PCBSKY9X) diff --git a/radio/src/targets/sky9x/CMakeLists.txt b/radio/src/targets/sky9x/CMakeLists.txt index 068e19bb8..119c08b09 100644 --- a/radio/src/targets/sky9x/CMakeLists.txt +++ b/radio/src/targets/sky9x/CMakeLists.txt @@ -13,7 +13,10 @@ if(PCB STREQUAL 9XRPRO) add_definitions(-Dat91sam3s8 -DREVX) set(FLAVOUR 9xrpro) set(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld) - set(TARGET_SRC ${TARGET_SRC} rtc_driver.cpp) + set(TARGET_SRC + ${TARGET_SRC} + rtc_driver.cpp + ) set(OPENRC_BOOTLOADER bootflash8.lbm) set(CPU_TYPE_FULL ATSAM3S8C) # for size report elseif(PCB STREQUAL AR9X) @@ -21,7 +24,11 @@ elseif(PCB STREQUAL AR9X) set(FLAVOUR ar9x) include_directories(${THIRDPARTY_DIR}/xdk-asf-3.31.0/sam/drivers/twi) set(SRC ${SRC} ${THIRDPARTY_DIR}/xdk-asf-3.31.0/sam/drivers/twi/twi.c) - set(TARGET_SRC ${TARGET_SRC} i2c_driver.cpp rtc_ds3231_driver.cpp) + set(TARGET_SRC + ${TARGET_SRC} + i2c_driver.cpp + rtc_ds3231_driver.cpp + ) set(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld) set(OPENRC_BOOTLOADER bootflash8.lbm) set(CPU_TYPE_FULL ATSAM3S8C) # for size report @@ -29,7 +36,12 @@ else() set(FLAVOUR sky9x) set(PCBREV "REVC" CACHE STRING "PCB Revision (REVA/REVB/REVC)") set_property(CACHE PCBREV PROPERTY STRINGS "REVA" "REVB" "REVC") - set(TARGET_SRC ${TARGET_SRC} coproc_driver.cpp rotenc_driver.cpp rtc_driver.cpp) + set(TARGET_SRC + ${TARGET_SRC} + coproc_driver.cpp + rotenc_driver.cpp + rtc_driver.cpp + ) set(OPENRC_BOOTLOADER bootflash4.lbm) if(PCBREV STREQUAL REVA) add_definitions(-DDREVA) @@ -108,6 +120,7 @@ set(TARGET_SRC massstorage.cpp serial2_driver.cpp audio_driver.cpp + trainer_driver.cpp ) set(SRC diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index 32500ff69..0b08cff1e 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -361,6 +361,7 @@ extern int8_t Coproc_temp; extern int8_t Coproc_maxtemp; // Haptic driver +#define HAPTIC_PWM void hapticOff(void); void hapticOn(uint32_t pwmPercent); diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 98dc5de2f..1a7b64209 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -73,9 +73,42 @@ elseif(PCB STREQUAL X7) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) +elseif(PCB STREQUAL XLITE) + set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(HAPTIC YES) + set(LUA_EXPORT lua_export_xlite) + set(FLAVOUR xlite) + add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME) + add_definitions(-DEEPROM_VARIANT=0x4000) + add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) + set(GUI_DIR 128x64) + set(BITMAPS_TARGET 9x_bitmaps) + set(FONTS_TARGET 9x_fonts_1bit) + set(LCD_DRIVER lcd_driver_spi.cpp) endif() -if(PCB STREQUAL X9E OR PCB STREQUAL X7) +if(PCB STREQUAL XLITE) + set(TARGET_SRC + ${TARGET_SRC} + ../common/arm/stm32/intmodule_serial_driver.cpp + ) +else() + set(TARGET_SRC + ${TARGET_SRC} + intmodule_pulses_driver.cpp + trainer_driver.cpp + ) + add_definitions(-DSBUS) + set(PULSES_SRC + ${PULSES_SRC} + ../sbus.cpp + ) +endif() + +if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL XLITE) add_definitions(-DBLUETOOTH) set(TARGET_SRC ${TARGET_SRC} @@ -97,7 +130,7 @@ if(SPLASH STREQUAL OFF) message(FATAL_ERROR "Option SPLASH=OFF not supported on Taranis") endif() -add_definitions(-DPCBTARANIS -DPPM_PIN_TIMER) +add_definitions(-DPCBTARANIS) add_definitions(-DAUDIO -DVOICE -DRTCLOCK) set(GUI_SRC ${GUI_SRC} @@ -114,7 +147,7 @@ set(GUI_SRC ${GUI_SRC} ../screenshot.cpp ) -if(PCB STREQUAL X7) +if(PCB STREQUAL X7 OR PCB STREQUAL XLITE) set(LED_DRIVER led_driver.cpp) endif() diff --git a/radio/src/targets/taranis/backlight_driver.cpp b/radio/src/targets/taranis/backlight_driver.cpp index 322a674d6..97b225ac9 100644 --- a/radio/src/targets/taranis/backlight_driver.cpp +++ b/radio/src/targets/taranis/backlight_driver.cpp @@ -97,7 +97,7 @@ uint8_t isBacklightEnabled() { return (BACKLIGHT_TIMER->CCR4 != 0 || BACKLIGHT_TIMER->CCR2 != 0); } -#elif defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) void backlightInit() { GPIO_InitTypeDef GPIO_InitStructure; @@ -108,28 +108,35 @@ void backlightInit() GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(BACKLIGHT_GPIO, &GPIO_InitStructure); GPIO_PinAFConfig(BACKLIGHT_GPIO, BACKLIGHT_GPIO_PinSource, BACKLIGHT_GPIO_AF); +#if defined(BACKLIGHT_BDTR) // TODO perhaps it can be always done + BACKLIGHT_TIMER->BDTR = BACKLIGHT_BDTR; // Enable outputs +#endif BACKLIGHT_TIMER->ARR = 100; BACKLIGHT_TIMER->PSC = BACKLIGHT_TIMER_FREQ / 50000 - 1; // 20us * 100 = 2ms => 500Hz - BACKLIGHT_TIMER->CCMR1 = TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2; // PWM - BACKLIGHT_TIMER->CCER = TIM_CCER_CC2E; - BACKLIGHT_TIMER->CCR2 = 100; + #if defined(BACKLIGHT_CCMR1) + BACKLIGHT_TIMER->CCMR1 = BACKLIGHT_CCMR1; + #elif defined(BACKLIGHT_CCMR2) + BACKLIGHT_TIMER->CCMR2 = BACKLIGHT_CCMR2; + #endif + BACKLIGHT_TIMER->CCER = BACKLIGHT_CCER; + BACKLIGHT_COUNTER_REGISTER = 100; BACKLIGHT_TIMER->EGR = 0; BACKLIGHT_TIMER->CR1 = TIM_CR1_CEN; // Counter enable } void backlightEnable(uint8_t level) { - BACKLIGHT_TIMER->CCR2 = 100 - level; + BACKLIGHT_COUNTER_REGISTER = 100 - level; } void backlightDisable() { - BACKLIGHT_TIMER->CCR2 = 0; + BACKLIGHT_COUNTER_REGISTER = 0; } uint8_t isBacklightEnabled() { - return BACKLIGHT_TIMER->CCR2 != 0; + return BACKLIGHT_COUNTER_REGISTER != 0; } #else void backlightInit() diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 1ef74ee8d..22f905460 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -101,21 +101,21 @@ extern "C" void INTERRUPT_xMS_IRQHandler() } #endif -#if (defined(PCBX9E) || defined(PCBX7)) && !defined(SIMU) -#define PWR_PRESS_DURATION_MIN 100 // 1s -#define PWR_PRESS_DURATION_MAX 500 // 5s +#if defined(PWR_PRESS_BUTTON) && !defined(SIMU) + #define PWR_PRESS_DURATION_MIN 100 // 1s + #define PWR_PRESS_DURATION_MAX 500 // 5s #endif + #if (defined(PCBX9E) && !defined(SIMU)) const pm_uchar bmp_startup[] PROGMEM = { #include "startup.lbm" }; - const pm_uchar bmp_lock[] PROGMEM = { #include "lock.lbm" }; -#endif // defined(PCBX9E) && !defined(SIMU) +#endif -#if defined(PCBX7) +#if defined(SPORT_UPDATE_PWR_GPIO) void sportUpdateInit() { GPIO_InitTypeDef GPIO_InitStructure; @@ -129,7 +129,7 @@ void sportUpdateInit() void sportUpdatePowerOn() { - if (IS_PCBREV_40()) + if (HAS_SPORT_UPDATE_CONNECTOR()) GPIO_SetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); else EXTERNAL_MODULE_ON(); @@ -137,7 +137,7 @@ void sportUpdatePowerOn() void sportUpdatePowerOff() { - if (IS_PCBREV_40()) + if (HAS_SPORT_UPDATE_CONNECTOR()) GPIO_ResetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); else EXTERNAL_MODULE_OFF(); @@ -158,11 +158,11 @@ void boardInit() HEARTBEAT_RCC_AHB1Periph | BT_RCC_AHB1Periph, ENABLE); RCC_APB1PeriphClockCmd(LCD_RCC_APB1Periph | AUDIO_RCC_APB1Periph | - BACKLIGHT_RCC_APB1Periph | INTERRUPT_xMS_RCC_APB1Periph | + BACKLIGHT_RCC_APB1Periph | HAPTIC_RCC_APB1Periph | INTERRUPT_xMS_RCC_APB1Periph | TIMER_2MHz_RCC_APB1Periph | I2C_RCC_APB1Periph | SD_RCC_APB1Periph | TRAINER_RCC_APB1Periph | TELEMETRY_RCC_APB1Periph | SERIAL_RCC_APB1Periph | - BT_RCC_APB1Periph, ENABLE); + INTMODULE_RCC_APB1Periph | BT_RCC_APB1Periph, ENABLE); RCC_APB2PeriphClockCmd(BACKLIGHT_RCC_APB2Periph | ADC_RCC_APB2Periph | HAPTIC_RCC_APB2Periph | INTMODULE_RCC_APB2Periph | @@ -174,7 +174,7 @@ void boardInit() pwrInit(); #endif -#if defined(PCBX7) +#if defined(STATUS_LEDS) ledInit(); ledGreen(); #endif @@ -190,7 +190,7 @@ void boardInit() i2cInit(); usbInit(); -#if defined(DEBUG) && !defined(PCBX7) +#if defined(DEBUG) && defined(SERIAL_GPIO) serial2Init(0, 0); // default serial mode (None if DEBUG not defined) TRACE("\nTaranis board started :)"); #endif @@ -207,7 +207,7 @@ void boardInit() DBGMCU_APB1PeriphConfig(DBGMCU_IWDG_STOP|DBGMCU_TIM1_STOP|DBGMCU_TIM2_STOP|DBGMCU_TIM3_STOP|DBGMCU_TIM6_STOP|DBGMCU_TIM8_STOP|DBGMCU_TIM10_STOP|DBGMCU_TIM13_STOP|DBGMCU_TIM14_STOP, ENABLE); #endif -#if defined(PCBX9E) || defined(PCBX7) +#if defined(PWR_PRESS_BUTTON) if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { lcdClear(); #if defined(PCBX9E) @@ -259,35 +259,32 @@ void boardInit() pwrInit(); backlightInit(); } -#if defined(PCBX9E) +#if defined(TOPLCD_GPIO) toplcdInit(); #endif -#else +#else // defined(PWR_PRESS_BUTTON) backlightInit(); #endif -#if defined(PCBX7) - if (IS_PCBREV_40()) { + if (HAS_SPORT_UPDATE_CONNECTOR()) { sportUpdateInit(); } -#endif - #endif // !defined(SIMU) } void boardOff() { -#if defined(PCBX7) +#if defined(STATUS_LEDS) ledOff(); #endif BACKLIGHT_DISABLE(); -#if defined(PCBX9E) +#if defined(TOPLCD_GPIO) toplcdOff(); #endif -#if defined(PCBX9E) || defined(PCBX7) +#if defined(PWR_PRESS_BUTTON) while (pwrPressed()) { wdt_reset(); } @@ -317,7 +314,7 @@ void checkTrainerSettings() case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: stop_sbus_on_heartbeat_capture() ; break; -#if !defined(PCBX7) && !defined(PCBX9E) +#if defined(TRAINER_BATTERY_COMPARTMENT) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: serial2Stop(); #endif @@ -329,12 +326,12 @@ void checkTrainerSettings() init_trainer_ppm(); break; case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: - init_cppm_on_heartbeat_capture() ; + init_cppm_on_heartbeat_capture(); break; case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: - init_sbus_on_heartbeat_capture() ; + init_sbus_on_heartbeat_capture(); break; -#if !defined(PCBX7) && !defined(PCBX9E) +#if defined(TRAINER_BATTERY_COMPARTMENT) case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) { serial2SbusInit(); diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 4b848911e..7b79a49df 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -89,38 +89,28 @@ extern "C" { } #endif -#define FLASHSIZE 0x80000 -#define BOOTLOADER_SIZE 0x8000 -#define FIRMWARE_ADDRESS 0x08000000 +#define FLASHSIZE 0x80000 +#define BOOTLOADER_SIZE 0x8000 +#define FIRMWARE_ADDRESS 0x08000000 -#define LUA_MEM_MAX (0) // max allowed memory usage for complete Lua (in bytes), 0 means unlimited +#define LUA_MEM_MAX (0) // max allowed memory usage for complete Lua (in bytes), 0 means unlimited #if defined(STM32F4) - #define PERI1_FREQUENCY 42000000 - #define PERI2_FREQUENCY 84000000 + #define PERI1_FREQUENCY 42000000 + #define PERI2_FREQUENCY 84000000 #else - #define PERI1_FREQUENCY 30000000 - #define PERI2_FREQUENCY 60000000 + #define PERI1_FREQUENCY 30000000 + #define PERI2_FREQUENCY 60000000 #endif -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#define TIMER_MULT_APB1 2 +#define TIMER_MULT_APB2 2 #define strcpy_P strcpy #define strcat_P strcat extern uint16_t sessionTimer; -#define SLAVE_MODE() (g_model.trainerMode == TRAINER_MODE_SLAVE) - -#if defined(PCBX9E) -#define TRAINER_CONNECTED() (true) -#elif defined(PCBX7) -#define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_SET) -#else -#define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_RESET) -#endif - // Board driver void boardInit(void); void boardOff(void); @@ -138,35 +128,35 @@ void delay_ms(uint32_t ms); #endif // CPU Unique ID -#define LEN_CPU_UID (3*8+2) +#define LEN_CPU_UID (3*8+2) void getCPUUniqueID(char * s); // SD driver -#define BLOCK_SIZE 512 /* Block Size in Bytes */ +#define BLOCK_SIZE 512 /* Block Size in Bytes */ #if !defined(SIMU) || defined(SIMU_DISKIO) uint32_t sdIsHC(void); uint32_t sdGetSpeed(void); -#define SD_IS_HC() (sdIsHC()) -#define SD_GET_SPEED() (sdGetSpeed()) -#define SD_GET_FREE_BLOCKNR() (sdGetFreeSectors()) +#define SD_IS_HC() (sdIsHC()) +#define SD_GET_SPEED() (sdGetSpeed()) +#define SD_GET_FREE_BLOCKNR() (sdGetFreeSectors()) #else -#define SD_IS_HC() (0) -#define SD_GET_SPEED() (0) +#define SD_IS_HC() (0) +#define SD_GET_SPEED() (0) #endif -#define __disk_read disk_read -#define __disk_write disk_write +#define __disk_read disk_read +#define __disk_write disk_write #if defined(SIMU) #define sdInit() #define sdMount() #define sdDone() -#define SD_CARD_PRESENT() true +#define SD_CARD_PRESENT() true #else void sdInit(void); void sdMount(void); void sdDone(void); void sdPoll10ms(void); uint32_t sdMounted(void); -#define SD_CARD_PRESENT() ((SD_GPIO_PRESENT->IDR & SD_GPIO_PIN_PRESENT)==0) +#define SD_CARD_PRESENT() ((SD_GPIO_PRESENT_GPIO->IDR & SD_GPIO_PRESENT_GPIO_PIN) == 0) #endif // Flash Write driver @@ -178,12 +168,17 @@ uint32_t isFirmwareStart(const uint8_t * buffer); uint32_t isBootloaderStart(const uint8_t * buffer); // Pulses driver -#define INTERNAL_MODULE_ON() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) -#define INTERNAL_MODULE_OFF() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) -#define EXTERNAL_MODULE_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) -#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) -#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) -#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) +#define INTERNAL_MODULE_ON() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) +#define INTERNAL_MODULE_OFF() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) +#define EXTERNAL_MODULE_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) +#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) +#define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) +#define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) +#if defined(INTMODULE_USART) + #define IS_UART_MODULE(port) (port == INTERNAL_MODULE) +#else + #define IS_UART_MODULE(port) false +#endif void init_no_pulses(uint32_t port); void disable_no_pulses(uint32_t port); void init_ppm( uint32_t module_index ); @@ -198,14 +193,40 @@ void init_sbusOut(uint32_t module_index); void disable_sbusOut(uint32_t module_index); // Trainer driver -void init_trainer_ppm(void); -void stop_trainer_ppm(void); -void init_trainer_capture(void); -void stop_trainer_capture(void); -void init_cppm_on_heartbeat_capture(void); -void stop_cppm_on_heartbeat_capture(void); -void init_sbus_on_heartbeat_capture(void); -void stop_sbus_on_heartbeat_capture(void); +#define SLAVE_MODE() (g_model.trainerMode == TRAINER_MODE_SLAVE) +#if defined(PCBX9E) + #define TRAINER_CONNECTED() (true) +#elif defined(PCBX7) + #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_SET) +#elif defined(PCBXLITE) + #define TRAINER_CONNECTED() false // there is no Trainer jack on Taranis X-Lite +#else + #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_RESET) +#endif +#if defined(TRAINER_GPIO) + void init_trainer_ppm(void); + void stop_trainer_ppm(void); + void init_trainer_capture(void); + void stop_trainer_capture(void); +#else + #define init_trainer_ppm() + #define stop_trainer_ppm() + #define init_trainer_capture() + #define stop_trainer_capture() +#endif +#if defined(TRAINER_MODULE_HEARTBEAT) + void init_cppm_on_heartbeat_capture(void); + void stop_cppm_on_heartbeat_capture(void); + void init_sbus_on_heartbeat_capture(void); + void stop_sbus_on_heartbeat_capture(void); +#else + #define init_cppm_on_heartbeat_capture() + #define stop_cppm_on_heartbeat_capture() + #define init_sbus_on_heartbeat_capture() + #define stop_sbus_on_heartbeat_capture() +#endif + +// SBUS int sbusGetByte(uint8_t * byte); // Keys driver @@ -214,9 +235,16 @@ enum EnumKeys KEY_MENU, KEY_EXIT, KEY_ENTER, +#if defined(PCBXLITE) + KEY_DOWN, + KEY_UP, + KEY_RIGHT, + KEY_LEFT, +#else KEY_PAGE, KEY_PLUS, KEY_MINUS, +#endif TRM_BASE, TRM_LH_DWN = TRM_BASE, @@ -233,15 +261,18 @@ enum EnumKeys }; #if defined(PCBX9E) && !defined(SIMU) - #define KEY_UP KEY_MINUS - #define KEY_DOWN KEY_PLUS - #define KEY_RIGHT KEY_PLUS - #define KEY_LEFT KEY_MINUS + #define KEY_UP KEY_MINUS + #define KEY_DOWN KEY_PLUS + #define KEY_RIGHT KEY_PLUS + #define KEY_LEFT KEY_MINUS +#elif defined(PCBXLITE) + #define KEY_PLUS KEY_RIGHT + #define KEY_MINUS KEY_LEFT #else - #define KEY_UP KEY_PLUS - #define KEY_DOWN KEY_MINUS - #define KEY_RIGHT KEY_MINUS - #define KEY_LEFT KEY_PLUS + #define KEY_UP KEY_PLUS + #define KEY_DOWN KEY_MINUS + #define KEY_RIGHT KEY_MINUS + #define KEY_LEFT KEY_PLUS #endif enum EnumSwitches @@ -255,7 +286,7 @@ enum EnumSwitches SW_SG, SW_SH }; -#define IS_3POS(x) ((x) != SW_SF && (x) != SW_SH) +#define IS_3POS(x) ((x) != SW_SF && (x) != SW_SH) enum EnumSwitchesPositions { @@ -265,28 +296,34 @@ enum EnumSwitchesPositions SW_SB0, SW_SB1, SW_SB2, +#if !defined(PCBXLITE) SW_SC0, SW_SC1, SW_SC2, SW_SD0, SW_SD1, SW_SD2, -#if !defined(PCBX7) +#endif +#if !defined(PCBX7) && !defined(PCBXLITE) SW_SE0, SW_SE1, SW_SE2, #endif +#if !defined(PCBXLITE) SW_SF0, SW_SF1, SW_SF2, -#if !defined(PCBX7) +#endif +#if !defined(PCBX7) && !defined(PCBXLITE) SW_SG0, SW_SG1, SW_SG2, #endif +#if !defined(PCBXLITE) SW_SH0, SW_SH1, SW_SH2, +#endif #if defined(PCBX9E) SW_SI0, SW_SI1, @@ -320,20 +357,22 @@ enum EnumSwitchesPositions SW_SR2, #endif }; -#if defined(PCBX7) - #define NUM_SWITCHES 6 +#if defined(PCBXLITE) + #define NUM_SWITCHES 2 +#elif defined(PCBX7) + #define NUM_SWITCHES 6 #elif defined(PCBX9E) - #define NUM_SWITCHES 18 // yes, it's a lot! + #define NUM_SWITCHES 18 // yes, it's a lot! #else - #define NUM_SWITCHES 8 + #define NUM_SWITCHES 8 #endif void keysInit(void); uint8_t keyState(uint8_t index); uint32_t switchState(uint8_t index); uint32_t readKeys(void); uint32_t readTrims(void); -#define TRIMS_PRESSED() (readTrims()) -#define KEYS_PRESSED() (readKeys()) +#define TRIMS_PRESSED() (readTrims()) +#define KEYS_PRESSED() (readKeys()) #if defined(PCBX9E) || defined(PCBX7) // Rotary Encoder driver @@ -342,19 +381,19 @@ void checkRotaryEncoder(void); #endif // WDT driver -#define WDTO_500MS 500 +#define WDTO_500MS 500 #if defined(WATCHDOG_DISABLED) || defined(SIMU) #define wdt_enable(x) #define wdt_reset() #else - #define wdt_enable(x) watchdogInit(x) - #define wdt_reset() IWDG->KR = 0xAAAA + #define wdt_enable(x) watchdogInit(x) + #define wdt_reset() IWDG->KR = 0xAAAA #endif #define wdt_disable() void watchdogInit(unsigned int duration); -#define WAS_RESET_BY_SOFTWARE() (RCC->CSR & RCC_CSR_SFTRSTF) -#define WAS_RESET_BY_WATCHDOG() (RCC->CSR & (RCC_CSR_WDGRSTF | RCC_CSR_WWDGRSTF)) -#define WAS_RESET_BY_WATCHDOG_OR_SOFTWARE() (RCC->CSR & (RCC_CSR_WDGRSTF | RCC_CSR_WWDGRSTF | RCC_CSR_SFTRSTF)) +#define WAS_RESET_BY_SOFTWARE() (RCC->CSR & RCC_CSR_SFTRSTF) +#define WAS_RESET_BY_WATCHDOG() (RCC->CSR & (RCC_CSR_WDGRSTF | RCC_CSR_WWDGRSTF)) +#define WAS_RESET_BY_WATCHDOG_OR_SOFTWARE() (RCC->CSR & (RCC_CSR_WDGRSTF | RCC_CSR_WWDGRSTF | RCC_CSR_SFTRSTF)) // ADC driver enum Analogs { @@ -365,7 +404,7 @@ enum Analogs { POT_FIRST, POT1 = POT_FIRST, POT2, -#if defined(PCBX7) +#if defined(PCBX7) || defined(PCBXLITE) POT_LAST = POT2, #elif defined(PCBX9E) POT3, @@ -385,9 +424,9 @@ enum Analogs { NUM_ANALOGS }; -#define NUM_POTS (POT_LAST-POT_FIRST+1) -#define NUM_XPOTS NUM_POTS -#define NUM_SLIDERS (TX_VOLTAGE-POT_LAST-1) +#define NUM_POTS (POT_LAST-POT_FIRST+1) +#define NUM_XPOTS NUM_POTS +#define NUM_SLIDERS (TX_VOLTAGE-POT_LAST-1) enum CalibratedAnalogs { CALIBRATED_STICK1, @@ -402,21 +441,21 @@ enum CalibratedAnalogs { }; #if defined(PCBX9D) - #define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT2) // POT3 is only defined in software + #define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT2) // POT3 is only defined in software #else - #define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT_LAST) + #define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT_LAST) #endif -#define IS_SLIDER(x) ((x)>POT_LAST && (x)POT_LAST && (x) telemetryFifo; diff --git a/radio/src/targets/taranis/diskio.cpp b/radio/src/targets/taranis/diskio.cpp index 8043f85a8..df27815cc 100644 --- a/radio/src/targets/taranis/diskio.cpp +++ b/radio/src/targets/taranis/diskio.cpp @@ -308,12 +308,12 @@ void power_on (void) card_power(1); - GPIO_InitStructure.GPIO_Pin = SD_GPIO_PIN_PRESENT; + GPIO_InitStructure.GPIO_Pin = SD_GPIO_PRESENT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(SD_GPIO_PRESENT, &GPIO_InitStructure); + GPIO_Init(SD_GPIO_PRESENT_GPIO, &GPIO_InitStructure); for (uint32_t Timer = 25000; Timer>0;Timer--); /* Wait for 250ms */ diff --git a/radio/src/targets/taranis/extmodule_driver.cpp b/radio/src/targets/taranis/extmodule_driver.cpp index 431004060..1d4eeec80 100644 --- a/radio/src/targets/taranis/extmodule_driver.cpp +++ b/radio/src/targets/taranis/extmodule_driver.cpp @@ -42,16 +42,16 @@ void extmoduleNoneStart() EXTERNAL_MODULE_OFF(); } - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, 0); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz @@ -70,15 +70,15 @@ void extmodulePpmStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz @@ -104,15 +104,15 @@ void extmodulePxxStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) @@ -139,15 +139,15 @@ void extmoduleDsm2Start() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, EXTMODULE_PPM_GPIO_AF); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz @@ -174,16 +174,16 @@ void extmoduleCrossfireStart() { EXTERNAL_MODULE_ON(); - GPIO_PinAFConfig(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PinSource, 0); + GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PPM_GPIO_PIN; + GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high + GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 7c3857ab8..7aa0b06cd 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -22,29 +22,46 @@ #define _HAL_H_ // Keys -#if defined(PCBX7) - #define KEYS_GPIO_REG_PAGE GPIOD->IDR - #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD->IDR - #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD->IDR - #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 -#else - #define KEYS_GPIO_REG_MENU GPIOD->IDR - #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD->IDR - #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 - #define KEYS_GPIO_REG_PAGE GPIOD->IDR - #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 -#endif - #if defined(PCBX9E) + #define KEYS_GPIO_REG_MENU GPIOD->IDR + #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 + #define KEYS_GPIO_REG_PAGE GPIOD->IDR + #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 #define KEYS_GPIO_REG_ENTER GPIOF->IDR #define KEYS_GPIO_PIN_ENTER GPIO_Pin_0 // PF.00 +#elif defined(PCBXLITE) + #define KEYS_GPIO_REG_MENU GPIOE->IDR + #define KEYS_GPIO_PIN_MENU GPIO_Pin_8 // PE.08 + #define KEYS_GPIO_REG_EXIT GPIOE->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_7 // PE.07 + #define KEYS_GPIO_REG_ENTER GPIOE->IDR + #define KEYS_GPIO_PIN_ENTER GPIO_Pin_11 // PE.11 + #define KEYS_GPIO_REG_UP GPIOE->IDR + #define KEYS_GPIO_PIN_UP GPIO_Pin_10 // PE.10 + #define KEYS_GPIO_REG_DOWN GPIOE->IDR + #define KEYS_GPIO_PIN_DOWN GPIO_Pin_14 // PE.14 + #define KEYS_GPIO_REG_LEFT GPIOE->IDR + #define KEYS_GPIO_PIN_LEFT GPIO_Pin_12 // PE.12 + #define KEYS_GPIO_REG_RIGHT GPIOE->IDR + #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_13 // PE.13 #elif defined(PCBX7) + #define KEYS_GPIO_REG_PAGE GPIOD->IDR + #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 + #define KEYS_GPIO_REG_MENU GPIOD->IDR + #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 #define KEYS_GPIO_REG_ENTER GPIOE->IDR #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10 #else + #define KEYS_GPIO_REG_MENU GPIOD->IDR + #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 + #define KEYS_GPIO_REG_PAGE GPIOD->IDR + #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 #define KEYS_GPIO_REG_PLUS GPIOE->IDR #define KEYS_GPIO_PIN_PLUS GPIO_Pin_10 // PE.10 #define KEYS_GPIO_REG_MINUS GPIOE->IDR @@ -92,6 +109,15 @@ #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02 #define TRIMS_GPIO_REG_RHR GPIOC->IDR #define TRIMS_GPIO_PIN_RHR GPIO_Pin_13 // PC.13 +#elif defined(PCBXLITE) + #define TRIMS_GPIO_REG_LHL GPIOC->IDR + #define TRIMS_GPIO_PIN_LHL GPIO_Pin_4 // PC.04 + #define TRIMS_GPIO_REG_LHR GPIOC->IDR + #define TRIMS_GPIO_PIN_LHR GPIO_Pin_5 // PC.05 + #define TRIMS_GPIO_REG_LVD GPIOB->IDR + #define TRIMS_GPIO_PIN_LVD GPIO_Pin_0 // PB.00 + #define TRIMS_GPIO_REG_LVU GPIOB->IDR + #define TRIMS_GPIO_PIN_LVU GPIO_Pin_1 // PB.01 #elif defined(PCBX7) #define TRIMS_GPIO_REG_LHL GPIOD->IDR #define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15 @@ -134,6 +160,11 @@ #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_10 // PD.10 #define SWITCHES_GPIO_REG_A_L GPIOD->IDR #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_14 // PD.14 +#elif defined(PCBXLITE) + #define SWITCHES_GPIO_REG_A_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_1 // PE.01 + #define SWITCHES_GPIO_REG_A_H GPIOE->IDR + #define SWITCHES_GPIO_PIN_A_H GPIO_Pin_0 // PE.00 #elif defined(PCBX7) #define SWITCHES_GPIO_REG_A_L GPIOE->IDR #define SWITCHES_GPIO_PIN_A_L GPIO_Pin_7 // PE.07 @@ -151,6 +182,11 @@ #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_11 // PG.11 #define SWITCHES_GPIO_REG_B_L GPIOG->IDR #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_10 // PG.10 +#elif defined(PCBXLITE) + #define SWITCHES_GPIO_REG_B_H GPIOE->IDR + #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_2 // PE.02 + #define SWITCHES_GPIO_REG_B_L GPIOE->IDR + #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_3 // PE.03 #elif defined(PCBX7) #define SWITCHES_GPIO_REG_B_L GPIOE->IDR #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_15 // PE.15 @@ -168,6 +204,8 @@ #define SWITCHES_GPIO_PIN_C_H GPIO_Pin_13 // PF.13 #define SWITCHES_GPIO_REG_C_L GPIOF->IDR #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_14 // PF.14 +#elif defined(PCBXLITE) + // no SWC #elif defined(PCBX7) #define SWITCHES_GPIO_REG_C_L GPIOD->IDR #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_11 // PD.11 @@ -190,6 +228,8 @@ #define SWITCHES_GPIO_PIN_D_H GPIO_Pin_7 // PE.07 #define SWITCHES_GPIO_REG_D_L GPIOE->IDR #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_13 // PE.13 +#elif defined(PCBXLITE) + // no SWD #elif defined(PCBX7) #define SWITCHES_GPIO_REG_D_L GPIOE->IDR #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_1 // PE.01 @@ -207,7 +247,9 @@ #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_7 // PE.07 #define SWITCHES_GPIO_REG_E_L GPIOE->IDR #define SWITCHES_GPIO_PIN_E_L GPIO_Pin_13 // PE.13 -#elif !defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) + // no SWE +#else #define SWITCHES_GPIO_REG_E_H GPIOB->IDR #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_3 // PB.03 #define SWITCHES_GPIO_REG_E_L GPIOB->IDR @@ -217,6 +259,8 @@ #if defined(PCBX9E) #define SWITCHES_GPIO_REG_F GPIOE->IDR #define SWITCHES_GPIO_PIN_F GPIO_Pin_11 // PE.11 +#elif defined(PCBXLITE) + // no SWF #elif defined(PCBX7) #define SWITCHES_GPIO_REG_F GPIOE->IDR #define SWITCHES_GPIO_PIN_F GPIO_Pin_14 // PE.14 @@ -230,7 +274,9 @@ #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_3 // PF.03 #define SWITCHES_GPIO_REG_G_L GPIOF->IDR #define SWITCHES_GPIO_PIN_G_L GPIO_Pin_4 // PF.04 -#elif !defined(PCBX7) +#elif defined(PCBX7) || defined(PCBXLITE) + // no SWG +#else #define SWITCHES_GPIO_REG_G_H GPIOE->IDR #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_9 // PE.09 #define SWITCHES_GPIO_REG_G_L GPIOE->IDR @@ -243,6 +289,8 @@ #elif defined(PCBX9DP) #define SWITCHES_GPIO_REG_H GPIOD->IDR #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14 +#elif defined(PCBXLITE) + // no SWH #elif defined(PCBX7) #define SWITCHES_GPIO_REG_H GPIOD->IDR #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14 @@ -310,6 +358,11 @@ #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_RHR) #define KEYS_GPIOD_PINS (KEYS_GPIO_PIN_MENU | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_PAGE | SWITCHES_GPIO_PIN_H) #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_PLUS | KEYS_GPIO_PIN_ENTER | KEYS_GPIO_PIN_MINUS | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_D_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L) +#elif defined(PCBXLITE) + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1) + #define KEYS_GPIOC_PINS (GPIO_Pin_4 | GPIO_Pin_5) + #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14) #elif defined(PCBX7) #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE) #define KEYS_GPIOA_PINS SWITCHES_GPIO_PIN_B_H @@ -326,28 +379,6 @@ #endif // ADC -#if defined(PCBX9E) - #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA2) - #define ADC_RCC_APB2Periph (RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC3) -#else - #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) - #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 -#endif -#define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 -#define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 -#if defined(PCBX7) - #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03 - #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3 -#else - #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03 - #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3 -#endif -#define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 -#define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 #define ADC_MAIN ADC1 #define ADC_DMA DMA2 #define ADC_DMA_SxCR_CHSEL 0 @@ -355,8 +386,17 @@ #define ADC_SET_DMA_FLAGS() ADC_DMA->HIFCR = (DMA_HIFCR_CTCIF4 | DMA_HIFCR_CHTIF4 | DMA_HIFCR_CTEIF4 | DMA_HIFCR_CDMEIF4 | DMA_HIFCR_CFEIF4) #define ADC_TRANSFER_COMPLETE() (ADC_DMA->HISR & DMA_HISR_TCIF4) #define ADC_SAMPTIME 2 // sample time = 28 cycles - #if defined(PCBX9E) + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB2Periph (RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC3) + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03 + #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3 #define ADC_GPIO_PIN_POT1 GPIO_Pin_8 // PF.08 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT3 GPIO_Pin_5 // PC.05 @@ -386,6 +426,16 @@ #define ADC_EXT_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0) #define ADC_EXT_SAMPTIME 3 // sample time = 56 cycles #elif defined(PCBX9DP) + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03 + #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01 @@ -401,7 +451,37 @@ #define ADC_CHANNEL_SLIDER1 ADC_Channel_14 #define ADC_CHANNEL_SLIDER2 ADC_Channel_15 #define ADC_CHANNEL_BATT ADC_Channel_10 +#elif defined(PCBXLITE) + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03 + #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3 + #define ADC_GPIO_PIN_POT1 GPIO_Pin_1 // PC.01 + #define ADC_GPIO_PIN_POT2 GPIO_Pin_2 // PC.02 + #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00 + #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT1) + #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT2 + #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT + #define ADC_CHANNEL_POT1 ADC_Channel_6 + #define ADC_CHANNEL_POT2 ADC_Channel_8 + #define ADC_CHANNEL_BATT ADC_Channel_10 #elif defined(PCBX7) + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03 + #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00 @@ -412,6 +492,16 @@ #define ADC_CHANNEL_POT2 ADC_Channel_8 #define ADC_CHANNEL_BATT ADC_Channel_10 #else + #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1 + #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_2 // PA.02 + #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_3 // PA.03 + #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LH ADC_Channel_2 // ADC1_IN2 + #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04 @@ -429,111 +519,196 @@ #endif // PWR and LED driver -#define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD) -#if defined(PCBX9E) || defined(PCBX7) +#define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE) +#if defined(PCBX9E) || defined(PCBX7) || defined(PCBXLITE) #define PWR_PRESS_BUTTON #endif - -#define PWR_GPIO GPIOD -#define PWR_SWITCH_GPIO_REG PWR_GPIO->IDR -#define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01 -#define PWR_ON_GPIO_PIN GPIO_Pin_0 // PD.00 +#if defined(PCBXLITE) + #define PWR_SWITCH_GPIO GPIOA + #define PWR_SWITCH_GPIO_PIN GPIO_Pin_7 // PA.07 + #define PWR_ON_GPIO GPIOE + #define PWR_ON_GPIO_PIN GPIO_Pin_9 // PE.09 +#else + #define PWR_SWITCH_GPIO GPIOD + #define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01 + #define PWR_ON_GPIO GPIOD + #define PWR_ON_GPIO_PIN GPIO_Pin_0 // PD.00 +#endif #define PWR_ON_GPIO_MODER GPIO_MODER_MODER0 #define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER0_0 -#if defined(PCBX7) -#define LED_GREEN_GPIO GPIOC -#define LED_GREEN_GPIO_PIN GPIO_Pin_4 // PC.04 -#define LED_RED_GPIO GPIOC -#define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05 -#define LED_BLUE_GPIO GPIOB -#define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01 +#if defined(PCBXLITE) + #define STATUS_LEDS + #define LED_GREEN_GPIO GPIOE + #define LED_GREEN_GPIO_PIN GPIO_Pin_5 // PE.05 + #define LED_RED_GPIO GPIOE + #define LED_RED_GPIO_PIN GPIO_Pin_4 // PE.04 + #define LED_BLUE_GPIO GPIOE + #define LED_BLUE_GPIO_PIN GPIO_Pin_6 // PE.06 +#elif defined(PCBX7) + #define STATUS_LEDS + #define LED_GREEN_GPIO GPIOC + #define LED_GREEN_GPIO_PIN GPIO_Pin_4 // PC.04 + #define LED_RED_GPIO GPIOC + #define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05 + #define LED_BLUE_GPIO GPIOB + #define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01 #endif // Internal Module -#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) -#define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 -#if defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) +#if defined(PCBXLITE) + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define INTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM3 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 + #define INTMODULE_PWR_GPIO GPIOD + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_9 // PD.09 + #define INTMODULE_TX_GPIO GPIOB + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 + #define INTMODULE_RX_GPIO GPIOB + #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07 + #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource6 + #define INTMODULE_RX_GPIO_PinSource GPIO_PinSource7 + #define INTMODULE_USART USART1 + #define INTMODULE_TX_GPIO_AF GPIO_AF_USART1 + #define INTMODULE_USART_IRQn USART1_IRQn + #define INTMODULE_DMA_STREAM DMA2_Stream7 + #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 + #define INTMODULE_DMA_CHANNEL DMA_Channel_4 + #define INTMODULE_TIMER TIM3 + #define INTMODULE_TIMER_IRQn TIM3_IRQn + #define INTMODULE_TIMER_IRQHandler TIM3_IRQHandler + #define INTMODULE_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) +#elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) + #define INTMODULE_PULSES + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define INTMODULE_RCC_APB1Periph 0 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 #define INTMODULE_PWR_GPIO GPIOC #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // PC.06 + #define INTMODULE_TX_GPIO GPIOA + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10 + #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource10 + #define INTMODULE_TIMER TIM1 + #define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn + #define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler + #define INTMODULE_TX_GPIO_AF GPIO_AF_TIM1 + #define INTMODULE_DMA_CHANNEL DMA_Channel_6 + #define INTMODULE_DMA_STREAM DMA2_Stream5 + #define INTMODULE_DMA_STREAM_IRQn DMA2_Stream5_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 + #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #else + #define INTMODULE_PULSES + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define INTMODULE_RCC_APB1Periph 0 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 #define INTMODULE_PWR_GPIO GPIOD #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_15 // PD.15 + #define INTMODULE_TX_GPIO GPIOA + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10 + #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource10 + #define INTMODULE_TIMER TIM1 + #define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn + #define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler + #define INTMODULE_TX_GPIO_AF GPIO_AF_TIM1 + #define INTMODULE_DMA_CHANNEL DMA_Channel_6 + #define INTMODULE_DMA_STREAM DMA2_Stream5 + #define INTMODULE_DMA_STREAM_IRQn DMA2_Stream5_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 + #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #endif -#define INTMODULE_PPM_GPIO GPIOA -#define INTMODULE_PPM_GPIO_PIN GPIO_Pin_10 // PA.10 -#define INTMODULE_PPM_GPIO_PinSource GPIO_PinSource10 -#define INTMODULE_TIMER TIM1 -#define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn -#define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler -#define INTMODULE_PPM_GPIO_AF GPIO_AF_TIM1 -#define INTMODULE_DMA_CHANNEL DMA_Channel_6 -#define INTMODULE_DMA_STREAM DMA2_Stream5 -#define INTMODULE_DMA_IRQn DMA2_Stream5_IRQn -#define INTMODULE_DMA_IRQHandler DMA2_Stream5_IRQHandler -#define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 -#define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) // External Module -#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) -#define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 -#define EXTMODULE_PWR_GPIO GPIOD -#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 -#define EXTMODULE_PPM_GPIO GPIOA -#define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_7 // PA.07 -#define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource7 -#define EXTMODULE_TIMER TIM8 -#define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM8 -#define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn -#define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler -#define EXTMODULE_DMA_CHANNEL DMA_Channel_7 -#define EXTMODULE_DMA_STREAM DMA2_Stream1 -#define EXTMODULE_DMA_IRQn DMA2_Stream1_IRQn -#define EXTMODULE_DMA_IRQHandler DMA2_Stream1_IRQHandler -#define EXTMODULE_DMA_FLAG_TC DMA_IT_TCIF1 -#define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) +#define EXTMODULE_PULSES +#if defined(PCBXLITE) + #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 + #define EXTMODULE_PWR_GPIO GPIOD + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_11 // PD.11 + #define EXTMODULE_TX_GPIO GPIOC + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PC.06 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource6 + #define EXTMODULE_TIMER TIM8 + #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1 + #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn + #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler + #define EXTMODULE_DMA_CHANNEL DMA_Channel_7 + #define EXTMODULE_DMA_STREAM DMA2_Stream1 + #define EXTMODULE_DMA_IRQn DMA2_Stream1_IRQn + #define EXTMODULE_DMA_IRQHandler DMA2_Stream1_IRQHandler + #define EXTMODULE_DMA_FLAG_TC DMA_IT_TCIF1 + #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) +#else + #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 + #define EXTMODULE_PWR_GPIO GPIOD + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 + #define EXTMODULE_TX_GPIO GPIOA + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // PA.07 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7 + #define EXTMODULE_TIMER TIM8 + #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1N + #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn + #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler + #define EXTMODULE_DMA_CHANNEL DMA_Channel_7 + #define EXTMODULE_DMA_STREAM DMA2_Stream1 + #define EXTMODULE_DMA_IRQn DMA2_Stream1_IRQn + #define EXTMODULE_DMA_IRQHandler DMA2_Stream1_IRQHandler + #define EXTMODULE_DMA_FLAG_TC DMA_IT_TCIF1 + #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) +#endif // Trainer Port -#define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC) -#define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM3 -#define TRAINER_GPIO GPIOC -#define TRAINER_IN_GPIO_PIN GPIO_Pin_8 // PC.08 -#define TRAINER_IN_GPIO_PinSource GPIO_PinSource8 -#define TRAINER_OUT_GPIO_PIN GPIO_Pin_9 // PC.09 -#define TRAINER_OUT_GPIO_PinSource GPIO_PinSource9 -#define TRAINER_DETECT_GPIO GPIOA -#define TRAINER_DETECT_GPIO_PIN GPIO_Pin_8 // PA.08 -#define TRAINER_TIMER TIM3 -#define TRAINER_TIMER_IRQn TIM3_IRQn -#define TRAINER_GPIO_AF GPIO_AF_TIM3 -#define TRAINER_DMA DMA1 -#define TRAINER_DMA_CHANNEL DMA_Channel_5 -#define TRAINER_DMA_STREAM DMA1_Stream2 -#define TRAINER_DMA_IRQn DMA1_Stream2_IRQn -#define TRAINER_DMA_IRQHandler DMA1_Stream2_IRQHandler -#define TRAINER_DMA_FLAG_TC DMA_IT_TCIF2 -#define TRAINER_TIMER_IRQn TIM3_IRQn -#define TRAINER_TIMER_IRQHandler TIM3_IRQHandler -#define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) +#if defined(PCBXLITE) + #define TRAINER_RCC_AHB1Periph 0 + #define TRAINER_RCC_APB1Periph 0 +#else + #define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC) + #define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM3 + #define TRAINER_GPIO GPIOC + #define TRAINER_IN_GPIO_PIN GPIO_Pin_8 // PC.08 + #define TRAINER_IN_GPIO_PinSource GPIO_PinSource8 + #define TRAINER_OUT_GPIO_PIN GPIO_Pin_9 // PC.09 + #define TRAINER_OUT_GPIO_PinSource GPIO_PinSource9 + #define TRAINER_DETECT_GPIO GPIOA + #define TRAINER_DETECT_GPIO_PIN GPIO_Pin_8 // PA.08 + #define TRAINER_TIMER TIM3 + #define TRAINER_TIMER_IRQn TIM3_IRQn + #define TRAINER_GPIO_AF GPIO_AF_TIM3 + #define TRAINER_DMA DMA1 + #define TRAINER_DMA_CHANNEL DMA_Channel_5 + #define TRAINER_DMA_STREAM DMA1_Stream2 + #define TRAINER_DMA_IRQn DMA1_Stream2_IRQn + #define TRAINER_DMA_IRQHandler DMA1_Stream2_IRQHandler + #define TRAINER_DMA_FLAG_TC DMA_IT_TCIF2 + #define TRAINER_TIMER_IRQn TIM3_IRQn + #define TRAINER_TIMER_IRQHandler TIM3_IRQHandler + #define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) +#endif // Serial Port -#if defined(PCBX7) -#define SERIAL_RCC_AHB1Periph 0 -#define SERIAL_RCC_APB1Periph 0 +#if defined(PCBX7) || defined(PCBXLITE) + #define SERIAL_RCC_AHB1Periph 0 + #define SERIAL_RCC_APB1Periph 0 #else -#define SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) -#define SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 -#define SERIAL_GPIO GPIOB -#define SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10 -#define SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11 -#define SERIAL_GPIO_PinSource_TX GPIO_PinSource10 -#define SERIAL_GPIO_PinSource_RX GPIO_PinSource11 -#define SERIAL_GPIO_AF GPIO_AF_USART3 -#define SERIAL_USART USART3 -#define SERIAL_USART_IRQHandler USART3_IRQHandler -#define SERIAL_USART_IRQn USART3_IRQn -#define SERIAL_DMA_Stream_RX DMA1_Stream1 -#define SERIAL_DMA_Channel_RX DMA_Channel_4 + #define TRAINER_BATTERY_COMPARTMENT + #define SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) + #define SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 + #define SERIAL_GPIO GPIOB + #define SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10 + #define SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11 + #define SERIAL_GPIO_PinSource_TX GPIO_PinSource10 + #define SERIAL_GPIO_PinSource_RX GPIO_PinSource11 + #define SERIAL_GPIO_AF GPIO_AF_USART3 + #define SERIAL_USART USART3 + #define SERIAL_USART_IRQHandler USART3_IRQHandler + #define SERIAL_USART_IRQn USART3_IRQn + #define SERIAL_DMA_Stream_RX DMA1_Stream1 + #define SERIAL_DMA_Channel_RX DMA_Channel_4 #endif // Telemetry @@ -558,35 +733,50 @@ // PCBREV #if defined(PCBX7) -#define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA -#define PCBREV_GPIO GPIOA -#define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14 + #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define PCBREV_GPIO GPIOA + #define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14 #else -#define PCBREV_RCC_AHB1Periph 0 + #define PCBREV_RCC_AHB1Periph 0 #endif -// SPORT update connector -#if defined(PCBX7) -#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB -#define SPORT_UPDATE_PWR_GPIO GPIOB -#define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_2 // PB.02 +// S.Port update connector +#if defined(PCBXLITE) + #define SPORT_MAX_BAUDRATE 250000 // not tested + #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOD + #define SPORT_UPDATE_PWR_GPIO GPIOD + #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 +#elif defined(PCBX7) + #define SPORT_MAX_BAUDRATE 250000 // < 400000 + #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define SPORT_UPDATE_PWR_GPIO GPIOB + #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_2 // PB.02 #else -#define SPORT_UPDATE_RCC_AHB1Periph 0 + #define SPORT_MAX_BAUDRATE 400000 + #define SPORT_UPDATE_RCC_AHB1Periph 0 #endif // Heartbeat -#define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC -#define HEARTBEAT_RCC_APB2Periph RCC_APB2Periph_USART6 -#define HEARTBEAT_GPIO GPIOC -#define HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07 -#define HEARTBEAT_GPIO_PinSource GPIO_PinSource7 -#define HEARTBEAT_GPIO_AF_SBUS GPIO_AF_USART6 -#define HEARTBEAT_GPIO_AF_CAPTURE GPIO_AF_TIM3 -#define HEARTBEAT_USART USART6 -#define HEARTBEAT_USART_IRQHandler USART6_IRQHandler -#define HEARTBEAT_USART_IRQn USART6_IRQn -#define HEARTBEAT_DMA_Stream DMA2_Stream1 -#define HEARTBEAT_DMA_Channel DMA_Channel_5 +#if defined(PCBXLITE) + #define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD + #define HEARTBEAT_RCC_APB2Periph 0 + #define HEARTBEAT_GPIO GPIOD + #define HEARTBEAT_GPIO_PIN GPIO_Pin_15 // PD.15 +#else + #define TRAINER_MODULE_HEARTBEAT + #define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC + #define HEARTBEAT_RCC_APB2Periph RCC_APB2Periph_USART6 + #define HEARTBEAT_GPIO GPIOC + #define HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07 + #define HEARTBEAT_GPIO_PinSource GPIO_PinSource7 + #define HEARTBEAT_GPIO_AF_SBUS GPIO_AF_USART6 + #define HEARTBEAT_GPIO_AF_CAPTURE GPIO_AF_TIM3 + #define HEARTBEAT_USART USART6 + #define HEARTBEAT_USART_IRQHandler USART6_IRQHandler + #define HEARTBEAT_USART_IRQn USART6_IRQn + #define HEARTBEAT_DMA_Stream DMA2_Stream1 + #define HEARTBEAT_DMA_Channel DMA_Channel_5 +#endif // USB #define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA @@ -612,7 +802,7 @@ #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource5 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM9 #define BACKLIGHT_GPIO_AF_2 GPIO_AF_TIM9 -#elif defined (PCBX9DP) +#elif defined(PCBX9DP) #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 #define BACKLIGHT_RCC_APB2Periph 0 @@ -625,6 +815,19 @@ #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource13 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM4 #define BACKLIGHT_GPIO_AF_2 GPIO_AF_TIM4 +#elif defined(PCBXLITE) + #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define BACKLIGHT_RCC_APB1Periph 0 + #define BACKLIGHT_RCC_APB2Periph RCC_APB2Periph_TIM1 + #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) + #define BACKLIGHT_TIMER TIM1 + #define BACKLIGHT_GPIO GPIOA + #define BACKLIGHT_GPIO_PIN GPIO_Pin_10 // PA.10 + #define BACKLIGHT_GPIO_PinSource GPIO_PinSource10 + #define BACKLIGHT_GPIO_AF GPIO_AF_TIM1 + #define BACKLIGHT_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 // Channel 3, PWM + #define BACKLIGHT_CCER TIM_CCER_CC3E + #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR3 #elif defined(PCBX7) #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 @@ -635,6 +838,9 @@ #define BACKLIGHT_GPIO_PIN GPIO_Pin_13 // PD.13 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource13 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM4 + #define BACKLIGHT_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 // Channel2, PWM + #define BACKLIGHT_CCER TIM_CCER_CC2E + #define BACKLIGHT_COUNTER_REGISTER BACKLIGHT_TIMER->CCR2 #else #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define BACKLIGHT_RCC_APB1Periph 0 @@ -669,6 +875,27 @@ #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7 #define LCD_SPI SPI3 #define LCD_GPIO_AF GPIO_AF_SPI3 +#elif defined(PCBXLITE) + #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1) + #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3 + #define LCD_SPI_GPIO GPIOC + #define LCD_MOSI_GPIO_PIN GPIO_Pin_12 // PC.12 + #define LCD_MOSI_GPIO_PinSource GPIO_PinSource12 + #define LCD_CLK_GPIO_PIN GPIO_Pin_10 // PC.10 + #define LCD_CLK_GPIO_PinSource GPIO_PinSource10 + #define LCD_A0_GPIO_PIN GPIO_Pin_11 // PC.11 + #define LCD_NCS_GPIO GPIOD + #define LCD_NCS_GPIO_PIN GPIO_Pin_3 // PD.03 + #define LCD_RST_GPIO GPIOD + #define LCD_RST_GPIO_PIN GPIO_Pin_2 // PD.02 + #define LCD_DMA DMA1 + #define LCD_DMA_Stream DMA1_Stream7 + #define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn + #define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler + #define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7) + #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7 + #define LCD_SPI SPI3 + #define LCD_GPIO_AF GPIO_AF_SPI3 #elif defined(PCBX9DP) || defined(PCBX7) #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1) #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3 @@ -704,18 +931,29 @@ #endif #define LCD_RCC_APB2Periph 0 - // I2C Bus: EEPROM and CAT5137 digital pot for volume control -#define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define I2C_RCC_APB1Periph RCC_APB1Periph_I2C1 #define I2C I2C1 -#define I2C_GPIO GPIOB -#define I2C_SCL_GPIO_PIN GPIO_Pin_6 // PB.06 -#define I2C_SDA_GPIO_PIN GPIO_Pin_7 // PB.07 -#define I2C_GPIO_PIN_WP GPIO_Pin_9 // PB.09 #define I2C_GPIO_AF GPIO_AF_I2C1 -#define I2C_SCL_GPIO_PinSource GPIO_PinSource6 -#define I2C_SDA_GPIO_PinSource GPIO_PinSource7 +#if defined(PCBXLITE) + #define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD) + #define I2C_SPI_GPIO GPIOB + #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09 + #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08 + #define I2C_WP_GPIO GPIOD + #define I2C_WP_GPIO_PIN GPIO_Pin_7 // PD.07 + #define I2C_SCL_GPIO_PinSource GPIO_PinSource8 + #define I2C_SDA_GPIO_PinSource GPIO_PinSource9 +#else + #define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define I2C_SPI_GPIO GPIOB + #define I2C_SCL_GPIO_PIN GPIO_Pin_6 // PB.06 + #define I2C_SDA_GPIO_PIN GPIO_Pin_7 // PB.07 + #define I2C_WP_GPIO GPIOB + #define I2C_WP_GPIO_PIN GPIO_Pin_9 // PB.09 + #define I2C_SCL_GPIO_PinSource GPIO_PinSource6 + #define I2C_SDA_GPIO_PinSource GPIO_PinSource7 +#endif #if defined(REV4a) #define I2C_SPEED 100000 #else @@ -728,8 +966,12 @@ // SD - SPI2 #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define SD_RCC_APB1Periph RCC_APB1Periph_SPI2 -#define SD_GPIO_PRESENT GPIOD -#define SD_GPIO_PIN_PRESENT GPIO_Pin_9 // PD.09 +#define SD_GPIO_PRESENT_GPIO GPIOD +#if defined(PCBXLITE) + #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_10 // PD.10 +#else + #define SD_GPIO_PRESENT_GPIO_PIN GPIO_Pin_9 // PD.09 +#endif #define SD_GPIO GPIOB #define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12 #define SD_GPIO_PIN_SCK GPIO_Pin_13 // PB.13 @@ -766,17 +1008,39 @@ #define AUDIO_DMA DMA1 // Haptic -#if defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) +#if defined(PCBXLITE) + #define HAPTIC_PWM + #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define HAPTIC_RCC_APB1Periph RCC_APB1Periph_TIM2 + #define HAPTIC_RCC_APB2Periph 0 + #define HAPTIC_GPIO_PinSource GPIO_PinSource3 + #define HAPTIC_GPIO GPIOB + #define HAPTIC_GPIO_PIN GPIO_Pin_3 // PB.03 + #define HAPTIC_GPIO_AF GPIO_AF_TIM2 + #define HAPTIC_TIMER TIM2 + #define HAPTIC_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) + #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR2 + #define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 + #define HAPTIC_CCER TIM_CCER_CC2E + #define BACKLIGHT_BDTR TIM_BDTR_MOE +#elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) + #define HAPTIC_PWM #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM10 + #define HAPTIC_RCC_APB1Periph 0 #define HAPTIC_GPIO_PinSource GPIO_PinSource8 #define HAPTIC_GPIO GPIOB #define HAPTIC_GPIO_PIN GPIO_Pin_8 // PB.08 #define HAPTIC_GPIO_AF GPIO_AF_TIM10 #define HAPTIC_TIMER TIM10 + #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) + #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR1 + #define HAPTIC_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 + #define HAPTIC_CCER TIM_CCER_CC1E #else #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOC #define HAPTIC_RCC_APB2Periph 0 + #define HAPTIC_RCC_APB1Periph 0 #define HAPTIC_GPIO GPIOC #define HAPTIC_GPIO_PIN GPIO_Pin_12 #endif @@ -812,23 +1076,27 @@ #define BT_TX_GPIO_PinSource GPIO_PinSource14 #define BT_RX_GPIO_PinSource GPIO_PinSource9 #define BT_USART_IRQHandler USART6_IRQHandler -#elif defined(PCBX7) - #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA1) - #define BT_RCC_APB1Periph RCC_APB1Periph_USART3 - #define BT_RCC_APB2Periph 0 - #define BT_EN_GPIO GPIOE - #define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12 - #define BT_GPIO_TXRX GPIOB - #define BT_TX_GPIO_PIN GPIO_Pin_10 // PB.10 - #define BT_RX_GPIO_PIN GPIO_Pin_11 // PB.11 - #define BT_TX_GPIO_PinSource GPIO_PinSource10 - #define BT_RX_GPIO_PinSource GPIO_PinSource11 - #define BT_GPIO_AF GPIO_AF_USART3 - #define BT_USART USART3 - #define BT_USART_IRQHandler USART3_IRQHandler - #define BT_USART_IRQn USART3_IRQn - #define BT_DMA_Stream_RX DMA1_Stream1 - #define BT_DMA_Channel_RX DMA_Channel_4 +#elif defined(PCBX7) || defined(PCBXLITE) + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA1) + #define BT_RCC_APB1Periph RCC_APB1Periph_USART3 + #define BT_RCC_APB2Periph 0 + #define BT_EN_GPIO GPIOE + #if defined(PCBXLITE) + #define BT_EN_GPIO_PIN GPIO_Pin_15 // PE.15 + #else + #define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12 + #endif + #define BT_GPIO_TXRX GPIOB + #define BT_TX_GPIO_PIN GPIO_Pin_10 // PB.10 + #define BT_RX_GPIO_PIN GPIO_Pin_11 // PB.11 + #define BT_TX_GPIO_PinSource GPIO_PinSource10 + #define BT_RX_GPIO_PinSource GPIO_PinSource11 + #define BT_GPIO_AF GPIO_AF_USART3 + #define BT_USART USART3 + #define BT_USART_IRQHandler USART3_IRQHandler + #define BT_USART_IRQn USART3_IRQn + #define BT_DMA_Stream_RX DMA1_Stream1 + #define BT_DMA_Channel_RX DMA_Channel_4 #else #define BT_RCC_AHB1Periph 0 #define BT_RCC_APB1Periph 0 diff --git a/radio/src/targets/taranis/haptic_driver.cpp b/radio/src/targets/taranis/haptic_driver.cpp index 5c10c271a..892d69cda 100644 --- a/radio/src/targets/taranis/haptic_driver.cpp +++ b/radio/src/targets/taranis/haptic_driver.cpp @@ -20,10 +20,11 @@ #include "opentx.h" -#if defined(PCBX9E) || defined(PCBX9DP) +#if defined(HAPTIC_PWM) +// TODO test Haptic on X7 (I added PWM support) void hapticOff(void) { - HAPTIC_TIMER->CCR1 = 0; + HAPTIC_COUNTER_REGISTER = 0; } void hapticOn(uint32_t pwmPercent) @@ -31,7 +32,7 @@ void hapticOn(uint32_t pwmPercent) if (pwmPercent > 100) { pwmPercent = 100; } - HAPTIC_TIMER->CCR1 = pwmPercent; + HAPTIC_COUNTER_REGISTER = pwmPercent; } void hapticInit(void) @@ -47,11 +48,10 @@ void hapticInit(void) GPIO_PinAFConfig(HAPTIC_GPIO, HAPTIC_GPIO_PinSource, HAPTIC_GPIO_AF); HAPTIC_TIMER->ARR = 100; - HAPTIC_TIMER->PSC = (PERI2_FREQUENCY * TIMER_MULT_APB2) / 10000 - 1; - HAPTIC_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM - HAPTIC_TIMER->CCER = TIM_CCER_CC1E; - - HAPTIC_TIMER->CCR1 = 0; + HAPTIC_TIMER->PSC = HAPTIC_TIMER_FREQ / 10000 - 1; + HAPTIC_TIMER->CCMR1 = HAPTIC_CCMR1; // PWM + HAPTIC_TIMER->CCER = HAPTIC_CCER; + HAPTIC_COUNTER_REGISTER = 0; HAPTIC_TIMER->EGR = 0; HAPTIC_TIMER->CR1 = TIM_CR1_CEN; // Counter enable } diff --git a/radio/src/targets/taranis/i2c_driver.cpp b/radio/src/targets/taranis/i2c_driver.cpp index d8e9ef480..65138b7eb 100644 --- a/radio/src/targets/taranis/i2c_driver.cpp +++ b/radio/src/targets/taranis/i2c_driver.cpp @@ -28,13 +28,13 @@ void i2cInit() I2C_DeInit(I2C); GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = I2C_GPIO_PIN_WP; + GPIO_InitStructure.GPIO_Pin = I2C_WP_GPIO_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(I2C_GPIO, &GPIO_InitStructure); - GPIO_ResetBits(I2C_GPIO, I2C_GPIO_PIN_WP); + GPIO_Init(I2C_WP_GPIO, &GPIO_InitStructure); + GPIO_ResetBits(I2C_WP_GPIO, I2C_WP_GPIO_PIN); I2C_InitTypeDef I2C_InitStructure; I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; @@ -46,15 +46,15 @@ void i2cInit() I2C_Init(I2C, &I2C_InitStructure); I2C_Cmd(I2C, ENABLE); - GPIO_PinAFConfig(I2C_GPIO, I2C_SCL_GPIO_PinSource, I2C_GPIO_AF); - GPIO_PinAFConfig(I2C_GPIO, I2C_SDA_GPIO_PinSource, I2C_GPIO_AF); + GPIO_PinAFConfig(I2C_SPI_GPIO, I2C_SCL_GPIO_PinSource, I2C_GPIO_AF); + GPIO_PinAFConfig(I2C_SPI_GPIO, I2C_SDA_GPIO_PinSource, I2C_GPIO_AF); GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(I2C_GPIO, &GPIO_InitStructure); + GPIO_Init(I2C_SPI_GPIO, &GPIO_InitStructure); } #define I2C_TIMEOUT_MAX 1000 diff --git a/radio/src/targets/taranis/intmodule_pulses_driver.cpp b/radio/src/targets/taranis/intmodule_pulses_driver.cpp new file mode 100644 index 000000000..4eb02aa99 --- /dev/null +++ b/radio/src/targets/taranis/intmodule_pulses_driver.cpp @@ -0,0 +1,174 @@ +/* + * 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. + */ + +#include "opentx.h" + +void intmoduleStop() +{ + INTERNAL_MODULE_OFF(); + + NVIC_DisableIRQ(INTMODULE_DMA_STREAM_IRQn); + NVIC_DisableIRQ(INTMODULE_TIMER_CC_IRQn); + + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_TIMER->DIER &= ~(TIM_DIER_CC2IE | TIM_DIER_UDE); + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; +} + +void intmoduleNoneStart() +{ + INTERNAL_MODULE_OFF(); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); + GPIO_SetBits(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PIN); // Set high + + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; + INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz + INTMODULE_TIMER->ARR = 36000; // 18mS + INTMODULE_TIMER->CCR2 = 32000; // Update time + INTMODULE_TIMER->EGR = 1; // Restart + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt + INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; + + NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); + NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); +} + +void intmoduleSendNextFrame() +{ + if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { + INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].pxx.ptr - 1) - 4000; // 2mS in advance + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; + INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); + INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx.pulses); + INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].pxx.ptr - modulePulsesData[INTERNAL_MODULE].pxx.pulses; + INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA + } +#if defined(TARANIS_INTERNAL_PPM) + else if (s_current_protocol[INTERNAL_MODULE] == PROTO_PPM) { + INTMODULE_TIMER->CCR3 = GET_PPM_DELAY(INTERNAL_MODULE)*2; + INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P); + INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance + INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA + INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; + INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); + INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].ppm.pulses); + INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].ppm.ptr - modulePulsesData[INTERNAL_MODULE].ppm.pulses; + INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA + } +#endif + else { + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; + } +} + +void intmodulePxxStart() +{ + INTERNAL_MODULE_ON(); + + GPIO_PinAFConfig(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PinSource, INTMODULE_TX_GPIO_AF); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); + + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; + INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) + INTMODULE_TIMER->ARR = 18000; + INTMODULE_TIMER->CCER = TIM_CCER_CC3E | TIM_CCER_CC3NE; + INTMODULE_TIMER->BDTR = TIM_BDTR_MOE; // Enable outputs + INTMODULE_TIMER->CCR3 = 16; + INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_0; // Force O/P high + INTMODULE_TIMER->EGR = 1; // Restart + INTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update + INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2; + INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; + + intmoduleSendNextFrame(); + + NVIC_EnableIRQ(INTMODULE_DMA_STREAM_IRQn); + NVIC_SetPriority(INTMODULE_DMA_STREAM_IRQn, 7); + NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); + NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); +} + +#if defined(TARANIS_INTERNAL_PPM) +void intmodulePpmStart() +{ + INTERNAL_MODULE_ON(); + + GPIO_PinAFConfig(INTMODULE_TX_GPIO, INTMODULE_TX_GPIO_PinSource, INTMODULE_TX_GPIO_AF); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = INTMODULE_TX_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(INTMODULE_TX_GPIO, &GPIO_InitStructure); + + INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; + INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz + INTMODULE_TIMER->ARR = 45000; + INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2; // PWM mode 1 + INTMODULE_TIMER->BDTR = TIM_BDTR_MOE; + INTMODULE_TIMER->EGR = 1; + INTMODULE_TIMER->DIER = TIM_DIER_UDE; + INTMODULE_TIMER->CR1 = TIM_CR1_CEN; + + intmoduleSendNextFrame(); + + NVIC_EnableIRQ(INTMODULE_DMA_STREAM_IRQn); + NVIC_SetPriority(INTMODULE_DMA_STREAM_IRQn, 7); + NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); + NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); +} +#endif // defined(TARANIS_INTERNAL_PPM) + +extern "C" void INTMODULE_DMA_STREAM_IRQHandler() +{ + if (!DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) + return; + + DMA_ClearITPendingBit(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC); + + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag + INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt +} + +extern "C" void INTMODULE_TIMER_CC_IRQHandler() +{ + INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt + INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; + setupPulses(INTERNAL_MODULE); + intmoduleSendNextFrame(); +} diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp index 7ed417709..ea0d389da 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -27,22 +27,32 @@ uint32_t rotencPosition; uint32_t readKeys() { uint32_t result = 0; - if (~KEYS_GPIO_REG_ENTER & KEYS_GPIO_PIN_ENTER) result |= 1 << KEY_ENTER; if (~KEYS_GPIO_REG_MENU & KEYS_GPIO_PIN_MENU) result |= 1 << KEY_MENU; +#if defined(KEYS_GPIO_PIN_PAGE) if (~KEYS_GPIO_REG_PAGE & KEYS_GPIO_PIN_PAGE) result |= 1 << KEY_PAGE; +#endif if (~KEYS_GPIO_REG_EXIT & KEYS_GPIO_PIN_EXIT) result |= 1 << KEY_EXIT; - -#if !defined(PCBX9E) && !defined(PCBX7) +#if defined(KEYS_GPIO_PIN_PLUS) if (~KEYS_GPIO_REG_PLUS & KEYS_GPIO_PIN_PLUS) result |= 1 << KEY_PLUS; if (~KEYS_GPIO_REG_MINUS & KEYS_GPIO_PIN_MINUS) result |= 1 << KEY_MINUS; #endif +#if defined(KEYS_GPIO_PIN_LEFT) + if (~KEYS_GPIO_REG_LEFT & KEYS_GPIO_PIN_LEFT) + result |= 1 << KEY_LEFT; + if (~KEYS_GPIO_REG_RIGHT & KEYS_GPIO_PIN_RIGHT) + result |= 1 << KEY_RIGHT; + if (~KEYS_GPIO_REG_UP & KEYS_GPIO_PIN_UP) + result |= 1 << KEY_UP; + if (~KEYS_GPIO_REG_DOWN & KEYS_GPIO_PIN_DOWN) + result |= 1 << KEY_DOWN; +#endif // if (result != 0) TRACE("readKeys(): result=0x%02x", result); @@ -61,6 +71,8 @@ uint32_t readTrims() result |= 0x04; if (~TRIMS_GPIO_REG_LVU & TRIMS_GPIO_PIN_LVU) result |= 0x08; + +#if !defined(PCBXLITE) if (~TRIMS_GPIO_REG_RVD & TRIMS_GPIO_PIN_RVD) result |= 0x10; if (~TRIMS_GPIO_REG_RVU & TRIMS_GPIO_PIN_RVU) @@ -69,6 +81,7 @@ uint32_t readTrims() result |= 0x40; if (~TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR) result |= 0x80; +#endif // TRACE("readTrims(): result=0x%02x", result); @@ -163,9 +176,12 @@ uint32_t switchState(uint8_t index) switch (index) { ADD_3POS_CASE(A, 0); ADD_3POS_CASE(B, 1); +#if !defined(PCBXLITE) ADD_3POS_CASE(C, 2); ADD_3POS_CASE(D, 3); -#if defined(PCBX7) +#endif +#if defined(PCBXLITE) +#elif defined(PCBX7) ADD_2POS_CASE(F); ADD_2POS_CASE(H); #else diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 0632c0fef..576d767c3 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -89,7 +89,7 @@ void lcdHardwareInit() LCD_DMA->HIFCR = LCD_DMA_FLAGS; // Write ones to clear bits LCD_DMA_Stream->CR = DMA_SxCR_PL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0; LCD_DMA_Stream->PAR = (uint32_t)&LCD_SPI->DR; -#if defined(PCBX7) +#if LCD_W == 128 LCD_DMA_Stream->NDTR = LCD_W; #else LCD_DMA_Stream->M0AR = (uint32_t)displayBuf; @@ -100,7 +100,7 @@ void lcdHardwareInit() NVIC_EnableIRQ(LCD_DMA_Stream_IRQn); } -#if defined(PCBX7) +#if LCD_W == 128 void lcdStart() { lcdWriteCommand(0xe2); // (14) Soft reset @@ -176,7 +176,7 @@ void lcdRefresh(bool wait) lcdInitFinish(); } -#if defined(PCBX7) +#if LCD_W == 128 uint8_t * p = displayBuf; for (uint8_t y=0; y < 8; y++, p+=LCD_W) { lcdWriteCommand(0x10); // Column addr 0 @@ -260,7 +260,7 @@ void lcdOff() void lcdReset() { LCD_RST_LOW(); -#if defined(PCBX7) +#if LCD_W == 128 delay_ms(150); #else delay_ms(1); // Only 3 us needed according to data-sheet, we use 1 ms @@ -328,7 +328,7 @@ void lcdSetRefVolt(uint8_t val) lcdInitFinish(); } -#if !defined(PCBX7) +#if LCD_W != 128 WAIT_FOR_DMA_END(); #endif diff --git a/radio/src/targets/taranis/pulses_driver.cpp b/radio/src/targets/taranis/pulses_driver.cpp index 750a41a72..b8d7690a8 100644 --- a/radio/src/targets/taranis/pulses_driver.cpp +++ b/radio/src/targets/taranis/pulses_driver.cpp @@ -37,8 +37,6 @@ void extmoduleDsm2Start(void); #endif void extmoduleCrossfireStart(void); -void intmoduleSendNextFrame(); - void init_pxx(uint32_t port) { if (port == INTERNAL_MODULE) @@ -135,156 +133,3 @@ void disable_crossfire(uint32_t port) extmoduleStop(); } } - -void intmoduleStop() -{ - INTERNAL_MODULE_OFF(); - - NVIC_DisableIRQ(INTMODULE_DMA_IRQn); - NVIC_DisableIRQ(INTMODULE_TIMER_CC_IRQn); - - INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - INTMODULE_TIMER->DIER &= ~(TIM_DIER_CC2IE | TIM_DIER_UDE); - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; -} - -void intmoduleNoneStart() -{ - INTERNAL_MODULE_OFF(); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = INTMODULE_PPM_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(INTMODULE_PPM_GPIO, &GPIO_InitStructure); - GPIO_SetBits(INTMODULE_PPM_GPIO, INTMODULE_PPM_GPIO_PIN); // Set high - - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz - INTMODULE_TIMER->ARR = 36000; // 18mS - INTMODULE_TIMER->CCR2 = 32000; // Update time - INTMODULE_TIMER->EGR = 1; // Restart - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt - INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); - NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); -} - -void intmodulePxxStart() -{ - INTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(INTMODULE_PPM_GPIO, INTMODULE_PPM_GPIO_PinSource, INTMODULE_PPM_GPIO_AF); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = INTMODULE_PPM_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(INTMODULE_PPM_GPIO, &GPIO_InitStructure); - - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - INTMODULE_TIMER->ARR = 18000; - INTMODULE_TIMER->CCER = TIM_CCER_CC3E | TIM_CCER_CC3NE; - INTMODULE_TIMER->BDTR = TIM_BDTR_MOE; // Enable outputs - INTMODULE_TIMER->CCR3 = 16; - INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_0; // Force O/P high - INTMODULE_TIMER->EGR = 1; // Restart - INTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update - INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2; - INTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - intmoduleSendNextFrame(); - - NVIC_EnableIRQ(INTMODULE_DMA_IRQn); - NVIC_SetPriority(INTMODULE_DMA_IRQn, 7); - NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); - NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); -} - -#if defined(TARANIS_INTERNAL_PPM) -void intmodulePpmStart() -{ - INTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(INTMODULE_PPM_GPIO, INTMODULE_PPM_GPIO_PinSource, INTMODULE_PPM_GPIO_AF); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = INTMODULE_PPM_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(INTMODULE_PPM_GPIO, &GPIO_InitStructure); - - INTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - INTMODULE_TIMER->PSC = INTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz - INTMODULE_TIMER->ARR = 45000; - INTMODULE_TIMER->CCMR2 = TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2; // PWM mode 1 - INTMODULE_TIMER->BDTR = TIM_BDTR_MOE; - INTMODULE_TIMER->EGR = 1; - INTMODULE_TIMER->DIER = TIM_DIER_UDE; - INTMODULE_TIMER->CR1 = TIM_CR1_CEN; - - intmoduleSendNextFrame(); - - NVIC_EnableIRQ(INTMODULE_DMA_IRQn); - NVIC_SetPriority(INTMODULE_DMA_IRQn, 7); - NVIC_EnableIRQ(INTMODULE_TIMER_CC_IRQn); - NVIC_SetPriority(INTMODULE_TIMER_CC_IRQn, 7); -} -#endif // defined(TARANIS_INTERNAL_PPM) - -void intmoduleSendNextFrame() -{ - if (s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) { - INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].pxx.ptr - 1) - 4000; // 2mS in advance - INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; - INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); - INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx.pulses); - INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].pxx.ptr - modulePulsesData[INTERNAL_MODULE].pxx.pulses; - INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA - } -#if defined(TARANIS_INTERNAL_PPM) - else if (s_current_protocol[INTERNAL_MODULE] == PROTO_PPM) { - INTMODULE_TIMER->CCR3 = GET_PPM_DELAY(INTERNAL_MODULE)*2; - INTMODULE_TIMER->CCER = TIM_CCER_CC3E | (GET_PPM_POLARITY(INTERNAL_MODULE) ? 0 : TIM_CCER_CC3P); - INTMODULE_TIMER->CCR2 = *(modulePulsesData[INTERNAL_MODULE].ppm.ptr - 1) - 4000; // 2mS in advance - INTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - INTMODULE_DMA_STREAM->CR |= INTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1; - INTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&INTMODULE_TIMER->ARR); - INTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].ppm.pulses); - INTMODULE_DMA_STREAM->NDTR = modulePulsesData[INTERNAL_MODULE].ppm.ptr - modulePulsesData[INTERNAL_MODULE].ppm.pulses; - INTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA - } -#endif - else { - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; - } -} - -extern "C" void INTMODULE_DMA_IRQHandler() -{ - if (!DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) - return; - - DMA_ClearITPendingBit(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC); - - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - INTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt -} - -extern "C" void INTMODULE_TIMER_CC_IRQHandler() -{ - INTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt - INTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - setupPulses(INTERNAL_MODULE); - intmoduleSendNextFrame(); -} diff --git a/radio/src/targets/taranis/pwr_driver.cpp b/radio/src/targets/taranis/pwr_driver.cpp index 8da5a4ff5..effd57ed0 100644 --- a/radio/src/targets/taranis/pwr_driver.cpp +++ b/radio/src/targets/taranis/pwr_driver.cpp @@ -31,7 +31,7 @@ void pwrInit() GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(PWR_GPIO, &GPIO_InitStructure); + GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; @@ -43,12 +43,14 @@ void pwrInit() GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - GPIO_Init(PWR_GPIO, &GPIO_InitStructure); - + GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); + +#if defined(TRAINER_DETECT_GPIO_PIN) GPIO_InitStructure.GPIO_Pin = TRAINER_DETECT_GPIO_PIN; GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure); +#endif -#if defined(PCBX7) +#if defined(PCBREV_GPIO_PIN) // Init PCBREV PIN GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; @@ -61,12 +63,12 @@ void pwrInit() void pwrOn() { - GPIO_SetBits(PWR_GPIO, PWR_ON_GPIO_PIN); + GPIO_SetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); } void pwrOff() { - GPIO_ResetBits(PWR_GPIO, PWR_ON_GPIO_PIN); + GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); // disable interrupts __disable_irq(); @@ -95,5 +97,5 @@ void pwrOff() uint32_t pwrPressed() { - return GPIO_ReadInputDataBit(PWR_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; + return GPIO_ReadInputDataBit(PWR_SWITCH_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; } diff --git a/radio/src/targets/taranis/trainer_driver.cpp b/radio/src/targets/taranis/trainer_driver.cpp index 7b4c65c2d..1992d635e 100644 --- a/radio/src/targets/taranis/trainer_driver.cpp +++ b/radio/src/targets/taranis/trainer_driver.cpp @@ -92,7 +92,6 @@ void init_trainer_capture() void stop_trainer_capture() { NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt - TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter TRAINER_TIMER->DIER = 0; // Stop Interrupt } diff --git a/radio/src/tasks_arm.cpp b/radio/src/tasks_arm.cpp index 4756a23ab..4e3af0ed0 100644 --- a/radio/src/tasks_arm.cpp +++ b/radio/src/tasks_arm.cpp @@ -121,7 +121,7 @@ void mixerTask(void * pdata) return; #endif -#if defined(PCBTARANIS) +#if defined(SBUS) processSbusInput(); #endif diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index f99062f63..b189ea202 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -41,7 +41,7 @@ void processCrossfireTelemetryData(uint8_t data); void crossfireSetDefault(int index, uint8_t id, uint8_t subId); bool isCrossfireOutputBufferAvailable(); -#if defined(PCBX7) || defined(PCBHORUS) +#if SPORT_MAX_BAUDRATE < 400000 const uint32_t CROSSFIRE_BAUDRATES[] = { 400000, 115200, diff --git a/radio/src/tests/switches.cpp b/radio/src/tests/switches.cpp index 7ac31f700..4157e8839 100644 --- a/radio/src/tests/switches.cpp +++ b/radio/src/tests/switches.cpp @@ -191,7 +191,7 @@ TEST(evalLogicalSwitches, playFile) } #endif -#if defined(PCBTARANIS) && !defined(PCBX7) +#if defined(PCBTARANIS) && NUM_SWITCHES >= 8 TEST(getSwitch, edgeInstant) { MODEL_RESET(); diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 7e342bfda..072fde10b 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -490,6 +490,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp""\3135d""\3135n""\3136d""\3136n" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tSl""tSp""tVd""tVn""tPd""tPn""tKl""tKp", "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp") #endif diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 7d68ab351..abefce99e 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -513,6 +513,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 750791338..1ceeae593 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -429,14 +429,17 @@ #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" #if defined(PCBHORUS) -#define LEN_VKEYS "\006" -#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Up\0 ""Down\0""Right""Left\0" +#elif defined(PCBXLITE) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" #else -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" #endif #define LEN_VRENCODERS "\003" @@ -472,6 +475,9 @@ #elif defined(PCBX9E) #define TR_POTS_VSRCRAW "\310F1\0""\310F2\0""\310F3\0""\310F4\0""\311S1\0""\311S2\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBXLITE) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0" #elif defined(PCBX7) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SF\0""\312SH\0" @@ -496,6 +502,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 39afad31e..99092a732 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -489,6 +489,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 2e2126b63..0821da207 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -493,6 +493,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 15d8cc910..ae39d27cb 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -514,6 +514,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tDg""tDd""tPb""tPh""tGb""tGh""tAg""tAd", "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad") #endif diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 34a329417..0d11a3f84 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -500,6 +500,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 4e3fadc69..011d84eac 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -487,6 +487,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 5a7e24fa6..709bb0aa4 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -502,6 +502,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 50c055e49..a25db6c32 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -492,6 +492,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #endif diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 98c9d9894..1a2863dee 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -507,6 +507,8 @@ #if defined(PCBHORUS) #define TR_TRIMS_SWITCHES "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh""\3135d""\3135u""\3136d""\3136u" +#elif defined(PCBXLITE) + #define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu" #else #define TR_TRIMS_SWITCHES TR("tRv""tRh""tHn""tHu""tGn""tGu""tSv""tSh", "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh") #endif diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index 251a59f56..de710037d 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -139,6 +139,15 @@ if [[ " X7 ALL " =~ " ${FLAVOR} " ]] ; then make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} fi +if [[ " XLITE ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on X-Lite + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=XLITE -DHELI=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} libsimulator + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi + if [[ " X9D X9 ALL " =~ " ${FLAVOR} " ]] ; then # OpenTX on X9D rm -rf *