1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 16:55:20 +03:00

Bsongis/frsky xlite (#5574)

FrSky X-Lite support added
This commit is contained in:
Bertrand Songis 2018-01-02 14:36:48 +01:00 committed by GitHub
parent 269831e0c4
commit c4001c8507
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
85 changed files with 1555 additions and 976 deletions

View file

@ -35,6 +35,7 @@ env:
# - FLAVOR=SKY9X # - FLAVOR=SKY9X
# - FLAVOR=9XRPRO # - FLAVOR=9XRPRO
- FLAVOR=X7 - FLAVOR=X7
- FLAVOR=XLITE
- FLAVOR=X9 - FLAVOR=X9
# - FLAVOR=X9D # - FLAVOR=X9D
# - FLAVOR=X9D+ # - FLAVOR=X9D+

View file

@ -60,6 +60,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x3478746F; return 0x3478746F;
case BOARD_X10: case BOARD_X10:
return 0x3778746F; return 0x3778746F;
case BOARD_TARANIS_XLITE:
return 0x3978746F;
case BOARD_TARANIS_X7: case BOARD_TARANIS_X7:
return 0x3678746F; return 0x3678746F;
case BOARD_TARANIS_X9E: case BOARD_TARANIS_X9E:
@ -94,6 +96,7 @@ const int Boards::getEEpromSize(Board::Type board)
case BOARD_9XRPRO: case BOARD_9XRPRO:
case BOARD_AR9X: case BOARD_AR9X:
return EESIZE_9XRPRO; return EESIZE_9XRPRO;
case BOARD_TARANIS_XLITE:
case BOARD_TARANIS_X7: case BOARD_TARANIS_X7:
case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9D:
case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9DP:
@ -120,10 +123,11 @@ const int Boards::getFlashSize(Type board)
case BOARD_9XRPRO: case BOARD_9XRPRO:
case BOARD_AR9X: case BOARD_AR9X:
return FSIZE_9XRPRO; return FSIZE_9XRPRO;
case BOARD_TARANIS_XLITE:
case BOARD_TARANIS_X7:
case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9D:
case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9DP:
case BOARD_TARANIS_X9E: case BOARD_TARANIS_X9E:
case BOARD_TARANIS_X7:
case BOARD_X12S: case BOARD_X12S:
case BOARD_X10: case BOARD_X10:
return FSIZE_HORUS; return FSIZE_HORUS;
@ -136,6 +140,14 @@ const int Boards::getFlashSize(Type board)
const SwitchInfo Boards::getSwitchInfo(Board::Type board, unsigned index) 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)) { if (IS_TARANIS_X7(board)) {
const Board::SwitchInfo switches[] = { const Board::SwitchInfo switches[] = {
{SWITCH_3POS, "SA"}, {SWITCH_3POS, "SA"},
@ -196,7 +208,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
return 4; return 4;
case Pots: case Pots:
if (IS_TARANIS_X7(board)) if (IS_TARANIS_SMALL(board))
return 2; return 2;
else if (IS_TARANIS_X9E(board)) else if (IS_TARANIS_X9E(board))
return 4; return 4;
@ -237,6 +249,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
return 18; return 18;
else if (IS_TARANIS_X7(board)) else if (IS_TARANIS_X7(board))
return 6; return 6;
else if (IS_TARANIS_XLITE(board))
return 2;
else if (IS_HORUS_OR_TARANIS(board)) else if (IS_HORUS_OR_TARANIS(board))
return 8; return 8;
else else
@ -257,6 +271,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
case NumTrims: case NumTrims:
if (IS_HORUS(board)) if (IS_HORUS(board))
return 6; return 6;
else if (IS_TARANIS_XLITE(board))
return 2;
else else
return 4; return 4;

View file

@ -45,6 +45,7 @@ namespace Board {
BOARD_TARANIS_X9E, BOARD_TARANIS_X9E,
BOARD_X12S, BOARD_X12S,
BOARD_X10, BOARD_X10,
BOARD_TARANIS_XLITE,
BOARD_ENUM_COUNT BOARD_ENUM_COUNT
}; };
@ -185,12 +186,14 @@ class Boards
#define IS_2560(board) (board==Board::BOARD_GRUVIN9X || board==Board::BOARD_MEGA2560) #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_SKY9X(board) (board==Board::BOARD_SKY9X || board==Board::BOARD_9XRPRO || board==Board::BOARD_AR9X)
#define IS_9XRPRO(board) (board==Board::BOARD_9XRPRO) #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_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_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_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_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_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_TARANIS_NOT_X9E(board) (IS_TARANIS(board) && !IS_TARANIS_X9E(board))
#define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) #define IS_HORUS_X12S(board) (board==Board::BOARD_X12S)
#define IS_HORUS_X10(board) (board==Board::BOARD_X10) #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_HORUS_OR_TARANIS(board) (IS_HORUS(board) || IS_TARANIS(board))
#define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board)) #define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board))
#define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(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_ #endif // _BOARDS_H_

View file

@ -112,7 +112,10 @@ GeneralSettings::GeneralSettings()
speakerVolume = 12; 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"); strcpy(bluetoothName, "Taranis");
} }
@ -234,7 +237,7 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board)
potConfig[1] = Board::POT_MULTIPOS_SWITCH; potConfig[1] = Board::POT_MULTIPOS_SWITCH;
potConfig[2] = Board::POT_WITH_DETENT; 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[0] = Board::POT_WITHOUT_DETENT;
potConfig[1] = Board::POT_WITH_DETENT; potConfig[1] = Board::POT_WITH_DETENT;
} }

View file

@ -18,6 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "boards.h"
#include "helpers.h" #include "helpers.h"
#include "opentxeeprom.h" #include "opentxeeprom.h"
#include "customdebug.h" #include "customdebug.h"
@ -32,18 +33,18 @@ using namespace Board;
#define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || IS_2560(board)) #define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || IS_2560(board))
#define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256) #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_POTS(board, version) (IS_TARANIS_NOT_X9E(board) && version < 216 ? 2 : Boards::getCapability(board, Board::Pots))
#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_SLIDERS(board) (Boards::getCapability(board, Board::Sliders))
#define MAX_MOUSE_ANALOGS(board) (IS_HORUS(board) ? 2 : 0) #define MAX_MOUSE_ANALOGS(board) (Boards::getCapability(board, Board::MouseAnalogs))
#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_SWITCHES(board, version) (Boards::getCapability(board, Board::Switches))
#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : 8) #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) (IS_TARANIS_X7(board) ? 6*3 : (IS_TARANIS_X9E(board) ? 18*3 : (IS_HORUS_OR_TARANIS(board) ? 8*3 : 9))) #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_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_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_TIMERS(board, version) ((IS_ARM(board) && version >= 217) ? 3 : 2)
#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32) #define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) #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_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_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)) #define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16))

View file

@ -32,6 +32,7 @@
#define M128_VARIANT 0x8000 #define M128_VARIANT 0x8000
#define TARANIS_X9E_VARIANT 0x8000 #define TARANIS_X9E_VARIANT 0x8000
#define TARANIS_X7_VARIANT 0x4000 #define TARANIS_X7_VARIANT 0x4000
#define TARANIS_XLITE_VARIANT 0x4000
#define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT) #define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT)
#define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS) #define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS)

View file

@ -83,6 +83,8 @@ const char * OpenTxEepromInterface::getName()
return "OpenTX for FrSky Taranis X9E"; return "OpenTX for FrSky Taranis X9E";
case BOARD_TARANIS_X7: case BOARD_TARANIS_X7:
return "OpenTX for FrSky Taranis X7"; return "OpenTX for FrSky Taranis X7";
case BOARD_TARANIS_XLITE:
return "OpenTX for FrSky Taranis X-Lite";
case BOARD_SKY9X: case BOARD_SKY9X:
return "OpenTX for Sky9x board / 9X"; return "OpenTX for Sky9x board / 9X";
case BOARD_9XRPRO: case BOARD_9XRPRO:
@ -324,6 +326,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
else if (IS_TARANIS_X7(board)) { else if (IS_TARANIS_X7(board)) {
variant |= TARANIS_X7_VARIANT; variant |= TARANIS_X7_VARIANT;
} }
else if (IS_TARANIS_XLITE(board)) {
variant |= TARANIS_XLITE_VARIANT;
}
OpenTxGeneralData generator((GeneralSettings &)radioData.generalSettings, board, version, variant); OpenTxGeneralData generator((GeneralSettings &)radioData.generalSettings, board, version, variant);
// generator.Dump(); // generator.Dump();
@ -534,7 +539,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
case SoundPitch: case SoundPitch:
return 1; return 1;
case Haptic: 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: case ModelTrainerEnable:
if (IS_HORUS_OR_TARANIS(board)) if (IS_HORUS_OR_TARANIS(board))
return 1; return 1;
@ -543,7 +548,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
case MaxVolume: case MaxVolume:
return (IS_ARM(board) ? 23 : 7); return (IS_ARM(board) ? 23 : 7);
case MaxContrast: case MaxContrast:
if (IS_TARANIS_X7(board)) if (IS_TARANIS_SMALL(board))
return 30; return 30;
else else
return 45; return 45;
@ -631,7 +636,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
case LcdWidth: case LcdWidth:
if (IS_HORUS(board)) if (IS_HORUS(board))
return 480; return 480;
else if (IS_TARANIS_X7(board)) else if (IS_TARANIS_SMALL(board))
return 128; return 128;
else if (IS_TARANIS(board)) else if (IS_TARANIS(board))
return 212; return 212;
@ -645,7 +650,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
case LcdDepth: case LcdDepth:
if (IS_HORUS(board)) if (IS_HORUS(board))
return 16; return 16;
else if (IS_TARANIS_X7(board)) else if (IS_TARANIS_SMALL(board))
return 1; return 1;
else if (IS_TARANIS(board)) else if (IS_TARANIS(board))
return 4; return 4;
@ -689,6 +694,8 @@ int OpenTxFirmware::getCapability(::Capability capability)
return TARANIS_X9E_VARIANT; return TARANIS_X9E_VARIANT;
else if (IS_TARANIS_X7(board)) else if (IS_TARANIS_X7(board))
return TARANIS_X7_VARIANT; return TARANIS_X7_VARIANT;
else if (IS_TARANIS_XLITE(board))
return TARANIS_XLITE_VARIANT;
else else
return 0; return 0;
case MavlinkTelemetry: case MavlinkTelemetry:
@ -887,6 +894,7 @@ EepromLoadErrors OpenTxEepromInterface::checkVersion(unsigned int version)
bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant) bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant)
{ {
bool variantError = false;
if (board == BOARD_M128 && !(variant & M128_VARIANT)) { if (board == BOARD_M128 && !(variant & M128_VARIANT)) {
if (version == 212) { if (version == 212) {
uint8_t tmp[1000]; 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 << ")"; qWarning() << " wrong variant (" << variant << ")";
return false; 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; return true;
} }
@ -1167,12 +1173,14 @@ void registerOpenTxFirmwares()
/* FrSky X7 board */ /* FrSky X7 board */
firmware = new OpenTxFirmware("opentx-x7", QCoreApplication::translate("Firmware", "FrSky Taranis X7 / X7S"), BOARD_TARANIS_X7); firmware = new OpenTxFirmware("opentx-x7", QCoreApplication::translate("Firmware", "FrSky Taranis X7 / X7S"), BOARD_TARANIS_X7);
// No mixersmon for now addOpenTxTaranisOptions(firmware);
addOpenTxFrskyOptions(firmware);
firmware->addOption("internalppm", QCoreApplication::translate("Firmware", "Support for PPM internal module hack"));
firmware->addOption("sqt5font", QCoreApplication::translate("Firmware", "Use alternative SQT5 font"));
registerOpenTxFirmware(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 */ /* FrSky X10 board */
firmware = new OpenTxFirmware("opentx-x10", QCoreApplication::translate("Firmware", "FrSky Horus X10 / X10S"), BOARD_X10); firmware = new OpenTxFirmware("opentx-x10", QCoreApplication::translate("Firmware", "FrSky Horus X10 / X10S"), BOARD_X10);
addOpenTxFrskyOptions(firmware); addOpenTxFrskyOptions(firmware);

View file

@ -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") tr("TrmR"), tr("TrmE"), tr("TrmT"), tr("TrmA"), tr("Trm5"), tr("Trm6")
}; };
static const QString trims2[] = {
tr("TrmH"), tr("TrmV")
};
static const QString special[] = { static const QString special[] = {
tr("Batt"), tr("Time"), tr("Timer1"), tr("Timer2"), tr("Timer3"), 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; return result;
case SOURCE_TYPE_TRIM: 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: case SOURCE_TYPE_ROTARY_ENCODER:
return CHECK_IN_ARRAY(rotary, index); return CHECK_IN_ARRAY(rotary, index);
case SOURCE_TYPE_MAX: case SOURCE_TYPE_MAX:
return tr("MAX"); return tr("MAX");

View file

@ -45,6 +45,11 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen
tr("Trim 6 Down"), tr("Trim 6 Up") 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[] = { static const QString rotaryEncoders[] = {
tr("REa"), tr("REb") 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); return swName + "_" + QString::number(qr.rem + 1);
case SWITCH_TYPE_TRIM: 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: case SWITCH_TYPE_ROTARY_ENCODER:
return CHECK_IN_ARRAY(rotaryEncoders, index-1); return CHECK_IN_ARRAY(rotaryEncoders, index-1);

View file

@ -143,7 +143,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
setupSwitchType(16, ui->sqLabel, ui->sqName, ui->sqType); setupSwitchType(16, ui->sqLabel, ui->sqName, ui->sqType);
setupSwitchType(17, ui->srLabel, ui->srName, ui->srType); 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); ui->serialPortMode->setCurrentIndex(generalSettings.hw_uartMode);
} }
else { else {

View file

@ -1,7 +1,7 @@
include(CMakeForceCompiler) include(CMakeForceCompiler)
include(Bitmaps) 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(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) 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) if(PCB STREQUAL X12S OR PCB STREQUAL X10)
include(targets/horus/CMakeLists.txt) 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) include(targets/taranis/CMakeLists.txt)
elseif(PCB STREQUAL SKY9X OR PCB STREQUAL 9XRPRO OR PCB STREQUAL AR9X) elseif(PCB STREQUAL SKY9X OR PCB STREQUAL 9XRPRO OR PCB STREQUAL AR9X)
include(targets/sky9x/CMakeLists.txt) include(targets/sky9x/CMakeLists.txt)
@ -166,7 +166,8 @@ else()
add_definitions(-DEEPROM -DEEPROM_RAW) add_definitions(-DEEPROM -DEEPROM_RAW)
endif() 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) set(SRC ${SRC} storage/eeprom_conversions.cpp)
endif() endif()
@ -491,7 +492,7 @@ if(NOT MSVC)
endif() 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) add_subdirectory(targets/common/arm/stm32/bootloader)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader) include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader)
set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} bootloader) set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} bootloader)

View file

@ -44,7 +44,7 @@ enum BluetoothStates {
#define LEN_BLUETOOTH_ADDR 16 #define LEN_BLUETOOTH_ADDR 16
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
extern uint8_t btChipPresent; extern uint8_t btChipPresent;
#endif #endif

View file

@ -117,9 +117,9 @@ enum CurveType {
}; };
#if defined(CPUARM) #if defined(CPUARM)
#define MIN_POINTS_PER_CURVE 3 #define MIN_POINTS_PER_CURVE 3
#else #else
#define MIN_POINTS_PER_CURVE 3 #define MIN_POINTS_PER_CURVE 3
#endif #endif
#define MAX_POINTS_PER_CURVE 17 #define MAX_POINTS_PER_CURVE 17
@ -136,18 +136,7 @@ enum CurveType {
#define LEN_FUNCTION_NAME 6 #define LEN_FUNCTION_NAME 6
#define MAX_CURVES 32 #define MAX_CURVES 32
#define MAX_CURVE_POINTS 512 #define MAX_CURVE_POINTS 512
#elif defined(PCBSKY9X) || defined(PCBX7) #elif LCD_W == 212
#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)
#define LEN_MODEL_NAME 12 #define LEN_MODEL_NAME 12
#define LEN_TIMER_NAME 8 #define LEN_TIMER_NAME 8
#define LEN_FLIGHT_MODE_NAME 10 #define LEN_FLIGHT_MODE_NAME 10
@ -159,6 +148,17 @@ enum CurveType {
#define LEN_FUNCTION_NAME 8 #define LEN_FUNCTION_NAME 8
#define MAX_CURVES 32 #define MAX_CURVES 32
#define MAX_CURVE_POINTS 512 #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 #else
#define LEN_MODEL_NAME 10 #define LEN_MODEL_NAME 10
#define LEN_FLIGHT_MODE_NAME 6 #define LEN_FLIGHT_MODE_NAME 6
@ -189,15 +189,15 @@ enum CurveType {
#endif #endif
#if defined(PCBX10) #if defined(PCBX10)
#define NUM_AUX_TRIMS 2 #define NUM_TRIMS (NUM_STICKS + 2)
#define NUM_MOUSE_ANALOGS 2 #define NUM_MOUSE_ANALOGS 2
#define NUM_DUMMY_ANAS 2 #define NUM_DUMMY_ANAS 2
#elif defined(PCBHORUS) #elif defined(PCBHORUS)
#define NUM_AUX_TRIMS 2 #define NUM_TRIMS (NUM_STICKS + 2)
#define NUM_MOUSE_ANALOGS 2 #define NUM_MOUSE_ANALOGS 2
#define NUM_DUMMY_ANAS 0 #define NUM_DUMMY_ANAS 0
#else #else
#define NUM_AUX_TRIMS 0 #define NUM_TRIMS NUM_STICKS
#define NUM_MOUSE_ANALOGS 0 #define NUM_MOUSE_ANALOGS 0
#define NUM_DUMMY_ANAS 0 #define NUM_DUMMY_ANAS 0
#endif #endif
@ -266,7 +266,7 @@ enum BeeperMode {
#if defined(BLUETOOTH) #if defined(BLUETOOTH)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_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 #define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE
#else #else
#define TRAINER_MODE_MAX() HAS_WIRELESS_TRAINER_HARDWARE() ? TRAINER_MODE_MASTER_BATTERY_COMPARTMENT : TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE #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, 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_SA0 = SWSRC_FIRST_SWITCH,
SWSRC_SA1, SWSRC_SA1,
SWSRC_SA2, SWSRC_SA2,
@ -542,7 +550,7 @@ enum SwitchSources {
SWSRC_SD0, SWSRC_SD0,
SWSRC_SD1, SWSRC_SD1,
SWSRC_SD2, SWSRC_SD2,
#if !defined(PCBX7) #if !defined(PCBX7) && !defined(PCBXLITE)
SWSRC_SE0, SWSRC_SE0,
SWSRC_SE1, SWSRC_SE1,
SWSRC_SE2, SWSRC_SE2,
@ -550,7 +558,7 @@ enum SwitchSources {
SWSRC_SF0, SWSRC_SF0,
SWSRC_SF1, SWSRC_SF1,
SWSRC_SF2, SWSRC_SF2,
#if !defined(PCBX7) #if !defined(PCBX7) && !defined(PCBXLITE)
SWSRC_SG0, SWSRC_SG0,
SWSRC_SG1, SWSRC_SG1,
SWSRC_SG2, SWSRC_SG2,
@ -618,18 +626,17 @@ enum SwitchSources {
SWSRC_TrimRudRight, SWSRC_TrimRudRight,
SWSRC_TrimEleDown, SWSRC_TrimEleDown,
SWSRC_TrimEleUp, SWSRC_TrimEleUp,
#if NUM_TRIMS > 2
SWSRC_TrimThrDown, SWSRC_TrimThrDown,
SWSRC_TrimThrUp, SWSRC_TrimThrUp,
SWSRC_TrimAilLeft, SWSRC_TrimAilLeft,
SWSRC_TrimAilRight, SWSRC_TrimAilRight,
#if defined(PCBHORUS) #endif
#if NUM_TRIMS > 4
SWSRC_TrimT5Down, SWSRC_TrimT5Down,
SWSRC_TrimT5Up, SWSRC_TrimT5Up,
SWSRC_TrimT6Down, SWSRC_TrimT6Down,
SWSRC_TrimT6Up, SWSRC_TrimT6Up,
SWSRC_LAST_TRIM = SWSRC_TrimT6Up,
#else
SWSRC_LAST_TRIM = SWSRC_TrimAilRight,
#endif #endif
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
@ -689,6 +696,8 @@ enum SwitchSources {
#endif #endif
}; };
#define SWSRC_LAST_TRIM (SWSRC_FIRST_TRIM + 2*NUM_TRIMS - 1)
enum MixSources { enum MixSources {
MIXSRC_NONE, MIXSRC_NONE,
@ -730,7 +739,7 @@ enum MixSources {
MIXSRC_SLIDER3, LUA_EXPORT("lcs", "Left center slider (X9E only)") MIXSRC_SLIDER3, LUA_EXPORT("lcs", "Left center slider (X9E only)")
MIXSRC_SLIDER4, LUA_EXPORT("rcs", "Right center slider (X9E only)") MIXSRC_SLIDER4, LUA_EXPORT("rcs", "Right center slider (X9E only)")
MIXSRC_LAST_POT = MIXSRC_SLIDER4, MIXSRC_LAST_POT = MIXSRC_SLIDER4,
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
MIXSRC_POT1 = MIXSRC_FIRST_POT, LUA_EXPORT("s1", "Potentiometer 1") MIXSRC_POT1 = MIXSRC_FIRST_POT, LUA_EXPORT("s1", "Potentiometer 1")
MIXSRC_POT2, LUA_EXPORT("s2", "Potentiometer 2") MIXSRC_POT2, LUA_EXPORT("s2", "Potentiometer 2")
MIXSRC_LAST_POT = MIXSRC_POT2, MIXSRC_LAST_POT = MIXSRC_POT2,
@ -791,7 +800,11 @@ enum MixSources {
MIXSRC_FIRST_SWITCH, 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_SA = MIXSRC_FIRST_SWITCH, LUA_EXPORT("sa", "Switch A")
MIXSRC_SB, LUA_EXPORT("sb", "Switch B") MIXSRC_SB, LUA_EXPORT("sb", "Switch B")
MIXSRC_SC, LUA_EXPORT("sc", "Switch C") MIXSRC_SC, LUA_EXPORT("sc", "Switch C")

View file

@ -329,7 +329,7 @@ typedef int16_t gvar_t;
#if defined(CPUARM) #if defined(CPUARM)
PACK(struct FlightModeData { PACK(struct FlightModeData {
trim_t trim[NUM_STICKS+NUM_AUX_TRIMS]; trim_t trim[NUM_TRIMS];
NOBACKUP(char name[LEN_FLIGHT_MODE_NAME]); NOBACKUP(char name[LEN_FLIGHT_MODE_NAME]);
int16_t swtch:9; // swtch of phase[0] is not used int16_t swtch:9; // swtch of phase[0] is not used
int16_t spare:7; int16_t spare:7;
@ -928,7 +928,7 @@ PACK(struct TrainerData {
NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(uint8_t blOffBright:7); \
NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]);
#elif defined(PCBTARANIS) #elif defined(PCBTARANIS)
#if defined(PCBX9E) || defined(PCBX7) #if defined(BLUETOOTH)
#define BLUETOOTH_FIELDS \ #define BLUETOOTH_FIELDS \
uint8_t spare; \ uint8_t spare; \
char bluetoothName[LEN_BLUETOOTH_NAME]; char bluetoothName[LEN_BLUETOOTH_NAME];
@ -1068,13 +1068,13 @@ static inline void check_struct()
/* Difference between Taranis/Horus is LEN_EXPOMIX_NAME */ /* Difference between Taranis/Horus is LEN_EXPOMIX_NAME */
/* LEN_FUNCTION_NAME is the difference in CustomFunctionData */ /* LEN_FUNCTION_NAME is the difference in CustomFunctionData */
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
CHKSIZE(MixData, 20); CHKSIZE(MixData, 20);
CHKSIZE(ExpoData, 17); CHKSIZE(ExpoData, 17);
CHKSIZE(LimitData, 11); CHKSIZE(LimitData, 11);
CHKSIZE(LogicalSwitchData, 9); CHKSIZE(LogicalSwitchData, 9);
CHKSIZE(CustomFunctionData, 11); CHKSIZE(CustomFunctionData, 11);
CHKSIZE(FlightModeData, 36); CHKSIZE(FlightModeData, 28 + 2*NUM_TRIMS);
CHKSIZE(TimerData, 11); CHKSIZE(TimerData, 11);
CHKSIZE(SwashRingData, 8); CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyBarData, 6); CHKSIZE(FrSkyBarData, 6);
@ -1083,10 +1083,6 @@ static inline void check_struct()
CHKSIZE(FrSkyTelemetryData, 104); CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(ModelHeader, 12); CHKSIZE(ModelHeader, 12);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
CHKSIZE(RadioData, 850);
CHKSIZE(ModelData, 6025);
#elif defined(PCBTARANIS) #elif defined(PCBTARANIS)
CHKSIZE(MixData, 22); CHKSIZE(MixData, 22);
CHKSIZE(ExpoData, 19); CHKSIZE(ExpoData, 19);
@ -1102,14 +1098,6 @@ static inline void check_struct()
CHKSIZE(FrSkyTelemetryData, 104); CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(ModelHeader, 24); CHKSIZE(ModelHeader, 24);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
#if defined(PCBX9E)
CHKSIZE(RadioData, 952);
CHKSIZE(ModelData, 6520);
#else
CHKSIZE(RadioData, 872);
CHKSIZE(ModelData, 6507);
#endif
#elif defined(PCBHORUS) #elif defined(PCBHORUS)
CHKSIZE(MixData, 20); CHKSIZE(MixData, 20);
CHKSIZE(ExpoData, 17); CHKSIZE(ExpoData, 17);
@ -1118,12 +1106,9 @@ static inline void check_struct()
CHKSIZE(FlightModeData, 44); CHKSIZE(FlightModeData, 44);
CHKSIZE(TimerData, 16); CHKSIZE(TimerData, 16);
CHKSIZE(SwashRingData, 8); CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyTelemetryData, 5); CHKSIZE(FrSkyTelemetryData, 5);
CHKSIZE(ModelHeader, 27); CHKSIZE(ModelHeader, 27);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
CHKSIZE(RadioData, 847);
CHKSIZE(ModelData, 9380);
CHKSIZE(CustomScreenData, 610); CHKSIZE(CustomScreenData, 610);
CHKSIZE(Topbar::PersistentData, 216); CHKSIZE(Topbar::PersistentData, 216);
#elif defined(PCBSKY9X) #elif defined(PCBSKY9X)
@ -1139,8 +1124,6 @@ static inline void check_struct()
CHKSIZE(FrSkyTelemetryData, 88); CHKSIZE(FrSkyTelemetryData, 88);
CHKSIZE(ModelHeader, 12); CHKSIZE(ModelHeader, 12);
CHKTYPE(CurveData, 4); CHKTYPE(CurveData, 4);
CHKSIZE(RadioData, 727);
CHKSIZE(ModelData, 5188);
#else #else
// Common for all variants // Common for all variants
CHKSIZE(LimitData, 5); CHKSIZE(LimitData, 5);
@ -1199,6 +1182,26 @@ static inline void check_struct()
#endif #endif
CHKSIZE(TrainerData, 16); 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 CHKSIZE
#undef CHKSIZEUNION #undef CHKSIZEUNION
} }

View file

@ -279,7 +279,7 @@ void evalFunctions()
#endif #endif
#if defined(GVARS) #if defined(GVARS)
for (uint8_t i=0; i<NUM_STICKS+NUM_AUX_TRIMS; i++) { for (uint8_t i=0; i<NUM_TRIMS; i++) {
trimGvar[i] = -1; trimGvar[i] = -1;
} }
#endif #endif

View file

@ -23,7 +23,7 @@
#if defined(CPUARM) #if defined(CPUARM)
void menuRadioSpecialFunctions(event_t event) void menuRadioSpecialFunctions(event_t event)
{ {
#if defined(PCBX7) #if defined(PCBTARANIS)
const CustomFunctionData * cfn = &g_eeGeneral.customFn[menuVerticalPosition]; const CustomFunctionData * cfn = &g_eeGeneral.customFn[menuVerticalPosition];
if (!CFN_SWITCH(cfn) && menuHorizontalPosition < 0 && event==EVT_KEY_BREAK(KEY_ENTER)) { if (!CFN_SWITCH(cfn) && menuHorizontalPosition < 0 && event==EVT_KEY_BREAK(KEY_ENTER)) {
menuHorizontalPosition = 0; menuHorizontalPosition = 0;

View file

@ -23,7 +23,7 @@
#include "keys.h" #include "keys.h"
#if defined(PCBX7) #if defined(PCBTARANIS)
typedef int8_t horzpos_t; typedef int8_t horzpos_t;
#define NAVIGATION_LINE_BY_LINE 0x40 #define NAVIGATION_LINE_BY_LINE 0x40
#define IS_LINE_SELECTED(sub, k) ((sub)==(k) && menuHorizontalPosition < 0) #define IS_LINE_SELECTED(sub, k) ((sub)==(k) && menuHorizontalPosition < 0)

View file

@ -55,28 +55,28 @@ FlightModesType editFlightModes(coord_t x, coord_t y, event_t event, FlightModes
} }
#endif #endif
enum MenuModelPhaseItems { enum MenuModelFlightModeItems {
ITEM_MODEL_PHASE_NAME, ITEM_MODEL_FLIGHT_MODE_NAME,
ITEM_MODEL_PHASE_SWITCH, ITEM_MODEL_FLIGHT_MODE_SWITCH,
ITEM_MODEL_PHASE_TRIMS, ITEM_MODEL_FLIGHT_MODE_TRIMS,
IF_ROTARY_ENCODERS(ITEM_MODEL_PHASE_ROTARY_ENCODERS) IF_ROTARY_ENCODERS(ITEM_MODEL_FLIGHT_MODE_ROTARY_ENCODERS)
ITEM_MODEL_PHASE_FADE_IN, ITEM_MODEL_FLIGHT_MODE_FADE_IN,
ITEM_MODEL_PHASE_FADE_OUT, ITEM_MODEL_FLIGHT_MODE_FADE_OUT,
#if defined(GVARS) && !defined(PCBSTD) #if defined(GVARS) && !defined(PCBSTD)
ITEM_MODEL_PHASE_GVARS_LABEL, ITEM_MODEL_FLIGHT_MODE_GVARS_LABEL,
ITEM_MODEL_PHASE_GV1, ITEM_MODEL_FLIGHT_MODE_GV1,
ITEM_MODEL_PHASE_GV2, ITEM_MODEL_FLIGHT_MODE_GV2,
ITEM_MODEL_PHASE_GV3, ITEM_MODEL_FLIGHT_MODE_GV3,
ITEM_MODEL_PHASE_GV4, ITEM_MODEL_FLIGHT_MODE_GV4,
ITEM_MODEL_PHASE_GV5, ITEM_MODEL_FLIGHT_MODE_GV5,
#if defined(CPUARM) #if defined(CPUARM)
ITEM_MODEL_PHASE_GV6, ITEM_MODEL_FLIGHT_MODE_GV6,
ITEM_MODEL_PHASE_GV7, ITEM_MODEL_FLIGHT_MODE_GV7,
ITEM_MODEL_PHASE_GV8, ITEM_MODEL_FLIGHT_MODE_GV8,
ITEM_MODEL_PHASE_GV9, ITEM_MODEL_FLIGHT_MODE_GV9,
#endif #endif
#endif #endif
ITEM_MODEL_PHASE_MAX ITEM_MODEL_FLIGHT_MODE_MAX
}; };
bool isTrimModeAvailable(int mode) bool isTrimModeAvailable(int mode)
@ -90,16 +90,16 @@ void menuModelFlightModeOne(event_t event)
drawFlightMode(13*FW, 0, s_currIdx+1, (getFlightMode()==s_currIdx ? BOLD : 0)); drawFlightMode(13*FW, 0, s_currIdx+1, (getFlightMode()==s_currIdx ? BOLD : 0));
#if defined(GVARS) && !defined(GVARS_IN_CURVES_SCREEN) #if defined(GVARS) && !defined(GVARS_IN_CURVES_SCREEN)
#if defined(PCBX7) #if defined(PCBTARANIS)
#define VERTICAL_SHIFT (ITEM_MODEL_PHASE_FADE_IN-ITEM_MODEL_PHASE_TRIMS) #define VERTICAL_SHIFT (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_TRIMS)
static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 3, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1, 1}; static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 3, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1, 1};
#else // PCBX7 #else
#define VERTICAL_SHIFT (ITEM_MODEL_PHASE_FADE_IN-ITEM_MODEL_PHASE_SWITCH) #define VERTICAL_SHIFT (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH)
static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1}; static const pm_uint8_t mstate_tab_fm1[] PROGMEM = {0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, 1};
#endif // PCBX7 #endif
static const pm_uint8_t mstate_tab_others[] PROGMEM = {0, 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2}; static const pm_uint8_t mstate_tab_others[] PROGMEM = {0, 0, 3, IF_ROTARY_ENCODERS(NUM_ROTARY_ENCODERS-1) 0, 0, (uint8_t)-1, 2, 2, 2, 2, 2};
check(event, 0, NULL, 0, (s_currIdx == 0) ? mstate_tab_fm1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_PHASE_MAX - HEADER_LINE - (s_currIdx==0 ? (ITEM_MODEL_PHASE_FADE_IN-ITEM_MODEL_PHASE_SWITCH-1) : 0)); check(event, 0, NULL, 0, (s_currIdx == 0) ? mstate_tab_fm1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_FLIGHT_MODE_MAX - HEADER_LINE - (s_currIdx==0 ? (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH-1) : 0));
TITLE(STR_MENUFLIGHTMODE); TITLE(STR_MENUFLIGHTMODE);
@ -113,29 +113,29 @@ void menuModelFlightModeOne(event_t event)
int8_t editMode = s_editMode; int8_t editMode = s_editMode;
#if defined(GVARS) && !defined(PCBSTD) #if defined(GVARS) && !defined(PCBSTD)
if (s_currIdx == 0 && sub>=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<LCD_LINES-1; k++) { for (uint8_t k=0; k<LCD_LINES-1; k++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH; coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
int8_t i = k + menuVerticalOffset; int8_t i = k + menuVerticalOffset;
if (s_currIdx == 0 && i>=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); uint8_t attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0);
#else #else
for (uint8_t i=0, k=0, y=PHASE_ONE_FIRST_LINE; i<ITEM_MODEL_PHASE_MAX; i++, k++, y+=FH) { for (uint8_t i=0, k=0, y=PHASE_ONE_FIRST_LINE; i<ITEM_MODEL_FLIGHT_MODE_MAX; i++, k++, y+=FH) {
if (s_currIdx == 0 && i==ITEM_MODEL_PHASE_SWITCH) i = ITEM_MODEL_PHASE_FADE_IN; if (s_currIdx == 0 && i==ITEM_MODEL_FLIGHT_MODE_SWITCH) i = ITEM_MODEL_FLIGHT_MODE_FADE_IN;
uint8_t attr = (sub==k ? (editMode>0 ? BLINK|INVERS : INVERS) : 0); uint8_t attr = (sub==k ? (editMode>0 ? BLINK|INVERS : INVERS) : 0);
#endif #endif
switch (i) { 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); editSingleName(MIXES_2ND_COLUMN, y, STR_PHASENAME, fm->name, sizeof(fm->name), event, attr);
break; break;
case ITEM_MODEL_PHASE_SWITCH: case ITEM_MODEL_FLIGHT_MODE_SWITCH:
fm->swtch = editSwitch(MIXES_2ND_COLUMN, y, fm->swtch, attr, event); fm->swtch = editSwitch(MIXES_2ND_COLUMN, y, fm->swtch, attr, event);
break; break;
case ITEM_MODEL_PHASE_TRIMS: case ITEM_MODEL_FLIGHT_MODE_TRIMS:
lcdDrawTextAlignedLeft(y, STR_TRIMS); lcdDrawTextAlignedLeft(y, STR_TRIMS);
#if defined(CPUARM) #if defined(CPUARM)
for (uint8_t t = 0; t < NUM_STICKS; t++) { for (uint8_t t = 0; t < NUM_STICKS; t++) {
@ -164,7 +164,7 @@ void menuModelFlightModeOne(event_t event)
break; break;
#if ROTARY_ENCODERS > 0 #if ROTARY_ENCODERS > 0
case ITEM_MODEL_PHASE_ROTARY_ENCODERS: case ITEM_MODEL_FLIGHT_MODE_ROTARY_ENCODERS:
lcdDrawTextAlignedLeft(y, STR_ROTARY_ENCODER); lcdDrawTextAlignedLeft(y, STR_ROTARY_ENCODER);
for (uint8_t t=0; t<NUM_ROTARY_ENCODERS; t++) { for (uint8_t t=0; t<NUM_ROTARY_ENCODERS; t++) {
putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, menuHorizontalPosition==t ? attr : 0); putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, menuHorizontalPosition==t ? attr : 0);
@ -181,22 +181,22 @@ void menuModelFlightModeOne(event_t event)
break; break;
#endif #endif
case ITEM_MODEL_PHASE_FADE_IN: case ITEM_MODEL_FLIGHT_MODE_FADE_IN:
fm->fadeIn = EDIT_DELAY(0, y, event, attr, STR_FADEIN, fm->fadeIn); fm->fadeIn = EDIT_DELAY(0, y, event, attr, STR_FADEIN, fm->fadeIn);
break; 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); fm->fadeOut = EDIT_DELAY(0, y, event, attr, STR_FADEOUT, fm->fadeOut);
break; break;
#if defined(GVARS) && !defined(PCBSTD) #if defined(GVARS) && !defined(PCBSTD)
case ITEM_MODEL_PHASE_GVARS_LABEL: case ITEM_MODEL_FLIGHT_MODE_GVARS_LABEL:
lcdDrawTextAlignedLeft(y, STR_GLOBAL_VARS); lcdDrawTextAlignedLeft(y, STR_GLOBAL_VARS);
break; break;
default: default:
{ {
uint8_t idx = i-ITEM_MODEL_PHASE_GV1; uint8_t idx = i-ITEM_MODEL_FLIGHT_MODE_GV1;
uint8_t posHorz = menuHorizontalPosition; uint8_t posHorz = menuHorizontalPosition;
if (attr && posHorz > 0 && s_currIdx==0) posHorz++; if (attr && posHorz > 0 && s_currIdx==0) posHorz++;
@ -247,7 +247,7 @@ void menuModelFlightModeOne(event_t event)
#define TRIMS_OFS (-FW/2-4) #define TRIMS_OFS (-FW/2-4)
#define ROTARY_ENC_OFS (2) #define ROTARY_ENC_OFS (2)
#endif #endif
#elif defined(PCBX7) #elif defined(PCBTARANIS)
#define NAME_POS 20 #define NAME_POS 20
#define SWITCH_POS 59 #define SWITCH_POS 59
#define TRIMS_POS 79 #define TRIMS_POS 79
@ -292,14 +292,14 @@ void menuModelFlightModesAll(event_t event)
att = (i==sub ? INVERS : 0); att = (i==sub ? INVERS : 0);
FlightModeData * p = flightModeAddress(i); FlightModeData * p = flightModeAddress(i);
drawFlightMode(0, y, i+1, att|(getFlightMode()==i ? BOLD : 0)); 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); lcdDrawSizedText(NAME_POS, y, p->name, sizeof(p->name), ZCHAR);
#else #else
lcdDrawSizedText(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR); lcdDrawSizedText(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR);
#endif #endif
if (i == 0) { if (i == 0) {
for (uint8_t t=0; t<NUM_STICKS; t++) { for (uint8_t t=0; t<NUM_STICKS; t++) {
#if defined(PCBX7) #if defined(PCBTARANIS)
drawTrimMode(TRIMS_POS+t*FW*2, y, i, t, 0); drawTrimMode(TRIMS_POS+t*FW*2, y, i, t, 0);
#else #else
drawShortTrimMode((9+LEN_FLIGHT_MODE_NAME+t)*FW+TRIMS_OFS, y, i, t, 0); drawShortTrimMode((9+LEN_FLIGHT_MODE_NAME+t)*FW+TRIMS_OFS, y, i, t, 0);
@ -307,7 +307,7 @@ void menuModelFlightModesAll(event_t event)
} }
} }
else { else {
#if defined(PCBX7) #if defined(PCBTARANIS)
drawSwitch(SWITCH_POS, y, p->swtch, 0); drawSwitch(SWITCH_POS, y, p->swtch, 0);
for (uint8_t t=0; t<NUM_STICKS; t++) { for (uint8_t t=0; t<NUM_STICKS; t++) {
drawTrimMode(TRIMS_POS+t*FW*2, y, i, t, 0); drawTrimMode(TRIMS_POS+t*FW*2, y, i, t, 0);

View file

@ -612,7 +612,7 @@ void displayMixInfos(coord_t y, MixData *md)
} }
#if defined(CPUARM) #if defined(CPUARM)
void displayMixLine(coord_t y, MixData *md) void displayMixLine(coord_t y, MixData * md)
{ {
if (md->name[0]) { if (md->name[0]) {
lcdDrawSizedText(EXPO_LINE_NAME_POS, y, md->name, sizeof(md->name), ZCHAR); lcdDrawSizedText(EXPO_LINE_NAME_POS, y, md->name, sizeof(md->name), ZCHAR);

View file

@ -20,7 +20,6 @@
#include "opentx.h" #include "opentx.h"
#define MODELSIZE_POS_X 170
#define MODELSEL_W LCD_W #define MODELSEL_W LCD_W
#if defined(NAVIGATION_MENUS) #if defined(NAVIGATION_MENUS)

View file

@ -53,12 +53,12 @@ enum MenuModelSetupItems {
CASE_CPUARM(ITEM_MODEL_CHECKLIST_DISPLAY) CASE_CPUARM(ITEM_MODEL_CHECKLIST_DISPLAY)
ITEM_MODEL_THROTTLE_WARNING, ITEM_MODEL_THROTTLE_WARNING,
ITEM_MODEL_SWITCHES_WARNING, ITEM_MODEL_SWITCHES_WARNING,
#if defined(PCBX7) #if defined(PCBTARANIS)
ITEM_MODEL_POTS_WARNING, ITEM_MODEL_POTS_WARNING,
#endif #endif
ITEM_MODEL_BEEP_CENTER, ITEM_MODEL_BEEP_CENTER,
CASE_CPUARM(ITEM_MODEL_USE_GLOBAL_FUNCTIONS) CASE_CPUARM(ITEM_MODEL_USE_GLOBAL_FUNCTIONS)
#if defined(PCBX7) #if defined(PCBTARANIS)
ITEM_MODEL_INTERNAL_MODULE_LABEL, ITEM_MODEL_INTERNAL_MODULE_LABEL,
ITEM_MODEL_INTERNAL_MODULE_MODE, ITEM_MODEL_INTERNAL_MODULE_MODE,
ITEM_MODEL_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_INTERNAL_MODULE_CHANNELS,
@ -117,7 +117,9 @@ enum MenuModelSetupItems {
#define MODEL_SETUP_RANGE_OFS 4*FW+3 #define MODEL_SETUP_RANGE_OFS 4*FW+3
#define MODEL_SETUP_SET_FAILSAFE_OFS 7*FW-2 #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)) #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) #elif defined(PCBSKY9X) && !defined(REVA)
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE) #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) 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, 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), LABEL(InternalModule),
INTERNAL_MODULE_MODE_ROWS, INTERNAL_MODULE_MODE_ROWS,
@ -537,7 +539,7 @@ void menuModelSetup(event_t event)
g_model.switchWarningEnable ^= (1 << menuHorizontalPosition); g_model.switchWarningEnable ^= (1 << menuHorizontalPosition);
storageDirty(EE_MODEL); storageDirty(EE_MODEL);
#else #else
#if defined(PCBX7) #if defined(PCBTARANIS)
if (menuHorizontalPosition < NUM_SWITCHES) { if (menuHorizontalPosition < NUM_SWITCHES) {
g_model.switchWarningEnable ^= (1 << (menuHorizontalPosition-1)); g_model.switchWarningEnable ^= (1 << (menuHorizontalPosition-1));
#else #else
@ -555,7 +557,7 @@ void menuModelSetup(event_t event)
g_model.switchWarningState = switches_states; g_model.switchWarningState = switches_states;
AUDIO_WARNING1(); AUDIO_WARNING1();
storageDirty(EE_MODEL); storageDirty(EE_MODEL);
#elif defined(PCBX7) #elif defined(PCBTARANIS)
if (attr && menuHorizontalPosition == 0) { if (attr && menuHorizontalPosition == 0) {
getMovedSwitch(); getMovedSwitch();
g_model.switchWarningState = switches_states; g_model.switchWarningState = switches_states;
@ -577,7 +579,7 @@ void menuModelSetup(event_t event)
} }
} }
LcdFlags line = attr; LcdFlags line = attr;
#if defined(PCBX7) #if defined(PCBTARANIS)
int current = 0; int current = 0;
for (int i=0; i<NUM_SWITCHES-1; i++) { for (int i=0; i<NUM_SWITCHES-1; i++) {
if (SWITCH_WARNING_ALLOWED(i)) { if (SWITCH_WARNING_ALLOWED(i)) {
@ -593,7 +595,7 @@ void menuModelSetup(event_t event)
if (attr && menuHorizontalPosition == 0) { if (attr && menuHorizontalPosition == 0) {
lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, (NUM_SWITCHES-1)*(2*FW), 1+FH*((current+7)/8)); lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, (NUM_SWITCHES-1)*(2*FW), 1+FH*((current+7)/8));
} }
#else // PCBX7 #else
for (uint8_t i=0; i<NUM_SWITCHES-1/*not on TRN switch*/; i++) { for (uint8_t i=0; i<NUM_SWITCHES-1/*not on TRN switch*/; i++) {
uint8_t swactive = !(g_model.switchWarningEnable & 1 << i); uint8_t swactive = !(g_model.switchWarningEnable & 1 << i);
attr = 0; attr = 0;
@ -620,10 +622,10 @@ void menuModelSetup(event_t event)
lcdDrawText(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, PSTR("<]"), (menuHorizontalPosition == NUM_SWITCHES-1 && !NO_HIGHLIGHT()) ? line : 0); lcdDrawText(MODEL_SETUP_2ND_COLUMN+(NUM_SWITCHES*FW), y, PSTR("<]"), (menuHorizontalPosition == NUM_SWITCHES-1 && !NO_HIGHLIGHT()) ? line : 0);
#endif #endif
} }
#endif // PCBX7 #endif
break; break;
} }
#if defined(PCBX7) #if defined(PCBTARANIS)
case ITEM_MODEL_POTS_WARNING: case ITEM_MODEL_POTS_WARNING:
lcdDrawTextAlignedLeft(y, STR_POTWARNING); lcdDrawTextAlignedLeft(y, STR_POTWARNING);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0); lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""Man\0""Auto"), g_model.potsWarnMode, (menuHorizontalPosition == 0) ? attr : 0);
@ -670,7 +672,7 @@ void menuModelSetup(event_t event)
} }
} }
break; break;
#endif // PCBX7 #endif
case ITEM_MODEL_BEEP_CENTER: case ITEM_MODEL_BEEP_CENTER:
lcdDrawTextAlignedLeft(y, STR_BEEPCTR); lcdDrawTextAlignedLeft(y, STR_BEEPCTR);
@ -698,7 +700,7 @@ void menuModelSetup(event_t event)
break; break;
#endif #endif
#if defined(PCBX7) #if defined(PCBTARANIS)
case ITEM_MODEL_INTERNAL_MODULE_LABEL: case ITEM_MODEL_INTERNAL_MODULE_LABEL:
lcdDrawTextAlignedLeft(y, TR_INTERNALRF); lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
break; break;
@ -901,6 +903,8 @@ void menuModelSetup(event_t event)
#if defined(PCBX7) #if defined(PCBX7)
case ITEM_MODEL_TRAINER_CHANNELS: case ITEM_MODEL_TRAINER_CHANNELS:
#endif
#if defined(PCBTARANIS)
case ITEM_MODEL_INTERNAL_MODULE_CHANNELS: case ITEM_MODEL_INTERNAL_MODULE_CHANNELS:
#endif #endif
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
@ -937,6 +941,8 @@ void menuModelSetup(event_t event)
#if defined(PCBX7) #if defined(PCBX7)
case ITEM_MODEL_TRAINER_PARAMS: case ITEM_MODEL_TRAINER_PARAMS:
#endif
#if defined(PCBTARANIS)
case ITEM_MODEL_INTERNAL_MODULE_BIND: case ITEM_MODEL_INTERNAL_MODULE_BIND:
#endif #endif
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
@ -1096,7 +1102,7 @@ void menuModelSetup(event_t event)
} }
#endif #endif
#if defined(PCBX7) #if defined(PCBTARANIS)
case ITEM_MODEL_INTERNAL_MODULE_FAILSAFE: case ITEM_MODEL_INTERNAL_MODULE_FAILSAFE:
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)

View file

@ -333,31 +333,31 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
#endif #endif
if (event==EVT_KEY_FIRST(KEY_RIGHT) || event==EVT_KEY_REPT(KEY_RIGHT) || (s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) { if (event==EVT_KEY_FIRST(KEY_RIGHT) || event==EVT_KEY_REPT(KEY_RIGHT) || (s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) {
do { do {
newval++; newval++;
} while (isValueAvailable && !isValueAvailable(newval) && newval<=i_max); } while (isValueAvailable && !isValueAvailable(newval) && newval<=i_max);
if (newval > i_max) { if (newval > i_max) {
newval = val; newval = val;
killEvents(event); killEvents(event);
AUDIO_KEY_ERROR(); 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)))) { 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 { do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) { if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val-i_min); newval -= min(10, val-i_min);
} }
else { else {
newval--; newval--;
} }
} while (isValueAvailable && !isValueAvailable(newval) && newval>=i_min); } while (isValueAvailable && !isValueAvailable(newval) && newval>=i_min);
if (newval < i_min) { if (newval < i_min) {
newval = val; newval = val;
killEvents(event); killEvents(event);
AUDIO_KEY_ERROR(); AUDIO_KEY_ERROR();
} }
} }
if (!READ_ONLY() && i_min==0 && i_max==1 && (event==EVT_KEY_BREAK(KEY_ENTER) || IS_ROTARY_BREAK(event))) { 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; return newval;
} }
#endif #endif
#else #else
int16_t checkIncDec(event_t event, int16_t val, int16_t i_min, int16_t i_max, uint8_t i_flags) int16_t checkIncDec(event_t event, int16_t val, int16_t i_min, int16_t i_max, uint8_t i_flags)
{ {

View file

@ -57,14 +57,14 @@ void menuRadioDiagAnalogs(event_t event)
} }
// RAS // RAS
#if defined(PCBX7) #if defined(PCBTARANIS)
if(IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON()) { 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; coord_t y = MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 1 * FH + 2;
lcdDrawText(1, y, "RAS:"); lcdDrawText(1, y, "RAS:");
lcdDrawNumber(1 + 4*FW, y, telemetryData.swr.value, LEFT); lcdDrawNumber(1 + 4*FW, y, telemetryData.swr.value, LEFT);
} }
#elif defined(CPUARM) #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; 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; 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); lcdDrawNumber(64+5+6*FW-3, 1+4*FH, BandGap, RIGHT);
#endif #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); 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); 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) #elif defined(PCBSKY9X)

View file

@ -49,16 +49,22 @@ void menuRadioDiagKeys(event_t event)
displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i); displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i);
} }
if (i < 6) { if (i < TRM_BASE) {
y = MENU_HEADER_HEIGHT + FH + FH*i;
#if defined(PCBX7) #if defined(PCBX7)
if (i > 1) { y = MENU_HEADER_HEIGHT + FH + FH*i;
lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0); if (i >= 2) {
displayKeyState(5*FW+4, y, KEY_MENU+(5-i)); // 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 #else
lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0); y = MENU_HEADER_HEIGHT + FH + FH*i;
displayKeyState(5*FW+2, y, KEY_MENU+(5-i)); lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0);
displayKeyState(5*FW+2, y, KEY_MENU+(TRM_BASE-1-i));
#endif #endif
} }

View file

@ -94,7 +94,7 @@ void menuRadioHardware(event_t event)
} }
#endif // PCBSKY9X #endif // PCBSKY9X
#if defined(PCBX7) #if defined(PCBTARANIS)
enum MenuRadioHardwareItems { enum MenuRadioHardwareItems {
ITEM_RADIO_HARDWARE_LABEL_STICKS, ITEM_RADIO_HARDWARE_LABEL_STICKS,
ITEM_RADIO_HARDWARE_STICK1, ITEM_RADIO_HARDWARE_STICK1,
@ -125,14 +125,18 @@ enum MenuRadioHardwareItems {
#define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 #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 #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), #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) #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), #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 #else
#define BLUETOOTH_ROWS #define BLUETOOTH_ROWS
#endif #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) #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_COLUMN1 30
#define HW_SETTINGS_COLUMN2 (30 + 5*FW) #define HW_SETTINGS_COLUMN2 (30 + 5*FW)

View file

@ -21,7 +21,7 @@
#include "opentx.h" #include "opentx.h"
#define BIGSIZE DBLSIZE #define BIGSIZE DBLSIZE
#if defined (PCBX7) #if defined (PCBTARANIS)
#define LBOX_CENTERX (LCD_W/4 + 14) #define LBOX_CENTERX (LCD_W/4 + 14)
#define RBOX_CENTERX (3*LCD_W/4 - 13) #define RBOX_CENTERX (3*LCD_W/4 - 13)
#else #else
@ -544,7 +544,7 @@ void menuMainView(event_t event)
doMainScreenGraphics(); doMainScreenGraphics();
// Switches // Switches
#if defined(PCBX7) #if defined(PCBTARANIS)
for (int i=0; i<NUM_SWITCHES; ++i) { for (int i=0; i<NUM_SWITCHES; ++i) {
if (SWITCH_EXISTS(i)) { if (SWITCH_EXISTS(i)) {
uint8_t x = 2*FW-2, y = 4*FH+i*FH+1; uint8_t x = 2*FW-2, y = 4*FH+i*FH+1;

View file

@ -38,7 +38,7 @@ void menuStatisticsView(event_t event)
break; break;
case EVT_KEY_FIRST(KEY_DOWN): case EVT_KEY_FIRST(KEY_DOWN):
#if defined(STM32) #if defined(PCBX7)
case EVT_KEY_LONG(KEY_PAGE): case EVT_KEY_LONG(KEY_PAGE):
killEvents(event); killEvents(event);
chainMenu(menuStatisticsDebug2); chainMenu(menuStatisticsDebug2);
@ -158,7 +158,7 @@ void menuStatisticsDebug(event_t event)
case EVT_KEY_FIRST(KEY_UP): case EVT_KEY_FIRST(KEY_UP):
#if defined(STM32) #if defined(PCBX7)
case EVT_KEY_BREAK(KEY_PAGE): case EVT_KEY_BREAK(KEY_PAGE):
chainMenu(menuStatisticsDebug2); chainMenu(menuStatisticsDebug2);
return; return;

View file

@ -38,8 +38,7 @@ void hapticQueue::heartbeat()
#else #else
if (buzzTimeLeft > 0) { if (buzzTimeLeft > 0) {
buzzTimeLeft--; // time gets counted down buzzTimeLeft--; // time gets counted down
#if defined(PCBSKY9X) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBHORUS) #if defined(HAPTIC_PWM)
// TODO define HAPTIC_PWM option
hapticOn(HAPTIC_STRENGTH() * 20); hapticOn(HAPTIC_STRENGTH() * 20);
#else #else
if (hapticTick-- > 0) { if (hapticTick-- > 0) {

View file

@ -342,7 +342,13 @@ void logsWrite()
f_printf(&g_oLogFile, "%d,", calibratedAnalogs[i]); 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,", f_printf(&g_oLogFile, "%d,%d,%d,%d,%d,%d,0x%08X%08X,",
GET_3POS_STATE(SA), GET_3POS_STATE(SA),
GET_3POS_STATE(SB), GET_3POS_STATE(SB),

View file

@ -28,7 +28,7 @@
#endif #endif
int16_t anas [NUM_INPUTS] = {0}; 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}; int32_t chans[MAX_OUTPUT_CHANNELS] = {0};
BeepANACenter bpanaCenter = 0; BeepANACenter bpanaCenter = 0;
@ -534,13 +534,6 @@ void evalInputs(uint8_t mode)
if (v < -RESX) v = -RESX; if (v < -RESX) v = -RESX;
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) { if (g_model.throttleReversed && ch==THR_STICK) {
v = -v; v = -v;
} }

View file

@ -256,14 +256,16 @@ void generalDefault()
#endif #endif
g_eeGeneral.slidersConfig = 0x0f; // 4 sliders g_eeGeneral.slidersConfig = 0x0f; // 4 sliders
g_eeGeneral.blOffBright = 20; g_eeGeneral.blOffBright = 20;
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
g_eeGeneral.potsConfig = 0x07; // S1 = pot without detent, S2 = pot with detent g_eeGeneral.potsConfig = 0x07; // S1 = pot without detent, S2 = pot with detent
#elif defined(PCBTARANIS) #elif defined(PCBTARANIS)
g_eeGeneral.potsConfig = 0x05; // S1 and S2 = pots with detent g_eeGeneral.potsConfig = 0x05; // S1 and S2 = pots with detent
g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent
#endif #endif
#if defined(PCBX7) #if defined(PCBXLITE)
g_eeGeneral.switchConfig = 0x0000000f; // 2x3POS
#elif defined(PCBX7)
g_eeGeneral.switchConfig = 0x000006ff; // 4x3POS, 1x2POS, 1xTOGGLE g_eeGeneral.switchConfig = 0x000006ff; // 4x3POS, 1x2POS, 1xTOGGLE
#elif defined(PCBTARANIS) || defined(PCBHORUS) #elif defined(PCBTARANIS) || defined(PCBHORUS)
g_eeGeneral.switchConfig = 0x00007bff; // 6x3POS, 1x2POS, 1xTOGGLE 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) #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 #endif
#if defined(CPUARM) #if defined(CPUARM)
@ -1630,7 +1638,7 @@ uint16_t s_sum_samples_thr_10s;
void evalTrims() void evalTrims()
{ {
uint8_t phase = mixerCurrentFlightMode; uint8_t phase = mixerCurrentFlightMode;
for (uint8_t i=0; i<NUM_STICKS+NUM_AUX_TRIMS; i++) { for (uint8_t i=0; i<NUM_TRIMS; i++) {
// do trim -> throttle trim if applicable // do trim -> throttle trim if applicable
int16_t trim = getTrimValue(phase, i); int16_t trim = getTrimValue(phase, i);
#if !defined(CPUARM) #if !defined(CPUARM)
@ -2393,18 +2401,18 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim
} }
// reset all trims, except throttle (if throttle trim) // reset all trims, except throttle (if throttle trim)
for (uint8_t i=0; i<NUM_STICKS+NUM_AUX_TRIMS; i++) { for (uint8_t i=0; i<NUM_TRIMS; i++) {
if (i!=THR_STICK || !g_model.thrTrim) { if (i != THR_STICK || !g_model.thrTrim) {
int16_t original_trim = getTrimValue(mixerCurrentFlightMode, i); int16_t original_trim = getTrimValue(mixerCurrentFlightMode, i);
for (uint8_t phase=0; phase<MAX_FLIGHT_MODES; phase++) { for (uint8_t fm=0; fm<MAX_FLIGHT_MODES; fm++) {
#if defined(CPUARM) #if defined(CPUARM)
trim_t trim = getRawTrimValue(phase, i); trim_t trim = getRawTrimValue(fm, i);
if (trim.mode / 2 == phase) if (trim.mode / 2 == fm)
setTrimValue(phase, i, trim.value - original_trim); setTrimValue(fm, i, trim.value - original_trim);
#else #else
trim_t trim = getRawTrimValue(phase, i); trim_t trim = getRawTrimValue(fm, i);
if (trim <= TRIM_EXTENDED_MAX) if (trim <= TRIM_EXTENDED_MAX)
setTrimValue(phase, i, trim - original_trim); setTrimValue(fm, i, trim - original_trim);
#endif #endif
} }
} }

View file

@ -289,7 +289,7 @@
#include "debug.h" #include "debug.h"
#if defined(PCBTARANIS) || defined(PCBHORUS) #if defined(PCBTARANIS) || defined(PCBHORUS)
#define SWSRC_THR SWSRC_SF2 #define SWSRC_THR SWSRC_SB2
#define SWSRC_GEA SWSRC_SG2 #define SWSRC_GEA SWSRC_SG2
#define SWSRC_ID0 SWSRC_SA0 #define SWSRC_ID0 SWSRC_SA0
#define SWSRC_ID1 SWSRC_SA1 #define SWSRC_ID1 SWSRC_SA1
@ -319,7 +319,7 @@ void memswap(void * a, void * b, uint8_t size);
#define IS_POT_AVAILABLE(x) (IS_POT(x) && POT_CONFIG(x)!=POT_NONE) #define IS_POT_AVAILABLE(x) (IS_POT(x) && POT_CONFIG(x)!=POT_NONE)
#define IS_POT_SLIDER_AVAILABLE(x) (IS_POT_AVAILABLE(x) || IS_SLIDER_AVAILABLE(x)) #define IS_POT_SLIDER_AVAILABLE(x) (IS_POT_AVAILABLE(x) || IS_SLIDER_AVAILABLE(x))
#define IS_MULTIPOS_CALIBRATED(cal) (cal->count>0 && cal->count<XPOTS_MULTIPOS_COUNT) #define IS_MULTIPOS_CALIBRATED(cal) (cal->count>0 && cal->count<XPOTS_MULTIPOS_COUNT)
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
#define IS_POT_MULTIPOS(x) (false) #define IS_POT_MULTIPOS(x) (false)
#define IS_POT_WITHOUT_DETENT(x) (false) #define IS_POT_WITHOUT_DETENT(x) (false)
#define IS_POT_SLIDER_AVAILABLE(x) (true) #define IS_POT_SLIDER_AVAILABLE(x) (true)
@ -745,7 +745,7 @@ swsrc_t getMovedSwitch();
#endif #endif
#if defined(GVARS) #if defined(GVARS)
extern int8_t trimGvar[NUM_STICKS+NUM_AUX_TRIMS]; extern int8_t trimGvar[NUM_TRIMS];
#define TRIM_REUSED(idx) trimGvar[idx] >= 0 #define TRIM_REUSED(idx) trimGvar[idx] >= 0
#else #else
#define TRIM_REUSED(idx) 0 #define TRIM_REUSED(idx) 0
@ -875,9 +875,7 @@ void getADC();
#endif #endif
#endif #endif
#if defined(SBUS)
#include "sbus.h" #include "sbus.h"
#endif
void backlightOn(); void backlightOn();
void checkBacklight(); void checkBacklight();
@ -1157,7 +1155,7 @@ LogicalSwitchData * lswAddress(uint8_t idx);
#endif #endif
extern int16_t anas [NUM_INPUTS]; 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 BeepANACenter bpanaCenter;
extern uint8_t s_mixer_first_run_done; extern uint8_t s_mixer_first_run_done;
@ -1431,7 +1429,7 @@ void opentxClose(uint8_t shutdown=true);
void opentxInit(); void opentxInit();
void opentxResume(); void opentxResume();
#if defined(PCBHORUS) || defined(PCBX7) #if defined(STATUS_LEDS)
#define LED_ERROR_BEGIN() ledRed() #define LED_ERROR_BEGIN() ledRed()
#define LED_ERROR_END() ledBlue() #define LED_ERROR_END() ledBlue()
#else #else

View file

@ -247,9 +247,9 @@ void setupPulses(uint8_t port)
#endif #endif
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
case PROTO_MULTIMODULE: case PROTO_MULTIMODULE:
#endif #endif
case PROTO_SBUS: case PROTO_SBUS:
init_sbusOut(port); init_sbusOut(port);
break; break;

View file

@ -64,7 +64,7 @@ PACK(struct Dsm2SerialPulsesData {
}); });
#endif #endif
#if defined(PPM_PIN_UART) #if defined(INTMODULE_USART)
PACK(struct PxxUartPulsesData { PACK(struct PxxUartPulsesData {
uint8_t pulses[64]; uint8_t pulses[64];
uint8_t * ptr; uint8_t * ptr;
@ -74,7 +74,7 @@ PACK(struct PxxUartPulsesData {
#endif #endif
#define MULTIMODULE_BAUDRATE 100000 #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 */ /* 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 */ /* 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 */ /* 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) #if defined(PPM_PIN_SERIAL)
PxxSerialPulsesData pxx; PxxSerialPulsesData pxx;
Dsm2SerialPulsesData dsm2; Dsm2SerialPulsesData dsm2;
#else #endif
#if defined(INTMODULE_PULSES) || defined(EXTMODULE_PULSES)
PxxTimerPulsesData pxx; PxxTimerPulsesData pxx;
Dsm2TimerPulsesData dsm2; Dsm2TimerPulsesData dsm2;
#endif #endif
#if defined(PPM_PIN_UART) #if defined(INTMODULE_USART)
PxxUartPulsesData pxx_uart; PxxUartPulsesData pxx_uart;
#endif #endif
PpmPulsesData<pulse_duration_t> ppm; PpmPulsesData<pulse_duration_t> ppm;

View file

@ -60,7 +60,7 @@ const uint16_t CRCTable[]=
0x7bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78 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) inline void uartPutPcmPart(uint8_t port, uint8_t byte)
{ {
if (0x7E == byte) { if (0x7E == byte) {
@ -204,7 +204,7 @@ void pxxPutPcmCrc(uint8_t port)
pxxPutPcmByte(port, pulseValue); pxxPutPcmByte(port, pulseValue);
} }
#if defined(PPM_PIN_UART) #if defined(INTMODULE_USART)
inline void initPcmArray(uint8_t port) inline void initPcmArray(uint8_t port)
{ {
if (IS_UART_MODULE(port)) if (IS_UART_MODULE(port))

View file

@ -45,7 +45,7 @@ void processSbusFrame(uint8_t * sbus, int16_t * pulses, uint32_t size)
return; // SBUS invalid frame or failsafe mode return; // SBUS invalid frame or failsafe mode
} }
sbus++; // skip start byte sbus++; // skip start byte
uint32_t inputbitsavailable = 0; uint32_t inputbitsavailable = 0;
uint32_t inputbits = 0; uint32_t inputbits = 0;

View file

@ -125,6 +125,9 @@ const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t ext
#elif defined(PCBX9E) #elif defined(PCBX9E)
#define OTX_FOURCC 0x3578746F // otx for Taranis X9E #define OTX_FOURCC 0x3578746F // otx for Taranis X9E
#define O9X_FOURCC 0x3378396F // o9x 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) #elif defined(PCBX7)
#define OTX_FOURCC 0x3678746F // otx for Taranis X7 #define OTX_FOURCC 0x3678746F // otx for Taranis X7
#define O9X_FOURCC 0x3378396F // o9x for Taranis X7 #define O9X_FOURCC 0x3378396F // o9x for Taranis X7

View file

@ -250,9 +250,19 @@ void Open9xSim::updateKeysAndSwitches(bool start)
KEY_Down, KEY_DOWN, KEY_Down, KEY_DOWN,
KEY_Right, KEY_RIGHT, KEY_Right, KEY_RIGHT,
KEY_Left, KEY_LEFT, 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) #elif defined(PCBTARANIS)
KEY_Page_Up, KEY_MENU, KEY_Page_Up, KEY_MENU,
#if defined(KEYS_GPIO_REG_PAGE)
KEY_Page_Down, KEY_PAGE, KEY_Page_Down, KEY_PAGE,
#endif
KEY_Return, KEY_ENTER, KEY_Return, KEY_ENTER,
KEY_BackSpace, KEY_EXIT, KEY_BackSpace, KEY_EXIT,
KEY_Up, KEY_PLUS, KEY_Up, KEY_PLUS,

View file

@ -586,7 +586,7 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name)
eeLoadModelHeader(i_fileDst, &modelHeaders[i_fileDst]); eeLoadModelHeader(i_fileDst, &modelHeaders[i_fileDst]);
#if defined(PCBSKY9X) #if defined(EEPROM_CONVERSIONS)
if (version < EEPROM_VER) { if (version < EEPROM_VER) {
ConvertModel(i_fileDst, version); ConvertModel(i_fileDst, version);
eeLoadModel(g_eeGeneral.currModel); eeLoadModel(g_eeGeneral.currModel);

View file

@ -213,7 +213,7 @@ bool eepromOpen()
{ {
eepromReadBlock((uint8_t *)&eeFs, 0, sizeof(eeFs)); eepromReadBlock((uint8_t *)&eeFs, 0, sizeof(eeFs));
#ifdef SIMU #if defined(SIMU)
if (eeFs.version != EEFS_VERS) { if (eeFs.version != EEFS_VERS) {
TRACE("bad eeFs.version (%d instead of %d)", 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); f_close(&g_oLogFile);
#if defined(PCBTARANIS) #if defined(EEPROM_CONVERSIONS)
if (version < EEPROM_VER) { if (version < EEPROM_VER) {
storageCheck(true); storageCheck(true);
ConvertModel(i_fileDst, version); ConvertModel(i_fileDst, version);
@ -837,7 +837,9 @@ bool eeLoadGeneral()
TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT);
return false; 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); TRACE("EEPROM version %d instead of %d", g_eeGeneral.version, EEPROM_VER);
if (!eeConvert()) { if (!eeConvert()) {
return false; return false;

View file

@ -141,16 +141,22 @@ void getSwitchesPosition(bool startup)
uint64_t newPos = 0; uint64_t newPos = 0;
CHECK_3POS(0, SW_SA); CHECK_3POS(0, SW_SA);
CHECK_3POS(1, SW_SB); CHECK_3POS(1, SW_SB);
#if !defined(PCBXLITE)
CHECK_3POS(2, SW_SC); CHECK_3POS(2, SW_SC);
CHECK_3POS(3, SW_SD); CHECK_3POS(3, SW_SD);
#if !defined(PCBX7) #endif
#if !defined(PCBX7) && !defined(PCBXLITE)
CHECK_3POS(4, SW_SE); CHECK_3POS(4, SW_SE);
#endif #endif
#if !defined(PCBXLITE)
CHECK_2POS(SW_SF); CHECK_2POS(SW_SF);
#if !defined(PCBX7) #endif
#if !defined(PCBX7) && !defined(PCBXLITE)
CHECK_3POS(5, SW_SG); CHECK_3POS(5, SW_SG);
#endif #endif
#if !defined(PCBXLITE)
CHECK_2POS(SW_SH); CHECK_2POS(SW_SH);
#endif
#if defined(PCBX9E) #if defined(PCBX9E)
CHECK_3POS(6, SW_SI); CHECK_3POS(6, SW_SI);
CHECK_3POS(7, SW_SJ); CHECK_3POS(7, SW_SJ);

View file

@ -109,7 +109,6 @@ set(TARGET_SRC
${TARGET_SRC} ${TARGET_SRC}
pulses_driver.cpp pulses_driver.cpp
keys_driver.cpp keys_driver.cpp
trainer_driver.cpp
telemetry_driver.cpp telemetry_driver.cpp
) )
set(FIRMWARE_SRC set(FIRMWARE_SRC

View file

@ -6,7 +6,7 @@ option(LUA_ALLOCATOR_TRACER "Trace Lua memory (de)allocations to debug port (als
set(ARCH ARM) set(ARCH ARM)
set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries) 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(${RADIO_SRC_DIRECTORY}/targets/common/arm/stm32)
include_directories(${STM32USB_DIR}/STM32_USB_OTG_Driver/inc) include_directories(${STM32USB_DIR}/STM32_USB_OTG_Driver/inc)
include_directories(${STM32USB_DIR}/STM32_USB_Device_Library/Core/inc) include_directories(${STM32USB_DIR}/STM32_USB_Device_Library/Core/inc)
@ -86,7 +86,6 @@ foreach(FILE ${STM32USB_SRC})
endforeach() endforeach()
set(SRC set(SRC
${SRC} ${SRC}
sbus.cpp
telemetry/crossfire.cpp telemetry/crossfire.cpp
io/bootloader_flash.cpp io/bootloader_flash.cpp
) )

View file

@ -26,22 +26,22 @@
const int8_t ana_direction[NUM_ANALOGS] = {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};
#elif defined(PCBX9E) #elif defined(PCBX9E)
#if defined(HORUS_STICKS) #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 #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 #endif
const uint8_t ana_mapping[NUM_ANALOGS] = { 0 /*STICK1*/, 1 /*STICK2*/, 2 /*STICK3*/, 3 /*STICK4*/, const uint8_t ana_mapping[NUM_ANALOGS] = { 0 /*STICK1*/, 1 /*STICK2*/, 2 /*STICK3*/, 3 /*STICK4*/,
10 /*POT1*/, 4 /*POT2*/, 5 /*POT3*/, 6 /*POT4*/, 10 /*POT1*/, 4 /*POT2*/, 5 /*POT3*/, 6 /*POT4*/,
11 /*SLIDER1*/, 12 /*SLIDER2*/, 7 /*SLIDER3*/, 8 /*SLIDER4*/, 11 /*SLIDER1*/, 12 /*SLIDER2*/, 7 /*SLIDER3*/, 8 /*SLIDER4*/,
9 /*TX_VOLTAGE*/ }; 9 /*TX_VOLTAGE*/ };
#elif defined(PCBX9DP) #elif defined(PCBX9DP)
const int8_t ana_direction[NUM_ANALOGS] = {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};
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
const int8_t ana_direction[NUM_ANALOGS] = {-1,1,-1,1, 1,1, 1}; const int8_t ana_direction[NUM_ANALOGS] = {-1,1,-1,1, 1,1, 1};
#elif defined(REV4a) #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 #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 #endif
#if NUM_PWMANALOGS > 0 #if NUM_PWMANALOGS > 0
@ -102,6 +102,9 @@ void adcInit()
#elif defined(PCBX9E) #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->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 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) #elif defined(PCBX7)
ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT<<0); // conversions 7 and more 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 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

View file

@ -23,7 +23,7 @@
Fifo<uint8_t, 64> btTxFifo; Fifo<uint8_t, 64> btTxFifo;
Fifo<uint8_t, 64> btRxFifo; Fifo<uint8_t, 64> btRxFifo;
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
uint8_t btChipPresent = 0; uint8_t btChipPresent = 0;
#endif #endif
@ -109,7 +109,7 @@ extern "C" void BT_USART_IRQHandler(void)
USART_ClearITPendingBit(BT_USART, USART_IT_RXNE); USART_ClearITPendingBit(BT_USART, USART_IT_RXNE);
uint8_t byte = USART_ReceiveData(BT_USART); uint8_t byte = USART_ReceiveData(BT_USART);
btRxFifo.push(byte); btRxFifo.push(byte);
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
if (!btChipPresent) { //This is to differentiate X7 and X7S if (!btChipPresent) { //This is to differentiate X7 and X7S
btChipPresent = 1; btChipPresent = 1;
bluetoothDone(); bluetoothDone();

View file

@ -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);
}

View file

@ -65,7 +65,7 @@ endif()
set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET}) 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(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK)
add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE})
add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
@ -121,6 +121,8 @@ set(TARGET_SRC
board.cpp board.cpp
led_driver.cpp led_driver.cpp
extmodule_driver.cpp extmodule_driver.cpp
trainer_driver.cpp
../common/arm/stm32/intmodule_serial_driver.cpp
../common/arm/stm32/bluetooth_driver.cpp ../common/arm/stm32/bluetooth_driver.cpp
) )

View file

@ -545,7 +545,6 @@ void serial2Putc(char c);
void serial2SbusInit(void); void serial2SbusInit(void);
void serial2Stop(void); void serial2Stop(void);
#define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE) #define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE)
int sbusGetByte(uint8_t * byte);
// BT driver // BT driver
#define BLUETOOTH_FACTORY_BAUDRATE 57600 #define BLUETOOTH_FACTORY_BAUDRATE 57600

View file

@ -38,16 +38,16 @@ void extmoduleNoneStart()
{ {
EXTERNAL_MODULE_OFF(); 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_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_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure);
GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high
EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz)
@ -66,15 +66,15 @@ void extmodulePpmStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure);
// PPM generation principle: // PPM generation principle:
// //
@ -119,15 +119,15 @@ void extmodulePxxStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 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->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz)
@ -166,15 +166,15 @@ void extmoduleDsm2Start()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 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->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz)
@ -213,16 +213,16 @@ void extmoduleCrossfireStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure);
GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high
EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz)

View file

@ -252,6 +252,8 @@
#define PWR_ON_GPIO_MODER GPIO_MODER_MODER1 #define PWR_ON_GPIO_MODER GPIO_MODER_MODER1
#define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER1_0 #define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER1_0
// S.Port update connector
#define SPORT_MAX_BAUDRATE 250000 // < 400000
#if defined(PCBX10) #if defined(PCBX10)
#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOH #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOH
#define SPORT_UPDATE_PWR_GPIO GPIOH #define SPORT_UPDATE_PWR_GPIO GPIOH
@ -266,6 +268,7 @@
#define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11 #define PCBREV_GPIO_PIN GPIO_Pin_11 // PI.11
// Led // Led
#define STATUS_LEDS
#if defined(PCBX12S) #if defined(PCBX12S)
#define LED_RCC_AHB1Periph RCC_AHB1Periph_GPIOI #define LED_RCC_AHB1Periph RCC_AHB1Periph_GPIOI
#define LED_GPIO GPIOI #define LED_GPIO GPIOI
@ -481,6 +484,7 @@
#define I2C_SPEED 400000 #define I2C_SPEED 400000
// Haptic // Haptic
#define HAPTIC_PWM
#if defined(PCBX12S) #if defined(PCBX12S)
#define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
#define HAPTIC_RCC_APB2Periph RCC_APB2ENR_TIM9EN #define HAPTIC_RCC_APB2Periph RCC_APB2ENR_TIM9EN
@ -516,7 +520,7 @@
#define INTMODULE_TX_GPIO_PinSource GPIO_PinSource6 #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource6
#define INTMODULE_RX_GPIO_PinSource GPIO_PinSource7 #define INTMODULE_RX_GPIO_PinSource GPIO_PinSource7
#define INTMODULE_USART USART1 #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_USART_IRQn USART1_IRQn
#define INTMODULE_DMA_STREAM DMA2_Stream7 #define INTMODULE_DMA_STREAM DMA2_Stream7
#define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn
@ -547,16 +551,17 @@
#endif #endif
// External Module // External Module
#define EXTMODULE_PULSES
#define EXTMODULE_PWR_GPIO GPIOB #define EXTMODULE_PWR_GPIO GPIOB
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03
#if defined(PCBX10) || PCBREV >= 13 #if defined(PCBX10) || PCBREV >= 13
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
#define EXTMODULE_RCC_APB1Periph 0 #define EXTMODULE_RCC_APB1Periph 0
#define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1
#define EXTMODULE_PPM_GPIO GPIOA #define EXTMODULE_TX_GPIO GPIOA
#define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_10 // PA.10 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_10 // PA.10
#define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource10 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource10
#define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM1 #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM1
#define EXTMODULE_TIMER TIM1 #define EXTMODULE_TIMER TIM1
#define EXTMODULE_TIMER_IRQn TIM1_CC_IRQn #define EXTMODULE_TIMER_IRQn TIM1_CC_IRQn
#define EXTMODULE_TIMER_IRQHandler TIM1_CC_IRQHandler #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_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
#define EXTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM2 #define EXTMODULE_RCC_APB1Periph RCC_APB1Periph_TIM2
#define EXTMODULE_RCC_APB2Periph 0 #define EXTMODULE_RCC_APB2Periph 0
#define EXTMODULE_PPM_GPIO GPIOA #define EXTMODULE_TX_GPIO GPIOA
#define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_15 // PA.15 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_15 // PA.15
#define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource15 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource15
#define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM2 #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM2
#define EXTMODULE_TIMER TIM2 #define EXTMODULE_TIMER TIM2
#define EXTMODULE_TIMER_IRQn TIM2_IRQn #define EXTMODULE_TIMER_IRQn TIM2_IRQn
#define EXTMODULE_TIMER_IRQHandler TIM2_IRQHandler #define EXTMODULE_TIMER_IRQHandler TIM2_IRQHandler

View file

@ -119,150 +119,3 @@ void disable_crossfire(uint32_t port)
extmoduleStop(); 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);
}

View file

@ -58,7 +58,7 @@ uint32_t Peri1_frequency, Peri2_frequency;
GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj; GPIO_TypeDef gpioa, gpiob, gpioc, gpiod, gpioe, gpiof, gpiog, gpioh, gpioi, gpioj;
TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10; TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10;
RCC_TypeDef rcc; 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; DMA_TypeDef dma2;
USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4;
SysTick_Type systick; SysTick_Type systick;
@ -145,7 +145,7 @@ void simuInit()
simuSetSwitch(i, 0); simuSetSwitch(i, 0);
simuSetKey(i, false); // a little dirty, but setting keys that don't exist is perfectly OK here 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); simuSetTrim(i, false);
#if defined(ROTARY_ENCODERS) || defined(ROTARY_ENCODER_NAVIGATION) #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_RADIO, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT)
KEY_CASE(KEY_MODEL, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP) KEY_CASE(KEY_MODEL, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP)
KEY_CASE(KEY_EXIT, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN) 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) #elif defined(PCBTARANIS)
KEY_CASE(KEY_ENTER, KEYS_GPIO_REG_ENTER, KEYS_GPIO_PIN_ENTER) KEY_CASE(KEY_ENTER, KEYS_GPIO_REG_ENTER, KEYS_GPIO_PIN_ENTER)
KEY_CASE(KEY_PAGE, KEYS_GPIO_REG_PAGE, KEYS_GPIO_PIN_PAGE) 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_MINUS, KEYS_GPIO_REG_MINUS, KEYS_GPIO_PIN_MINUS)
KEY_CASE(KEY_PLUS, KEYS_GPIO_REG_PLUS, KEYS_GPIO_PIN_PLUS) KEY_CASE(KEY_PLUS, KEYS_GPIO_REG_PLUS, KEYS_GPIO_PIN_PLUS)
#endif
#else #else
KEY_CASE(KEY_RIGHT, KEYS_GPIO_REG_RIGHT, KEYS_GPIO_PIN_RIGHT) 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_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(1, TRIMS_GPIO_REG_LHR, TRIMS_GPIO_PIN_LHR)
TRIM_CASE(2, TRIMS_GPIO_REG_LVD, TRIMS_GPIO_PIN_LVD) TRIM_CASE(2, TRIMS_GPIO_REG_LVD, TRIMS_GPIO_PIN_LVD)
TRIM_CASE(3, TRIMS_GPIO_REG_LVU, TRIMS_GPIO_PIN_LVU) 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(4, TRIMS_GPIO_REG_RVD, TRIMS_GPIO_PIN_RVD)
TRIM_CASE(5, TRIMS_GPIO_REG_RVU, TRIMS_GPIO_PIN_RVU) TRIM_CASE(5, TRIMS_GPIO_REG_RVU, TRIMS_GPIO_PIN_RVU)
TRIM_CASE(6, TRIMS_GPIO_REG_RHL, TRIMS_GPIO_PIN_RHL) TRIM_CASE(6, TRIMS_GPIO_REG_RHL, TRIMS_GPIO_PIN_RHL)
TRIM_CASE(7, TRIMS_GPIO_REG_RHR, TRIMS_GPIO_PIN_RHR) TRIM_CASE(7, TRIMS_GPIO_REG_RHR, TRIMS_GPIO_PIN_RHR)
#endif
#if defined(PCBHORUS) #if defined(PCBHORUS)
TRIM_CASE(8, TRIMS_GPIO_REG_LSD, TRIMS_GPIO_PIN_LSD) TRIM_CASE(8, TRIMS_GPIO_REG_LSD, TRIMS_GPIO_PIN_LSD)
TRIM_CASE(9, TRIMS_GPIO_REG_LSU, TRIMS_GPIO_PIN_LSU) 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) { switch (swtch) {
#if defined(PCBTARANIS) #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(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) 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(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) 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) #if defined(PCBX7)
SWITCH_CASE (4, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F) SWITCH_CASE (4, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F)
SWITCH_CASE (5, SWITCHES_GPIO_REG_H, SWITCHES_GPIO_PIN_H) 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_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_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_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) SWITCH_CASE (7, SWITCHES_GPIO_REG_H, SWITCHES_GPIO_PIN_H)
#endif #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(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(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) SWITCH_3_CASE(10, SWITCHES_GPIO_REG_K_L, SWITCHES_GPIO_REG_K_H, SWITCHES_GPIO_PIN_K_L, SWITCHES_GPIO_PIN_K_H)

View file

@ -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 TIM_TypeDef tim1, tim2, tim3, tim4, tim5, tim6, tim7, tim8, tim9, tim10;
extern USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4; extern USART_TypeDef Usart0, Usart1, Usart2, Usart3, Usart4;
extern RCC_TypeDef rcc; 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 DMA_TypeDef dma2;
extern SysTick_Type systick; extern SysTick_Type systick;
#undef SysTick #undef SysTick
@ -154,6 +154,7 @@ extern SysTick_Type systick;
#undef DMA2_Stream2 #undef DMA2_Stream2
#undef DMA2_Stream5 #undef DMA2_Stream5
#undef DMA2_Stream6 #undef DMA2_Stream6
#undef DMA2_Stream7
#define DMA1_Stream2 (&dma1_stream2) #define DMA1_Stream2 (&dma1_stream2)
#define DMA1_Stream5 (&dma1_stream5) #define DMA1_Stream5 (&dma1_stream5)
#define DMA1_Stream7 (&dma1_stream7) #define DMA1_Stream7 (&dma1_stream7)
@ -161,6 +162,7 @@ extern SysTick_Type systick;
#define DMA2_Stream2 (&dma2_stream2) #define DMA2_Stream2 (&dma2_stream2)
#define DMA2_Stream5 (&dma2_stream5) #define DMA2_Stream5 (&dma2_stream5)
#define DMA2_Stream6 (&dma2_stream6) #define DMA2_Stream6 (&dma2_stream6)
#define DMA2_Stream7 (&dma2_stream7)
#undef DMA2 #undef DMA2
#define DMA2 (&dma2) #define DMA2 (&dma2)
#elif defined(PCBSKY9X) #elif defined(PCBSKY9X)

View file

@ -13,7 +13,10 @@ if(PCB STREQUAL 9XRPRO)
add_definitions(-Dat91sam3s8 -DREVX) add_definitions(-Dat91sam3s8 -DREVX)
set(FLAVOUR 9xrpro) set(FLAVOUR 9xrpro)
set(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld) 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(OPENRC_BOOTLOADER bootflash8.lbm)
set(CPU_TYPE_FULL ATSAM3S8C) # for size report set(CPU_TYPE_FULL ATSAM3S8C) # for size report
elseif(PCB STREQUAL AR9X) elseif(PCB STREQUAL AR9X)
@ -21,7 +24,11 @@ elseif(PCB STREQUAL AR9X)
set(FLAVOUR ar9x) set(FLAVOUR ar9x)
include_directories(${THIRDPARTY_DIR}/xdk-asf-3.31.0/sam/drivers/twi) 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(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(LINKER_SCRIPT targets/sky9x/sam3s8c_flash.ld)
set(OPENRC_BOOTLOADER bootflash8.lbm) set(OPENRC_BOOTLOADER bootflash8.lbm)
set(CPU_TYPE_FULL ATSAM3S8C) # for size report set(CPU_TYPE_FULL ATSAM3S8C) # for size report
@ -29,7 +36,12 @@ else()
set(FLAVOUR sky9x) set(FLAVOUR sky9x)
set(PCBREV "REVC" CACHE STRING "PCB Revision (REVA/REVB/REVC)") set(PCBREV "REVC" CACHE STRING "PCB Revision (REVA/REVB/REVC)")
set_property(CACHE PCBREV PROPERTY STRINGS "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) set(OPENRC_BOOTLOADER bootflash4.lbm)
if(PCBREV STREQUAL REVA) if(PCBREV STREQUAL REVA)
add_definitions(-DDREVA) add_definitions(-DDREVA)
@ -108,6 +120,7 @@ set(TARGET_SRC
massstorage.cpp massstorage.cpp
serial2_driver.cpp serial2_driver.cpp
audio_driver.cpp audio_driver.cpp
trainer_driver.cpp
) )
set(SRC set(SRC

View file

@ -361,6 +361,7 @@ extern int8_t Coproc_temp;
extern int8_t Coproc_maxtemp; extern int8_t Coproc_maxtemp;
// Haptic driver // Haptic driver
#define HAPTIC_PWM
void hapticOff(void); void hapticOff(void);
void hapticOn(uint32_t pwmPercent); void hapticOn(uint32_t pwmPercent);

View file

@ -73,9 +73,42 @@ elseif(PCB STREQUAL X7)
set(BITMAPS_TARGET 9x_bitmaps) set(BITMAPS_TARGET 9x_bitmaps)
set(FONTS_TARGET 9x_fonts_1bit) set(FONTS_TARGET 9x_fonts_1bit)
set(LCD_DRIVER lcd_driver_spi.cpp) 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() 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) add_definitions(-DBLUETOOTH)
set(TARGET_SRC set(TARGET_SRC
${TARGET_SRC} ${TARGET_SRC}
@ -97,7 +130,7 @@ if(SPLASH STREQUAL OFF)
message(FATAL_ERROR "Option SPLASH=OFF not supported on Taranis") message(FATAL_ERROR "Option SPLASH=OFF not supported on Taranis")
endif() endif()
add_definitions(-DPCBTARANIS -DPPM_PIN_TIMER) add_definitions(-DPCBTARANIS)
add_definitions(-DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DAUDIO -DVOICE -DRTCLOCK)
set(GUI_SRC ${GUI_SRC} set(GUI_SRC ${GUI_SRC}
@ -114,7 +147,7 @@ set(GUI_SRC ${GUI_SRC}
../screenshot.cpp ../screenshot.cpp
) )
if(PCB STREQUAL X7) if(PCB STREQUAL X7 OR PCB STREQUAL XLITE)
set(LED_DRIVER led_driver.cpp) set(LED_DRIVER led_driver.cpp)
endif() endif()

View file

@ -97,7 +97,7 @@ uint8_t isBacklightEnabled()
{ {
return (BACKLIGHT_TIMER->CCR4 != 0 || BACKLIGHT_TIMER->CCR2 != 0); return (BACKLIGHT_TIMER->CCR4 != 0 || BACKLIGHT_TIMER->CCR2 != 0);
} }
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
void backlightInit() void backlightInit()
{ {
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
@ -108,28 +108,35 @@ void backlightInit()
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(BACKLIGHT_GPIO, &GPIO_InitStructure); GPIO_Init(BACKLIGHT_GPIO, &GPIO_InitStructure);
GPIO_PinAFConfig(BACKLIGHT_GPIO, BACKLIGHT_GPIO_PinSource, BACKLIGHT_GPIO_AF); 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->ARR = 100;
BACKLIGHT_TIMER->PSC = BACKLIGHT_TIMER_FREQ / 50000 - 1; // 20us * 100 = 2ms => 500Hz BACKLIGHT_TIMER->PSC = BACKLIGHT_TIMER_FREQ / 50000 - 1; // 20us * 100 = 2ms => 500Hz
BACKLIGHT_TIMER->CCMR1 = TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2; // PWM #if defined(BACKLIGHT_CCMR1)
BACKLIGHT_TIMER->CCER = TIM_CCER_CC2E; BACKLIGHT_TIMER->CCMR1 = BACKLIGHT_CCMR1;
BACKLIGHT_TIMER->CCR2 = 100; #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->EGR = 0;
BACKLIGHT_TIMER->CR1 = TIM_CR1_CEN; // Counter enable BACKLIGHT_TIMER->CR1 = TIM_CR1_CEN; // Counter enable
} }
void backlightEnable(uint8_t level) void backlightEnable(uint8_t level)
{ {
BACKLIGHT_TIMER->CCR2 = 100 - level; BACKLIGHT_COUNTER_REGISTER = 100 - level;
} }
void backlightDisable() void backlightDisable()
{ {
BACKLIGHT_TIMER->CCR2 = 0; BACKLIGHT_COUNTER_REGISTER = 0;
} }
uint8_t isBacklightEnabled() uint8_t isBacklightEnabled()
{ {
return BACKLIGHT_TIMER->CCR2 != 0; return BACKLIGHT_COUNTER_REGISTER != 0;
} }
#else #else
void backlightInit() void backlightInit()

View file

@ -101,21 +101,21 @@ extern "C" void INTERRUPT_xMS_IRQHandler()
} }
#endif #endif
#if (defined(PCBX9E) || defined(PCBX7)) && !defined(SIMU) #if defined(PWR_PRESS_BUTTON) && !defined(SIMU)
#define PWR_PRESS_DURATION_MIN 100 // 1s #define PWR_PRESS_DURATION_MIN 100 // 1s
#define PWR_PRESS_DURATION_MAX 500 // 5s #define PWR_PRESS_DURATION_MAX 500 // 5s
#endif #endif
#if (defined(PCBX9E) && !defined(SIMU)) #if (defined(PCBX9E) && !defined(SIMU))
const pm_uchar bmp_startup[] PROGMEM = { const pm_uchar bmp_startup[] PROGMEM = {
#include "startup.lbm" #include "startup.lbm"
}; };
const pm_uchar bmp_lock[] PROGMEM = { const pm_uchar bmp_lock[] PROGMEM = {
#include "lock.lbm" #include "lock.lbm"
}; };
#endif // defined(PCBX9E) && !defined(SIMU) #endif
#if defined(PCBX7) #if defined(SPORT_UPDATE_PWR_GPIO)
void sportUpdateInit() void sportUpdateInit()
{ {
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
@ -129,7 +129,7 @@ void sportUpdateInit()
void sportUpdatePowerOn() void sportUpdatePowerOn()
{ {
if (IS_PCBREV_40()) if (HAS_SPORT_UPDATE_CONNECTOR())
GPIO_SetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); GPIO_SetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN);
else else
EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_ON();
@ -137,7 +137,7 @@ void sportUpdatePowerOn()
void sportUpdatePowerOff() void sportUpdatePowerOff()
{ {
if (IS_PCBREV_40()) if (HAS_SPORT_UPDATE_CONNECTOR())
GPIO_ResetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); GPIO_ResetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN);
else else
EXTERNAL_MODULE_OFF(); EXTERNAL_MODULE_OFF();
@ -158,11 +158,11 @@ void boardInit()
HEARTBEAT_RCC_AHB1Periph | BT_RCC_AHB1Periph, ENABLE); HEARTBEAT_RCC_AHB1Periph | BT_RCC_AHB1Periph, ENABLE);
RCC_APB1PeriphClockCmd(LCD_RCC_APB1Periph | AUDIO_RCC_APB1Periph | 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 | TIMER_2MHz_RCC_APB1Periph | I2C_RCC_APB1Periph |
SD_RCC_APB1Periph | TRAINER_RCC_APB1Periph | SD_RCC_APB1Periph | TRAINER_RCC_APB1Periph |
TELEMETRY_RCC_APB1Periph | SERIAL_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 | RCC_APB2PeriphClockCmd(BACKLIGHT_RCC_APB2Periph | ADC_RCC_APB2Periph |
HAPTIC_RCC_APB2Periph | INTMODULE_RCC_APB2Periph | HAPTIC_RCC_APB2Periph | INTMODULE_RCC_APB2Periph |
@ -174,7 +174,7 @@ void boardInit()
pwrInit(); pwrInit();
#endif #endif
#if defined(PCBX7) #if defined(STATUS_LEDS)
ledInit(); ledInit();
ledGreen(); ledGreen();
#endif #endif
@ -190,7 +190,7 @@ void boardInit()
i2cInit(); i2cInit();
usbInit(); usbInit();
#if defined(DEBUG) && !defined(PCBX7) #if defined(DEBUG) && defined(SERIAL_GPIO)
serial2Init(0, 0); // default serial mode (None if DEBUG not defined) serial2Init(0, 0); // default serial mode (None if DEBUG not defined)
TRACE("\nTaranis board started :)"); TRACE("\nTaranis board started :)");
#endif #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); 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 #endif
#if defined(PCBX9E) || defined(PCBX7) #if defined(PWR_PRESS_BUTTON)
if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) {
lcdClear(); lcdClear();
#if defined(PCBX9E) #if defined(PCBX9E)
@ -259,35 +259,32 @@ void boardInit()
pwrInit(); pwrInit();
backlightInit(); backlightInit();
} }
#if defined(PCBX9E) #if defined(TOPLCD_GPIO)
toplcdInit(); toplcdInit();
#endif #endif
#else #else // defined(PWR_PRESS_BUTTON)
backlightInit(); backlightInit();
#endif #endif
#if defined(PCBX7) if (HAS_SPORT_UPDATE_CONNECTOR()) {
if (IS_PCBREV_40()) {
sportUpdateInit(); sportUpdateInit();
} }
#endif
#endif // !defined(SIMU) #endif // !defined(SIMU)
} }
void boardOff() void boardOff()
{ {
#if defined(PCBX7) #if defined(STATUS_LEDS)
ledOff(); ledOff();
#endif #endif
BACKLIGHT_DISABLE(); BACKLIGHT_DISABLE();
#if defined(PCBX9E) #if defined(TOPLCD_GPIO)
toplcdOff(); toplcdOff();
#endif #endif
#if defined(PCBX9E) || defined(PCBX7) #if defined(PWR_PRESS_BUTTON)
while (pwrPressed()) { while (pwrPressed()) {
wdt_reset(); wdt_reset();
} }
@ -317,7 +314,7 @@ void checkTrainerSettings()
case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE:
stop_sbus_on_heartbeat_capture() ; stop_sbus_on_heartbeat_capture() ;
break; break;
#if !defined(PCBX7) && !defined(PCBX9E) #if defined(TRAINER_BATTERY_COMPARTMENT)
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
serial2Stop(); serial2Stop();
#endif #endif
@ -329,12 +326,12 @@ void checkTrainerSettings()
init_trainer_ppm(); init_trainer_ppm();
break; break;
case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE: case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE:
init_cppm_on_heartbeat_capture() ; init_cppm_on_heartbeat_capture();
break; break;
case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE: case TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE:
init_sbus_on_heartbeat_capture() ; init_sbus_on_heartbeat_capture();
break; break;
#if !defined(PCBX7) && !defined(PCBX9E) #if defined(TRAINER_BATTERY_COMPARTMENT)
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT: case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) { if (g_eeGeneral.serial2Mode == UART_MODE_SBUS_TRAINER) {
serial2SbusInit(); serial2SbusInit();

View file

@ -89,38 +89,28 @@ extern "C" {
} }
#endif #endif
#define FLASHSIZE 0x80000 #define FLASHSIZE 0x80000
#define BOOTLOADER_SIZE 0x8000 #define BOOTLOADER_SIZE 0x8000
#define FIRMWARE_ADDRESS 0x08000000 #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) #if defined(STM32F4)
#define PERI1_FREQUENCY 42000000 #define PERI1_FREQUENCY 42000000
#define PERI2_FREQUENCY 84000000 #define PERI2_FREQUENCY 84000000
#else #else
#define PERI1_FREQUENCY 30000000 #define PERI1_FREQUENCY 30000000
#define PERI2_FREQUENCY 60000000 #define PERI2_FREQUENCY 60000000
#endif #endif
#define TIMER_MULT_APB1 2 #define TIMER_MULT_APB1 2
#define TIMER_MULT_APB2 2 #define TIMER_MULT_APB2 2
#define strcpy_P strcpy #define strcpy_P strcpy
#define strcat_P strcat #define strcat_P strcat
extern uint16_t sessionTimer; 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 // Board driver
void boardInit(void); void boardInit(void);
void boardOff(void); void boardOff(void);
@ -138,35 +128,35 @@ void delay_ms(uint32_t ms);
#endif #endif
// CPU Unique ID // CPU Unique ID
#define LEN_CPU_UID (3*8+2) #define LEN_CPU_UID (3*8+2)
void getCPUUniqueID(char * s); void getCPUUniqueID(char * s);
// SD driver // SD driver
#define BLOCK_SIZE 512 /* Block Size in Bytes */ #define BLOCK_SIZE 512 /* Block Size in Bytes */
#if !defined(SIMU) || defined(SIMU_DISKIO) #if !defined(SIMU) || defined(SIMU_DISKIO)
uint32_t sdIsHC(void); uint32_t sdIsHC(void);
uint32_t sdGetSpeed(void); uint32_t sdGetSpeed(void);
#define SD_IS_HC() (sdIsHC()) #define SD_IS_HC() (sdIsHC())
#define SD_GET_SPEED() (sdGetSpeed()) #define SD_GET_SPEED() (sdGetSpeed())
#define SD_GET_FREE_BLOCKNR() (sdGetFreeSectors()) #define SD_GET_FREE_BLOCKNR() (sdGetFreeSectors())
#else #else
#define SD_IS_HC() (0) #define SD_IS_HC() (0)
#define SD_GET_SPEED() (0) #define SD_GET_SPEED() (0)
#endif #endif
#define __disk_read disk_read #define __disk_read disk_read
#define __disk_write disk_write #define __disk_write disk_write
#if defined(SIMU) #if defined(SIMU)
#define sdInit() #define sdInit()
#define sdMount() #define sdMount()
#define sdDone() #define sdDone()
#define SD_CARD_PRESENT() true #define SD_CARD_PRESENT() true
#else #else
void sdInit(void); void sdInit(void);
void sdMount(void); void sdMount(void);
void sdDone(void); void sdDone(void);
void sdPoll10ms(void); void sdPoll10ms(void);
uint32_t sdMounted(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 #endif
// Flash Write driver // Flash Write driver
@ -178,12 +168,17 @@ uint32_t isFirmwareStart(const uint8_t * buffer);
uint32_t isBootloaderStart(const uint8_t * buffer); uint32_t isBootloaderStart(const uint8_t * buffer);
// Pulses driver // Pulses driver
#define INTERNAL_MODULE_ON() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) #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 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_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN)
#define EXTERNAL_MODULE_OFF() GPIO_ResetBits(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_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 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 init_no_pulses(uint32_t port);
void disable_no_pulses(uint32_t port); void disable_no_pulses(uint32_t port);
void init_ppm( uint32_t module_index ); 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); void disable_sbusOut(uint32_t module_index);
// Trainer driver // Trainer driver
void init_trainer_ppm(void); #define SLAVE_MODE() (g_model.trainerMode == TRAINER_MODE_SLAVE)
void stop_trainer_ppm(void); #if defined(PCBX9E)
void init_trainer_capture(void); #define TRAINER_CONNECTED() (true)
void stop_trainer_capture(void); #elif defined(PCBX7)
void init_cppm_on_heartbeat_capture(void); #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_SET)
void stop_cppm_on_heartbeat_capture(void); #elif defined(PCBXLITE)
void init_sbus_on_heartbeat_capture(void); #define TRAINER_CONNECTED() false // there is no Trainer jack on Taranis X-Lite
void stop_sbus_on_heartbeat_capture(void); #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); int sbusGetByte(uint8_t * byte);
// Keys driver // Keys driver
@ -214,9 +235,16 @@ enum EnumKeys
KEY_MENU, KEY_MENU,
KEY_EXIT, KEY_EXIT,
KEY_ENTER, KEY_ENTER,
#if defined(PCBXLITE)
KEY_DOWN,
KEY_UP,
KEY_RIGHT,
KEY_LEFT,
#else
KEY_PAGE, KEY_PAGE,
KEY_PLUS, KEY_PLUS,
KEY_MINUS, KEY_MINUS,
#endif
TRM_BASE, TRM_BASE,
TRM_LH_DWN = TRM_BASE, TRM_LH_DWN = TRM_BASE,
@ -233,15 +261,18 @@ enum EnumKeys
}; };
#if defined(PCBX9E) && !defined(SIMU) #if defined(PCBX9E) && !defined(SIMU)
#define KEY_UP KEY_MINUS #define KEY_UP KEY_MINUS
#define KEY_DOWN KEY_PLUS #define KEY_DOWN KEY_PLUS
#define KEY_RIGHT KEY_PLUS #define KEY_RIGHT KEY_PLUS
#define KEY_LEFT KEY_MINUS #define KEY_LEFT KEY_MINUS
#elif defined(PCBXLITE)
#define KEY_PLUS KEY_RIGHT
#define KEY_MINUS KEY_LEFT
#else #else
#define KEY_UP KEY_PLUS #define KEY_UP KEY_PLUS
#define KEY_DOWN KEY_MINUS #define KEY_DOWN KEY_MINUS
#define KEY_RIGHT KEY_MINUS #define KEY_RIGHT KEY_MINUS
#define KEY_LEFT KEY_PLUS #define KEY_LEFT KEY_PLUS
#endif #endif
enum EnumSwitches enum EnumSwitches
@ -255,7 +286,7 @@ enum EnumSwitches
SW_SG, SW_SG,
SW_SH SW_SH
}; };
#define IS_3POS(x) ((x) != SW_SF && (x) != SW_SH) #define IS_3POS(x) ((x) != SW_SF && (x) != SW_SH)
enum EnumSwitchesPositions enum EnumSwitchesPositions
{ {
@ -265,28 +296,34 @@ enum EnumSwitchesPositions
SW_SB0, SW_SB0,
SW_SB1, SW_SB1,
SW_SB2, SW_SB2,
#if !defined(PCBXLITE)
SW_SC0, SW_SC0,
SW_SC1, SW_SC1,
SW_SC2, SW_SC2,
SW_SD0, SW_SD0,
SW_SD1, SW_SD1,
SW_SD2, SW_SD2,
#if !defined(PCBX7) #endif
#if !defined(PCBX7) && !defined(PCBXLITE)
SW_SE0, SW_SE0,
SW_SE1, SW_SE1,
SW_SE2, SW_SE2,
#endif #endif
#if !defined(PCBXLITE)
SW_SF0, SW_SF0,
SW_SF1, SW_SF1,
SW_SF2, SW_SF2,
#if !defined(PCBX7) #endif
#if !defined(PCBX7) && !defined(PCBXLITE)
SW_SG0, SW_SG0,
SW_SG1, SW_SG1,
SW_SG2, SW_SG2,
#endif #endif
#if !defined(PCBXLITE)
SW_SH0, SW_SH0,
SW_SH1, SW_SH1,
SW_SH2, SW_SH2,
#endif
#if defined(PCBX9E) #if defined(PCBX9E)
SW_SI0, SW_SI0,
SW_SI1, SW_SI1,
@ -320,20 +357,22 @@ enum EnumSwitchesPositions
SW_SR2, SW_SR2,
#endif #endif
}; };
#if defined(PCBX7) #if defined(PCBXLITE)
#define NUM_SWITCHES 6 #define NUM_SWITCHES 2
#elif defined(PCBX7)
#define NUM_SWITCHES 6
#elif defined(PCBX9E) #elif defined(PCBX9E)
#define NUM_SWITCHES 18 // yes, it's a lot! #define NUM_SWITCHES 18 // yes, it's a lot!
#else #else
#define NUM_SWITCHES 8 #define NUM_SWITCHES 8
#endif #endif
void keysInit(void); void keysInit(void);
uint8_t keyState(uint8_t index); uint8_t keyState(uint8_t index);
uint32_t switchState(uint8_t index); uint32_t switchState(uint8_t index);
uint32_t readKeys(void); uint32_t readKeys(void);
uint32_t readTrims(void); uint32_t readTrims(void);
#define TRIMS_PRESSED() (readTrims()) #define TRIMS_PRESSED() (readTrims())
#define KEYS_PRESSED() (readKeys()) #define KEYS_PRESSED() (readKeys())
#if defined(PCBX9E) || defined(PCBX7) #if defined(PCBX9E) || defined(PCBX7)
// Rotary Encoder driver // Rotary Encoder driver
@ -342,19 +381,19 @@ void checkRotaryEncoder(void);
#endif #endif
// WDT driver // WDT driver
#define WDTO_500MS 500 #define WDTO_500MS 500
#if defined(WATCHDOG_DISABLED) || defined(SIMU) #if defined(WATCHDOG_DISABLED) || defined(SIMU)
#define wdt_enable(x) #define wdt_enable(x)
#define wdt_reset() #define wdt_reset()
#else #else
#define wdt_enable(x) watchdogInit(x) #define wdt_enable(x) watchdogInit(x)
#define wdt_reset() IWDG->KR = 0xAAAA #define wdt_reset() IWDG->KR = 0xAAAA
#endif #endif
#define wdt_disable() #define wdt_disable()
void watchdogInit(unsigned int duration); void watchdogInit(unsigned int duration);
#define WAS_RESET_BY_SOFTWARE() (RCC->CSR & 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() (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_WATCHDOG_OR_SOFTWARE() (RCC->CSR & (RCC_CSR_WDGRSTF | RCC_CSR_WWDGRSTF | RCC_CSR_SFTRSTF))
// ADC driver // ADC driver
enum Analogs { enum Analogs {
@ -365,7 +404,7 @@ enum Analogs {
POT_FIRST, POT_FIRST,
POT1 = POT_FIRST, POT1 = POT_FIRST,
POT2, POT2,
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
POT_LAST = POT2, POT_LAST = POT2,
#elif defined(PCBX9E) #elif defined(PCBX9E)
POT3, POT3,
@ -385,9 +424,9 @@ enum Analogs {
NUM_ANALOGS NUM_ANALOGS
}; };
#define NUM_POTS (POT_LAST-POT_FIRST+1) #define NUM_POTS (POT_LAST-POT_FIRST+1)
#define NUM_XPOTS NUM_POTS #define NUM_XPOTS NUM_POTS
#define NUM_SLIDERS (TX_VOLTAGE-POT_LAST-1) #define NUM_SLIDERS (TX_VOLTAGE-POT_LAST-1)
enum CalibratedAnalogs { enum CalibratedAnalogs {
CALIBRATED_STICK1, CALIBRATED_STICK1,
@ -402,21 +441,21 @@ enum CalibratedAnalogs {
}; };
#if defined(PCBX9D) #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 #else
#define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT_LAST) #define IS_POT(x) ((x)>=POT_FIRST && (x)<=POT_LAST)
#endif #endif
#define IS_SLIDER(x) ((x)>POT_LAST && (x)<TX_VOLTAGE) #define IS_SLIDER(x) ((x)>POT_LAST && (x)<TX_VOLTAGE)
void adcInit(void); void adcInit(void);
void adcRead(void); void adcRead(void);
extern uint16_t adcValues[NUM_ANALOGS]; extern uint16_t adcValues[NUM_ANALOGS];
uint16_t getAnalogValue(uint8_t index); uint16_t getAnalogValue(uint8_t index);
uint16_t getBatteryVoltage(); // returns current battery voltage in 10mV steps uint16_t getBatteryVoltage(); // returns current battery voltage in 10mV steps
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
#define BATT_SCALE 123 #define BATT_SCALE 123
#else #else
#define BATT_SCALE 150 #define BATT_SCALE 150
#endif #endif
#if defined(__cplusplus) && !defined(SIMU) #if defined(__cplusplus) && !defined(SIMU)
@ -435,30 +474,30 @@ uint32_t pwrPressedDuration(void);
#endif #endif
#if defined(SIMU) #if defined(SIMU)
#define UNEXPECTED_SHUTDOWN() false #define UNEXPECTED_SHUTDOWN() false
#else #else
#define UNEXPECTED_SHUTDOWN() (WAS_RESET_BY_WATCHDOG() || g_eeGeneral.unexpectedShutdown) #define UNEXPECTED_SHUTDOWN() (WAS_RESET_BY_WATCHDOG() || g_eeGeneral.unexpectedShutdown)
#endif #endif
// Backlight driver // Backlight driver
void backlightInit(void); void backlightInit(void);
void backlightDisable(void); void backlightDisable(void);
#define BACKLIGHT_DISABLE() backlightDisable() #define BACKLIGHT_DISABLE() backlightDisable()
uint8_t isBacklightEnabled(void); uint8_t isBacklightEnabled(void);
#if defined(PCBX9E) || defined(PCBX9DP) #if defined(PCBX9E) || defined(PCBX9DP)
void backlightEnable(uint8_t level, uint8_t color); void backlightEnable(uint8_t level, uint8_t color);
#define BACKLIGHT_ENABLE() backlightEnable(g_eeGeneral.backlightBright, g_eeGeneral.backlightColor) #define BACKLIGHT_ENABLE() backlightEnable(g_eeGeneral.backlightBright, g_eeGeneral.backlightColor)
#else #else
void backlightEnable(uint8_t level); void backlightEnable(uint8_t level);
#define BACKLIGHT_ENABLE() backlightEnable(g_eeGeneral.backlightBright) #define BACKLIGHT_ENABLE() backlightEnable(g_eeGeneral.backlightBright)
#endif #endif
#if !defined(SIMU) #if !defined(SIMU)
void usbJoystickUpdate(); void usbJoystickUpdate();
#endif #endif
#define USB_NAME "FrSky Taranis" #define USB_NAME "FrSky Taranis"
#define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */ #define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', 'a', 'r', 'a', 'n', 'i', 's', ' ' /* 8 Bytes */ #define USB_PRODUCT 'T', 'a', 'r', 'a', 'n', 'i', 's', ' ' /* 8 Bytes */
#if defined(__cplusplus) && !defined(SIMU) #if defined(__cplusplus) && !defined(SIMU)
} }
@ -466,9 +505,9 @@ uint8_t isBacklightEnabled(void);
// I2C driver: EEPROM + Audio Volume // I2C driver: EEPROM + Audio Volume
#if defined(REV4a) #if defined(REV4a)
#define EEPROM_SIZE (64*1024) #define EEPROM_SIZE (64*1024)
#else #else
#define EEPROM_SIZE (32*1024) #define EEPROM_SIZE (32*1024)
#endif #endif
void i2cInit(void); void i2cInit(void);
@ -487,19 +526,26 @@ uint8_t telemetryGetByte(uint8_t * byte);
extern uint32_t telemetryErrors; extern uint32_t telemetryErrors;
// PCBREV driver // PCBREV driver
#if defined(PCBX7) #if defined(PCBXLITE)
#define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET) #define HAS_SPORT_UPDATE_CONNECTOR() true
#elif defined(PCBX7)
#define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET)
#define HAS_SPORT_UPDATE_CONNECTOR() IS_PCBREV_40()
#else
#define HAS_SPORT_UPDATE_CONNECTOR() false
#endif #endif
// Sport update driver // Sport update driver
#if defined(PCBX7) #if defined(SPORT_UPDATE_PWR_GPIO)
void sportUpdateInit(void);
void sportUpdatePowerOn(void); void sportUpdatePowerOn(void);
void sportUpdatePowerOff(void); void sportUpdatePowerOff(void);
#define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn() #define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn()
#define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff() #define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff()
#else #else
#define SPORT_UPDATE_POWER_ON() EXTERNAL_MODULE_ON() #define sportUpdateInit()
#define SPORT_UPDATE_POWER_OFF() EXTERNAL_MODULE_OFF() #define SPORT_UPDATE_POWER_ON() EXTERNAL_MODULE_ON()
#define SPORT_UPDATE_POWER_OFF() EXTERNAL_MODULE_OFF()
#endif #endif
// Audio driver // Audio driver
@ -516,21 +562,21 @@ void setVolume(uint8_t volume);
int32_t getVolume(void); int32_t getVolume(void);
#endif #endif
void audioConsumeCurrentBuffer(); void audioConsumeCurrentBuffer();
#define audioDisableIrq() __disable_irq() #define audioDisableIrq() __disable_irq()
#define audioEnableIrq() __enable_irq() #define audioEnableIrq() __enable_irq()
// Haptic driver // Haptic driver
void hapticInit(void); void hapticInit(void);
void hapticOff(void); void hapticOff(void);
#if defined(PCBX9E) || defined(PCBX9DP) #if defined(HAPTIC_PWM)
void hapticOn(uint32_t pwmPercent); void hapticOn(uint32_t pwmPercent);
#else #else
void hapticOn(void); void hapticOn(void);
#endif #endif
// Second serial port driver // Second serial port driver
#define DEBUG_BAUDRATE 115200 #if defined(SERIAL_GPIO)
#if !defined(PCBX7) #define DEBUG_BAUDRATE 115200
#define SERIAL2 #define SERIAL2
extern uint8_t serial2Mode; extern uint8_t serial2Mode;
void serial2Init(unsigned int mode, unsigned int protocol); void serial2Init(unsigned int mode, unsigned int protocol);
@ -541,11 +587,11 @@ void serial2Stop(void);
#endif #endif
// BT driver // BT driver
#define BLUETOOTH_DEFAULT_BAUDRATE 115200 #define BLUETOOTH_DEFAULT_BAUDRATE 115200
#if defined(PCBX9E) && !defined(USEHORUSBT) #if defined(PCBX9E) && !defined(USEHORUSBT)
#define BLUETOOTH_FACTORY_BAUDRATE 9600 #define BLUETOOTH_FACTORY_BAUDRATE 9600
#else #else
#define BLUETOOTH_FACTORY_BAUDRATE 57600 #define BLUETOOTH_FACTORY_BAUDRATE 57600
#endif #endif
void bluetoothInit(uint32_t baudrate); void bluetoothInit(uint32_t baudrate);
void bluetoothWriteWakeup(void); void bluetoothWriteWakeup(void);
@ -560,29 +606,29 @@ void ledGreen(void);
void ledBlue(void); void ledBlue(void);
// LCD driver // LCD driver
#if defined(PCBX7) #if defined(STATUS_LEDS)
#define LCD_W 128 #define LCD_W 128
#define LCD_H 64 #define LCD_H 64
#define LCD_DEPTH 1 #define LCD_DEPTH 1
#define IS_LCD_RESET_NEEDED() true #define IS_LCD_RESET_NEEDED() true
#define LCD_CONTRAST_MIN 10 #define LCD_CONTRAST_MIN 10
#define LCD_CONTRAST_MAX 30 #define LCD_CONTRAST_MAX 30
#define LCD_CONTRAST_DEFAULT 20 #define LCD_CONTRAST_DEFAULT 20
#else #else
#define LCD_W 212 #define LCD_W 212
#define LCD_H 64 #define LCD_H 64
#define LCD_DEPTH 4 #define LCD_DEPTH 4
#define IS_LCD_RESET_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) #define IS_LCD_RESET_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE())
#define LCD_CONTRAST_MIN 0 #define LCD_CONTRAST_MIN 0
#define LCD_CONTRAST_MAX 45 #define LCD_CONTRAST_MAX 45
#define LCD_CONTRAST_DEFAULT 25 #define LCD_CONTRAST_DEFAULT 25
#endif #endif
void lcdInit(void); void lcdInit(void);
void lcdInitFinish(void); void lcdInitFinish(void);
void lcdOff(void); void lcdOff(void);
// TODO lcdRefreshWait() stub in simpgmspace and remove LCD_DUAL_BUFFER // TODO lcdRefreshWait() stub in simpgmspace and remove LCD_DUAL_BUFFER
#if (defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7)) && !defined(LCD_DUAL_BUFFER) && !defined(SIMU) #if defined(LCD_DMA) && !defined(LCD_DUAL_BUFFER) && !defined(SIMU)
void lcdRefreshWait(); void lcdRefreshWait();
#else #else
#define lcdRefreshWait() #define lcdRefreshWait()
@ -596,7 +642,7 @@ void lcdSetRefVolt(unsigned char val);
void lcdSetContrast(void); void lcdSetContrast(void);
// Top LCD driver // Top LCD driver
#if defined(PCBX9E) #if defined(TOPLCD_GPIO)
void toplcdInit(void); void toplcdInit(void);
void toplcdOff(void); void toplcdOff(void);
void toplcdRefreshStart(void); void toplcdRefreshStart(void);
@ -618,9 +664,9 @@ void checkTrainerSettings(void);
#include "dmafifo.h" #include "dmafifo.h"
#if defined(CROSSFIRE) #if defined(CROSSFIRE)
#define TELEMETRY_FIFO_SIZE 128 #define TELEMETRY_FIFO_SIZE 128
#else #else
#define TELEMETRY_FIFO_SIZE 64 #define TELEMETRY_FIFO_SIZE 64
#endif #endif
extern Fifo<uint8_t, TELEMETRY_FIFO_SIZE> telemetryFifo; extern Fifo<uint8_t, TELEMETRY_FIFO_SIZE> telemetryFifo;

View file

@ -308,12 +308,12 @@ void power_on (void)
card_power(1); 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_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 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 */ for (uint32_t Timer = 25000; Timer>0;Timer--); /* Wait for 250ms */

View file

@ -42,16 +42,16 @@ void extmoduleNoneStart()
EXTERNAL_MODULE_OFF(); 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_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_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure);
GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high
EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz
@ -70,15 +70,15 @@ void extmodulePpmStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 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->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz
@ -104,15 +104,15 @@ void extmodulePxxStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 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->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz)
@ -139,15 +139,15 @@ void extmoduleDsm2Start()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 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->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz
@ -174,16 +174,16 @@ void extmoduleCrossfireStart()
{ {
EXTERNAL_MODULE_ON(); 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_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_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(EXTMODULE_PPM_GPIO, &GPIO_InitStructure); GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure);
GPIO_SetBits(EXTMODULE_PPM_GPIO, EXTMODULE_PPM_GPIO_PIN); // Set high GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high
EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN;
EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS from 30MHz

View file

@ -22,29 +22,46 @@
#define _HAL_H_ #define _HAL_H_
// Keys // 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) #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_REG_ENTER GPIOF->IDR
#define KEYS_GPIO_PIN_ENTER GPIO_Pin_0 // PF.00 #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) #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_REG_ENTER GPIOE->IDR
#define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10 #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10
#else #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_REG_PLUS GPIOE->IDR
#define KEYS_GPIO_PIN_PLUS GPIO_Pin_10 // PE.10 #define KEYS_GPIO_PIN_PLUS GPIO_Pin_10 // PE.10
#define KEYS_GPIO_REG_MINUS GPIOE->IDR #define KEYS_GPIO_REG_MINUS GPIOE->IDR
@ -92,6 +109,15 @@
#define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02 #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02
#define TRIMS_GPIO_REG_RHR GPIOC->IDR #define TRIMS_GPIO_REG_RHR GPIOC->IDR
#define TRIMS_GPIO_PIN_RHR GPIO_Pin_13 // PC.13 #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) #elif defined(PCBX7)
#define TRIMS_GPIO_REG_LHL GPIOD->IDR #define TRIMS_GPIO_REG_LHL GPIOD->IDR
#define TRIMS_GPIO_PIN_LHL GPIO_Pin_15 // PD.15 #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_PIN_A_H GPIO_Pin_10 // PD.10
#define SWITCHES_GPIO_REG_A_L GPIOD->IDR #define SWITCHES_GPIO_REG_A_L GPIOD->IDR
#define SWITCHES_GPIO_PIN_A_L GPIO_Pin_14 // PD.14 #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) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_A_L GPIOE->IDR #define SWITCHES_GPIO_REG_A_L GPIOE->IDR
#define SWITCHES_GPIO_PIN_A_L GPIO_Pin_7 // PE.07 #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_PIN_B_H GPIO_Pin_11 // PG.11
#define SWITCHES_GPIO_REG_B_L GPIOG->IDR #define SWITCHES_GPIO_REG_B_L GPIOG->IDR
#define SWITCHES_GPIO_PIN_B_L GPIO_Pin_10 // PG.10 #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) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_B_L GPIOE->IDR #define SWITCHES_GPIO_REG_B_L GPIOE->IDR
#define SWITCHES_GPIO_PIN_B_L GPIO_Pin_15 // PE.15 #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_PIN_C_H GPIO_Pin_13 // PF.13
#define SWITCHES_GPIO_REG_C_L GPIOF->IDR #define SWITCHES_GPIO_REG_C_L GPIOF->IDR
#define SWITCHES_GPIO_PIN_C_L GPIO_Pin_14 // PF.14 #define SWITCHES_GPIO_PIN_C_L GPIO_Pin_14 // PF.14
#elif defined(PCBXLITE)
// no SWC
#elif defined(PCBX7) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_C_L GPIOD->IDR #define SWITCHES_GPIO_REG_C_L GPIOD->IDR
#define SWITCHES_GPIO_PIN_C_L GPIO_Pin_11 // PD.11 #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_PIN_D_H GPIO_Pin_7 // PE.07
#define SWITCHES_GPIO_REG_D_L GPIOE->IDR #define SWITCHES_GPIO_REG_D_L GPIOE->IDR
#define SWITCHES_GPIO_PIN_D_L GPIO_Pin_13 // PE.13 #define SWITCHES_GPIO_PIN_D_L GPIO_Pin_13 // PE.13
#elif defined(PCBXLITE)
// no SWD
#elif defined(PCBX7) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_D_L GPIOE->IDR #define SWITCHES_GPIO_REG_D_L GPIOE->IDR
#define SWITCHES_GPIO_PIN_D_L GPIO_Pin_1 // PE.01 #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_PIN_E_H GPIO_Pin_7 // PE.07
#define SWITCHES_GPIO_REG_E_L GPIOE->IDR #define SWITCHES_GPIO_REG_E_L GPIOE->IDR
#define SWITCHES_GPIO_PIN_E_L GPIO_Pin_13 // PE.13 #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_REG_E_H GPIOB->IDR
#define SWITCHES_GPIO_PIN_E_H GPIO_Pin_3 // PB.03 #define SWITCHES_GPIO_PIN_E_H GPIO_Pin_3 // PB.03
#define SWITCHES_GPIO_REG_E_L GPIOB->IDR #define SWITCHES_GPIO_REG_E_L GPIOB->IDR
@ -217,6 +259,8 @@
#if defined(PCBX9E) #if defined(PCBX9E)
#define SWITCHES_GPIO_REG_F GPIOE->IDR #define SWITCHES_GPIO_REG_F GPIOE->IDR
#define SWITCHES_GPIO_PIN_F GPIO_Pin_11 // PE.11 #define SWITCHES_GPIO_PIN_F GPIO_Pin_11 // PE.11
#elif defined(PCBXLITE)
// no SWF
#elif defined(PCBX7) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_F GPIOE->IDR #define SWITCHES_GPIO_REG_F GPIOE->IDR
#define SWITCHES_GPIO_PIN_F GPIO_Pin_14 // PE.14 #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_PIN_G_H GPIO_Pin_3 // PF.03
#define SWITCHES_GPIO_REG_G_L GPIOF->IDR #define SWITCHES_GPIO_REG_G_L GPIOF->IDR
#define SWITCHES_GPIO_PIN_G_L GPIO_Pin_4 // PF.04 #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_REG_G_H GPIOE->IDR
#define SWITCHES_GPIO_PIN_G_H GPIO_Pin_9 // PE.09 #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_9 // PE.09
#define SWITCHES_GPIO_REG_G_L GPIOE->IDR #define SWITCHES_GPIO_REG_G_L GPIOE->IDR
@ -243,6 +289,8 @@
#elif defined(PCBX9DP) #elif defined(PCBX9DP)
#define SWITCHES_GPIO_REG_H GPIOD->IDR #define SWITCHES_GPIO_REG_H GPIOD->IDR
#define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14 #define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14
#elif defined(PCBXLITE)
// no SWH
#elif defined(PCBX7) #elif defined(PCBX7)
#define SWITCHES_GPIO_REG_H GPIOD->IDR #define SWITCHES_GPIO_REG_H GPIOD->IDR
#define SWITCHES_GPIO_PIN_H GPIO_Pin_14 // PD.14 #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_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_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) #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) #elif defined(PCBX7)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE) #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 #define KEYS_GPIOA_PINS SWITCHES_GPIO_PIN_B_H
@ -326,28 +379,6 @@
#endif #endif
// ADC // 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_MAIN ADC1
#define ADC_DMA DMA2 #define ADC_DMA DMA2
#define ADC_DMA_SxCR_CHSEL 0 #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_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_TRANSFER_COMPLETE() (ADC_DMA->HISR & DMA_HISR_TCIF4)
#define ADC_SAMPTIME 2 // sample time = 28 cycles #define ADC_SAMPTIME 2 // sample time = 28 cycles
#if defined(PCBX9E) #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_POT1 GPIO_Pin_8 // PF.08
#define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
#define ADC_GPIO_PIN_POT3 GPIO_Pin_5 // PC.05 #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_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0)
#define ADC_EXT_SAMPTIME 3 // sample time = 56 cycles #define ADC_EXT_SAMPTIME 3 // sample time = 56 cycles
#elif defined(PCBX9DP) #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_POT1 GPIO_Pin_6 // PA.06
#define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
#define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01 #define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01
@ -401,7 +451,37 @@
#define ADC_CHANNEL_SLIDER1 ADC_Channel_14 #define ADC_CHANNEL_SLIDER1 ADC_Channel_14
#define ADC_CHANNEL_SLIDER2 ADC_Channel_15 #define ADC_CHANNEL_SLIDER2 ADC_Channel_15
#define ADC_CHANNEL_BATT ADC_Channel_10 #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) #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_POT1 GPIO_Pin_6 // PA.06
#define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
#define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.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_POT2 ADC_Channel_8
#define ADC_CHANNEL_BATT ADC_Channel_10 #define ADC_CHANNEL_BATT ADC_Channel_10
#else #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_POT1 GPIO_Pin_6 // PA.06
#define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00
#define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04 #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04
@ -429,111 +519,196 @@
#endif #endif
// PWR and LED driver // PWR and LED driver
#define PWR_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD) #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) #if defined(PCBX9E) || defined(PCBX7) || defined(PCBXLITE)
#define PWR_PRESS_BUTTON #define PWR_PRESS_BUTTON
#endif #endif
#if defined(PCBXLITE)
#define PWR_GPIO GPIOD #define PWR_SWITCH_GPIO GPIOA
#define PWR_SWITCH_GPIO_REG PWR_GPIO->IDR #define PWR_SWITCH_GPIO_PIN GPIO_Pin_7 // PA.07
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_1 // PD.01 #define PWR_ON_GPIO GPIOE
#define PWR_ON_GPIO_PIN GPIO_Pin_0 // PD.00 #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 GPIO_MODER_MODER0
#define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER0_0 #define PWR_ON_GPIO_MODER_OUT GPIO_MODER_MODER0_0
#if defined(PCBX7) #if defined(PCBXLITE)
#define LED_GREEN_GPIO GPIOC #define STATUS_LEDS
#define LED_GREEN_GPIO_PIN GPIO_Pin_4 // PC.04 #define LED_GREEN_GPIO GPIOE
#define LED_RED_GPIO GPIOC #define LED_GREEN_GPIO_PIN GPIO_Pin_5 // PE.05
#define LED_RED_GPIO_PIN GPIO_Pin_5 // PC.05 #define LED_RED_GPIO GPIOE
#define LED_BLUE_GPIO GPIOB #define LED_RED_GPIO_PIN GPIO_Pin_4 // PE.04
#define LED_BLUE_GPIO_PIN GPIO_Pin_1 // PB.01 #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 #endif
// Internal Module // Internal Module
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #if defined(PCBXLITE)
#define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
#if defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) #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 GPIOC
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // PC.06 #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 #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 GPIOD
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_15 // PD.15 #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 #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 // External Module
#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_PULSES
#define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 #if defined(PCBXLITE)
#define EXTMODULE_PWR_GPIO GPIOD #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)
#define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8
#define EXTMODULE_PPM_GPIO GPIOA #define EXTMODULE_PWR_GPIO GPIOD
#define EXTMODULE_PPM_GPIO_PIN GPIO_Pin_7 // PA.07 #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_11 // PD.11
#define EXTMODULE_PPM_GPIO_PinSource GPIO_PinSource7 #define EXTMODULE_TX_GPIO GPIOC
#define EXTMODULE_TIMER TIM8 #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PC.06
#define EXTMODULE_PPM_GPIO_AF GPIO_AF_TIM8 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource6
#define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn #define EXTMODULE_TIMER TIM8
#define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler #define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1
#define EXTMODULE_DMA_CHANNEL DMA_Channel_7 #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn
#define EXTMODULE_DMA_STREAM DMA2_Stream1 #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler
#define EXTMODULE_DMA_IRQn DMA2_Stream1_IRQn #define EXTMODULE_DMA_CHANNEL DMA_Channel_7
#define EXTMODULE_DMA_IRQHandler DMA2_Stream1_IRQHandler #define EXTMODULE_DMA_STREAM DMA2_Stream1
#define EXTMODULE_DMA_FLAG_TC DMA_IT_TCIF1 #define EXTMODULE_DMA_IRQn DMA2_Stream1_IRQn
#define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #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 // Trainer Port
#define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC) #if defined(PCBXLITE)
#define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM3 #define TRAINER_RCC_AHB1Periph 0
#define TRAINER_GPIO GPIOC #define TRAINER_RCC_APB1Periph 0
#define TRAINER_IN_GPIO_PIN GPIO_Pin_8 // PC.08 #else
#define TRAINER_IN_GPIO_PinSource GPIO_PinSource8 #define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC)
#define TRAINER_OUT_GPIO_PIN GPIO_Pin_9 // PC.09 #define TRAINER_RCC_APB1Periph RCC_APB1Periph_TIM3
#define TRAINER_OUT_GPIO_PinSource GPIO_PinSource9 #define TRAINER_GPIO GPIOC
#define TRAINER_DETECT_GPIO GPIOA #define TRAINER_IN_GPIO_PIN GPIO_Pin_8 // PC.08
#define TRAINER_DETECT_GPIO_PIN GPIO_Pin_8 // PA.08 #define TRAINER_IN_GPIO_PinSource GPIO_PinSource8
#define TRAINER_TIMER TIM3 #define TRAINER_OUT_GPIO_PIN GPIO_Pin_9 // PC.09
#define TRAINER_TIMER_IRQn TIM3_IRQn #define TRAINER_OUT_GPIO_PinSource GPIO_PinSource9
#define TRAINER_GPIO_AF GPIO_AF_TIM3 #define TRAINER_DETECT_GPIO GPIOA
#define TRAINER_DMA DMA1 #define TRAINER_DETECT_GPIO_PIN GPIO_Pin_8 // PA.08
#define TRAINER_DMA_CHANNEL DMA_Channel_5 #define TRAINER_TIMER TIM3
#define TRAINER_DMA_STREAM DMA1_Stream2 #define TRAINER_TIMER_IRQn TIM3_IRQn
#define TRAINER_DMA_IRQn DMA1_Stream2_IRQn #define TRAINER_GPIO_AF GPIO_AF_TIM3
#define TRAINER_DMA_IRQHandler DMA1_Stream2_IRQHandler #define TRAINER_DMA DMA1
#define TRAINER_DMA_FLAG_TC DMA_IT_TCIF2 #define TRAINER_DMA_CHANNEL DMA_Channel_5
#define TRAINER_TIMER_IRQn TIM3_IRQn #define TRAINER_DMA_STREAM DMA1_Stream2
#define TRAINER_TIMER_IRQHandler TIM3_IRQHandler #define TRAINER_DMA_IRQn DMA1_Stream2_IRQn
#define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) #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 // Serial Port
#if defined(PCBX7) #if defined(PCBX7) || defined(PCBXLITE)
#define SERIAL_RCC_AHB1Periph 0 #define SERIAL_RCC_AHB1Periph 0
#define SERIAL_RCC_APB1Periph 0 #define SERIAL_RCC_APB1Periph 0
#else #else
#define SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define TRAINER_BATTERY_COMPARTMENT
#define SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3 #define SERIAL_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
#define SERIAL_GPIO GPIOB #define SERIAL_RCC_APB1Periph RCC_APB1Periph_USART3
#define SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10 #define SERIAL_GPIO GPIOB
#define SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11 #define SERIAL_GPIO_PIN_TX GPIO_Pin_10 // PB.10
#define SERIAL_GPIO_PinSource_TX GPIO_PinSource10 #define SERIAL_GPIO_PIN_RX GPIO_Pin_11 // PB.11
#define SERIAL_GPIO_PinSource_RX GPIO_PinSource11 #define SERIAL_GPIO_PinSource_TX GPIO_PinSource10
#define SERIAL_GPIO_AF GPIO_AF_USART3 #define SERIAL_GPIO_PinSource_RX GPIO_PinSource11
#define SERIAL_USART USART3 #define SERIAL_GPIO_AF GPIO_AF_USART3
#define SERIAL_USART_IRQHandler USART3_IRQHandler #define SERIAL_USART USART3
#define SERIAL_USART_IRQn USART3_IRQn #define SERIAL_USART_IRQHandler USART3_IRQHandler
#define SERIAL_DMA_Stream_RX DMA1_Stream1 #define SERIAL_USART_IRQn USART3_IRQn
#define SERIAL_DMA_Channel_RX DMA_Channel_4 #define SERIAL_DMA_Stream_RX DMA1_Stream1
#define SERIAL_DMA_Channel_RX DMA_Channel_4
#endif #endif
// Telemetry // Telemetry
@ -558,35 +733,50 @@
// PCBREV // PCBREV
#if defined(PCBX7) #if defined(PCBX7)
#define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA #define PCBREV_RCC_AHB1Periph RCC_AHB1Periph_GPIOA
#define PCBREV_GPIO GPIOA #define PCBREV_GPIO GPIOA
#define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14 #define PCBREV_GPIO_PIN GPIO_Pin_14 // PA.14
#else #else
#define PCBREV_RCC_AHB1Periph 0 #define PCBREV_RCC_AHB1Periph 0
#endif #endif
// SPORT update connector // S.Port update connector
#if defined(PCBX7) #if defined(PCBXLITE)
#define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define SPORT_MAX_BAUDRATE 250000 // not tested
#define SPORT_UPDATE_PWR_GPIO GPIOB #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
#define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_2 // PB.02 #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 #else
#define SPORT_UPDATE_RCC_AHB1Periph 0 #define SPORT_MAX_BAUDRATE 400000
#define SPORT_UPDATE_RCC_AHB1Periph 0
#endif #endif
// Heartbeat // Heartbeat
#define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC #if defined(PCBXLITE)
#define HEARTBEAT_RCC_APB2Periph RCC_APB2Periph_USART6 #define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
#define HEARTBEAT_GPIO GPIOC #define HEARTBEAT_RCC_APB2Periph 0
#define HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07 #define HEARTBEAT_GPIO GPIOD
#define HEARTBEAT_GPIO_PinSource GPIO_PinSource7 #define HEARTBEAT_GPIO_PIN GPIO_Pin_15 // PD.15
#define HEARTBEAT_GPIO_AF_SBUS GPIO_AF_USART6 #else
#define HEARTBEAT_GPIO_AF_CAPTURE GPIO_AF_TIM3 #define TRAINER_MODULE_HEARTBEAT
#define HEARTBEAT_USART USART6 #define HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
#define HEARTBEAT_USART_IRQHandler USART6_IRQHandler #define HEARTBEAT_RCC_APB2Periph RCC_APB2Periph_USART6
#define HEARTBEAT_USART_IRQn USART6_IRQn #define HEARTBEAT_GPIO GPIOC
#define HEARTBEAT_DMA_Stream DMA2_Stream1 #define HEARTBEAT_GPIO_PIN GPIO_Pin_7 // PC.07
#define HEARTBEAT_DMA_Channel DMA_Channel_5 #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 // USB
#define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA #define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA
@ -612,7 +802,7 @@
#define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource5 #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource5
#define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM9 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM9
#define BACKLIGHT_GPIO_AF_2 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_AHB1Periph RCC_AHB1Periph_GPIOD
#define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4
#define BACKLIGHT_RCC_APB2Periph 0 #define BACKLIGHT_RCC_APB2Periph 0
@ -625,6 +815,19 @@
#define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource13 #define BACKLIGHT_GPIO_PinSource_2 GPIO_PinSource13
#define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM4 #define BACKLIGHT_GPIO_AF_1 GPIO_AF_TIM4
#define BACKLIGHT_GPIO_AF_2 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) #elif defined(PCBX7)
#define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD
#define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4 #define BACKLIGHT_RCC_APB1Periph RCC_APB1Periph_TIM4
@ -635,6 +838,9 @@
#define BACKLIGHT_GPIO_PIN GPIO_Pin_13 // PD.13 #define BACKLIGHT_GPIO_PIN GPIO_Pin_13 // PD.13
#define BACKLIGHT_GPIO_PinSource GPIO_PinSource13 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource13
#define BACKLIGHT_GPIO_AF GPIO_AF_TIM4 #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 #else
#define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
#define BACKLIGHT_RCC_APB1Periph 0 #define BACKLIGHT_RCC_APB1Periph 0
@ -669,6 +875,27 @@
#define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7 #define LCD_DMA_FLAG_INT DMA_HIFCR_CTCIF7
#define LCD_SPI SPI3 #define LCD_SPI SPI3
#define LCD_GPIO_AF GPIO_AF_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) #elif defined(PCBX9DP) || defined(PCBX7)
#define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1) #define LCD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA1)
#define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3 #define LCD_RCC_APB1Periph RCC_APB1Periph_SPI3
@ -704,18 +931,29 @@
#endif #endif
#define LCD_RCC_APB2Periph 0 #define LCD_RCC_APB2Periph 0
// I2C Bus: EEPROM and CAT5137 digital pot for volume control // 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_RCC_APB1Periph RCC_APB1Periph_I2C1
#define I2C 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_GPIO_AF GPIO_AF_I2C1
#define I2C_SCL_GPIO_PinSource GPIO_PinSource6 #if defined(PCBXLITE)
#define I2C_SDA_GPIO_PinSource GPIO_PinSource7 #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) #if defined(REV4a)
#define I2C_SPEED 100000 #define I2C_SPEED 100000
#else #else
@ -728,8 +966,12 @@
// SD - SPI2 // SD - SPI2
#define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1) #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
#define SD_RCC_APB1Periph RCC_APB1Periph_SPI2 #define SD_RCC_APB1Periph RCC_APB1Periph_SPI2
#define SD_GPIO_PRESENT GPIOD #define SD_GPIO_PRESENT_GPIO GPIOD
#define SD_GPIO_PIN_PRESENT GPIO_Pin_9 // PD.09 #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 GPIOB
#define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12 #define SD_GPIO_PIN_CS GPIO_Pin_12 // PB.12
#define SD_GPIO_PIN_SCK GPIO_Pin_13 // PB.13 #define SD_GPIO_PIN_SCK GPIO_Pin_13 // PB.13
@ -766,17 +1008,39 @@
#define AUDIO_DMA DMA1 #define AUDIO_DMA DMA1
// Haptic // 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_AHB1Periph RCC_AHB1Periph_GPIOB
#define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM10 #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM10
#define HAPTIC_RCC_APB1Periph 0
#define HAPTIC_GPIO_PinSource GPIO_PinSource8 #define HAPTIC_GPIO_PinSource GPIO_PinSource8
#define HAPTIC_GPIO GPIOB #define HAPTIC_GPIO GPIOB
#define HAPTIC_GPIO_PIN GPIO_Pin_8 // PB.08 #define HAPTIC_GPIO_PIN GPIO_Pin_8 // PB.08
#define HAPTIC_GPIO_AF GPIO_AF_TIM10 #define HAPTIC_GPIO_AF GPIO_AF_TIM10
#define HAPTIC_TIMER 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 #else
#define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOC #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
#define HAPTIC_RCC_APB2Periph 0 #define HAPTIC_RCC_APB2Periph 0
#define HAPTIC_RCC_APB1Periph 0
#define HAPTIC_GPIO GPIOC #define HAPTIC_GPIO GPIOC
#define HAPTIC_GPIO_PIN GPIO_Pin_12 #define HAPTIC_GPIO_PIN GPIO_Pin_12
#endif #endif
@ -812,23 +1076,27 @@
#define BT_TX_GPIO_PinSource GPIO_PinSource14 #define BT_TX_GPIO_PinSource GPIO_PinSource14
#define BT_RX_GPIO_PinSource GPIO_PinSource9 #define BT_RX_GPIO_PinSource GPIO_PinSource9
#define BT_USART_IRQHandler USART6_IRQHandler #define BT_USART_IRQHandler USART6_IRQHandler
#elif defined(PCBX7) #elif defined(PCBX7) || defined(PCBXLITE)
#define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA1) #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA1)
#define BT_RCC_APB1Periph RCC_APB1Periph_USART3 #define BT_RCC_APB1Periph RCC_APB1Periph_USART3
#define BT_RCC_APB2Periph 0 #define BT_RCC_APB2Periph 0
#define BT_EN_GPIO GPIOE #define BT_EN_GPIO GPIOE
#define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12 #if defined(PCBXLITE)
#define BT_GPIO_TXRX GPIOB #define BT_EN_GPIO_PIN GPIO_Pin_15 // PE.15
#define BT_TX_GPIO_PIN GPIO_Pin_10 // PB.10 #else
#define BT_RX_GPIO_PIN GPIO_Pin_11 // PB.11 #define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12
#define BT_TX_GPIO_PinSource GPIO_PinSource10 #endif
#define BT_RX_GPIO_PinSource GPIO_PinSource11 #define BT_GPIO_TXRX GPIOB
#define BT_GPIO_AF GPIO_AF_USART3 #define BT_TX_GPIO_PIN GPIO_Pin_10 // PB.10
#define BT_USART USART3 #define BT_RX_GPIO_PIN GPIO_Pin_11 // PB.11
#define BT_USART_IRQHandler USART3_IRQHandler #define BT_TX_GPIO_PinSource GPIO_PinSource10
#define BT_USART_IRQn USART3_IRQn #define BT_RX_GPIO_PinSource GPIO_PinSource11
#define BT_DMA_Stream_RX DMA1_Stream1 #define BT_GPIO_AF GPIO_AF_USART3
#define BT_DMA_Channel_RX DMA_Channel_4 #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 #else
#define BT_RCC_AHB1Periph 0 #define BT_RCC_AHB1Periph 0
#define BT_RCC_APB1Periph 0 #define BT_RCC_APB1Periph 0

View file

@ -20,10 +20,11 @@
#include "opentx.h" #include "opentx.h"
#if defined(PCBX9E) || defined(PCBX9DP) #if defined(HAPTIC_PWM)
// TODO test Haptic on X7 (I added PWM support)
void hapticOff(void) void hapticOff(void)
{ {
HAPTIC_TIMER->CCR1 = 0; HAPTIC_COUNTER_REGISTER = 0;
} }
void hapticOn(uint32_t pwmPercent) void hapticOn(uint32_t pwmPercent)
@ -31,7 +32,7 @@ void hapticOn(uint32_t pwmPercent)
if (pwmPercent > 100) { if (pwmPercent > 100) {
pwmPercent = 100; pwmPercent = 100;
} }
HAPTIC_TIMER->CCR1 = pwmPercent; HAPTIC_COUNTER_REGISTER = pwmPercent;
} }
void hapticInit(void) void hapticInit(void)
@ -47,11 +48,10 @@ void hapticInit(void)
GPIO_PinAFConfig(HAPTIC_GPIO, HAPTIC_GPIO_PinSource, HAPTIC_GPIO_AF); GPIO_PinAFConfig(HAPTIC_GPIO, HAPTIC_GPIO_PinSource, HAPTIC_GPIO_AF);
HAPTIC_TIMER->ARR = 100; HAPTIC_TIMER->ARR = 100;
HAPTIC_TIMER->PSC = (PERI2_FREQUENCY * TIMER_MULT_APB2) / 10000 - 1; HAPTIC_TIMER->PSC = HAPTIC_TIMER_FREQ / 10000 - 1;
HAPTIC_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM HAPTIC_TIMER->CCMR1 = HAPTIC_CCMR1; // PWM
HAPTIC_TIMER->CCER = TIM_CCER_CC1E; HAPTIC_TIMER->CCER = HAPTIC_CCER;
HAPTIC_COUNTER_REGISTER = 0;
HAPTIC_TIMER->CCR1 = 0;
HAPTIC_TIMER->EGR = 0; HAPTIC_TIMER->EGR = 0;
HAPTIC_TIMER->CR1 = TIM_CR1_CEN; // Counter enable HAPTIC_TIMER->CR1 = TIM_CR1_CEN; // Counter enable
} }

View file

@ -28,13 +28,13 @@ void i2cInit()
I2C_DeInit(I2C); I2C_DeInit(I2C);
GPIO_InitTypeDef GPIO_InitStructure; 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_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(I2C_GPIO, &GPIO_InitStructure); GPIO_Init(I2C_WP_GPIO, &GPIO_InitStructure);
GPIO_ResetBits(I2C_GPIO, I2C_GPIO_PIN_WP); GPIO_ResetBits(I2C_WP_GPIO, I2C_WP_GPIO_PIN);
I2C_InitTypeDef I2C_InitStructure; I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED; I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
@ -46,15 +46,15 @@ void i2cInit()
I2C_Init(I2C, &I2C_InitStructure); I2C_Init(I2C, &I2C_InitStructure);
I2C_Cmd(I2C, ENABLE); I2C_Cmd(I2C, ENABLE);
GPIO_PinAFConfig(I2C_GPIO, I2C_SCL_GPIO_PinSource, I2C_GPIO_AF); GPIO_PinAFConfig(I2C_SPI_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_SDA_GPIO_PinSource, I2C_GPIO_AF);
GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 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 #define I2C_TIMEOUT_MAX 1000

View file

@ -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();
}

View file

@ -27,22 +27,32 @@ uint32_t rotencPosition;
uint32_t readKeys() uint32_t readKeys()
{ {
uint32_t result = 0; uint32_t result = 0;
if (~KEYS_GPIO_REG_ENTER & KEYS_GPIO_PIN_ENTER) if (~KEYS_GPIO_REG_ENTER & KEYS_GPIO_PIN_ENTER)
result |= 1 << KEY_ENTER; result |= 1 << KEY_ENTER;
if (~KEYS_GPIO_REG_MENU & KEYS_GPIO_PIN_MENU) if (~KEYS_GPIO_REG_MENU & KEYS_GPIO_PIN_MENU)
result |= 1 << KEY_MENU; result |= 1 << KEY_MENU;
#if defined(KEYS_GPIO_PIN_PAGE)
if (~KEYS_GPIO_REG_PAGE & KEYS_GPIO_PIN_PAGE) if (~KEYS_GPIO_REG_PAGE & KEYS_GPIO_PIN_PAGE)
result |= 1 << KEY_PAGE; result |= 1 << KEY_PAGE;
#endif
if (~KEYS_GPIO_REG_EXIT & KEYS_GPIO_PIN_EXIT) if (~KEYS_GPIO_REG_EXIT & KEYS_GPIO_PIN_EXIT)
result |= 1 << KEY_EXIT; result |= 1 << KEY_EXIT;
#if defined(KEYS_GPIO_PIN_PLUS)
#if !defined(PCBX9E) && !defined(PCBX7)
if (~KEYS_GPIO_REG_PLUS & KEYS_GPIO_PIN_PLUS) if (~KEYS_GPIO_REG_PLUS & KEYS_GPIO_PIN_PLUS)
result |= 1 << KEY_PLUS; result |= 1 << KEY_PLUS;
if (~KEYS_GPIO_REG_MINUS & KEYS_GPIO_PIN_MINUS) if (~KEYS_GPIO_REG_MINUS & KEYS_GPIO_PIN_MINUS)
result |= 1 << KEY_MINUS; result |= 1 << KEY_MINUS;
#endif #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); // if (result != 0) TRACE("readKeys(): result=0x%02x", result);
@ -61,6 +71,8 @@ uint32_t readTrims()
result |= 0x04; result |= 0x04;
if (~TRIMS_GPIO_REG_LVU & TRIMS_GPIO_PIN_LVU) if (~TRIMS_GPIO_REG_LVU & TRIMS_GPIO_PIN_LVU)
result |= 0x08; result |= 0x08;
#if !defined(PCBXLITE)
if (~TRIMS_GPIO_REG_RVD & TRIMS_GPIO_PIN_RVD) if (~TRIMS_GPIO_REG_RVD & TRIMS_GPIO_PIN_RVD)
result |= 0x10; result |= 0x10;
if (~TRIMS_GPIO_REG_RVU & TRIMS_GPIO_PIN_RVU) if (~TRIMS_GPIO_REG_RVU & TRIMS_GPIO_PIN_RVU)
@ -69,6 +81,7 @@ uint32_t readTrims()
result |= 0x40; result |= 0x40;
if (~TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR) if (~TRIMS_GPIO_REG_RHR & TRIMS_GPIO_PIN_RHR)
result |= 0x80; result |= 0x80;
#endif
// TRACE("readTrims(): result=0x%02x", result); // TRACE("readTrims(): result=0x%02x", result);
@ -163,9 +176,12 @@ uint32_t switchState(uint8_t index)
switch (index) { switch (index) {
ADD_3POS_CASE(A, 0); ADD_3POS_CASE(A, 0);
ADD_3POS_CASE(B, 1); ADD_3POS_CASE(B, 1);
#if !defined(PCBXLITE)
ADD_3POS_CASE(C, 2); ADD_3POS_CASE(C, 2);
ADD_3POS_CASE(D, 3); ADD_3POS_CASE(D, 3);
#if defined(PCBX7) #endif
#if defined(PCBXLITE)
#elif defined(PCBX7)
ADD_2POS_CASE(F); ADD_2POS_CASE(F);
ADD_2POS_CASE(H); ADD_2POS_CASE(H);
#else #else

View file

@ -89,7 +89,7 @@ void lcdHardwareInit()
LCD_DMA->HIFCR = LCD_DMA_FLAGS; // Write ones to clear bits 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->CR = DMA_SxCR_PL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0;
LCD_DMA_Stream->PAR = (uint32_t)&LCD_SPI->DR; LCD_DMA_Stream->PAR = (uint32_t)&LCD_SPI->DR;
#if defined(PCBX7) #if LCD_W == 128
LCD_DMA_Stream->NDTR = LCD_W; LCD_DMA_Stream->NDTR = LCD_W;
#else #else
LCD_DMA_Stream->M0AR = (uint32_t)displayBuf; LCD_DMA_Stream->M0AR = (uint32_t)displayBuf;
@ -100,7 +100,7 @@ void lcdHardwareInit()
NVIC_EnableIRQ(LCD_DMA_Stream_IRQn); NVIC_EnableIRQ(LCD_DMA_Stream_IRQn);
} }
#if defined(PCBX7) #if LCD_W == 128
void lcdStart() void lcdStart()
{ {
lcdWriteCommand(0xe2); // (14) Soft reset lcdWriteCommand(0xe2); // (14) Soft reset
@ -176,7 +176,7 @@ void lcdRefresh(bool wait)
lcdInitFinish(); lcdInitFinish();
} }
#if defined(PCBX7) #if LCD_W == 128
uint8_t * p = displayBuf; uint8_t * p = displayBuf;
for (uint8_t y=0; y < 8; y++, p+=LCD_W) { for (uint8_t y=0; y < 8; y++, p+=LCD_W) {
lcdWriteCommand(0x10); // Column addr 0 lcdWriteCommand(0x10); // Column addr 0
@ -260,7 +260,7 @@ void lcdOff()
void lcdReset() void lcdReset()
{ {
LCD_RST_LOW(); LCD_RST_LOW();
#if defined(PCBX7) #if LCD_W == 128
delay_ms(150); delay_ms(150);
#else #else
delay_ms(1); // Only 3 us needed according to data-sheet, we use 1 ms 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(); lcdInitFinish();
} }
#if !defined(PCBX7) #if LCD_W != 128
WAIT_FOR_DMA_END(); WAIT_FOR_DMA_END();
#endif #endif

View file

@ -37,8 +37,6 @@ void extmoduleDsm2Start(void);
#endif #endif
void extmoduleCrossfireStart(void); void extmoduleCrossfireStart(void);
void intmoduleSendNextFrame();
void init_pxx(uint32_t port) void init_pxx(uint32_t port)
{ {
if (port == INTERNAL_MODULE) if (port == INTERNAL_MODULE)
@ -135,156 +133,3 @@ void disable_crossfire(uint32_t port)
extmoduleStop(); 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();
}

View file

@ -31,7 +31,7 @@ void pwrInit()
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 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_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN);
GPIO_InitStructure.GPIO_Pin = 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_Pin = PWR_SWITCH_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 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_InitStructure.GPIO_Pin = TRAINER_DETECT_GPIO_PIN;
GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure); GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure);
#endif
#if defined(PCBX7) #if defined(PCBREV_GPIO_PIN)
// Init PCBREV PIN // Init PCBREV PIN
GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN);
GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN;
@ -61,12 +63,12 @@ void pwrInit()
void pwrOn() void pwrOn()
{ {
GPIO_SetBits(PWR_GPIO, PWR_ON_GPIO_PIN); GPIO_SetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN);
} }
void pwrOff() void pwrOff()
{ {
GPIO_ResetBits(PWR_GPIO, PWR_ON_GPIO_PIN); GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN);
// disable interrupts // disable interrupts
__disable_irq(); __disable_irq();
@ -95,5 +97,5 @@ void pwrOff()
uint32_t pwrPressed() 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;
} }

View file

@ -92,7 +92,6 @@ void init_trainer_capture()
void stop_trainer_capture() void stop_trainer_capture()
{ {
NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt NVIC_DisableIRQ(TRAINER_TIMER_IRQn); // Stop Interrupt
TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter TRAINER_TIMER->CR1 &= ~TIM_CR1_CEN; // Stop counter
TRAINER_TIMER->DIER = 0; // Stop Interrupt TRAINER_TIMER->DIER = 0; // Stop Interrupt
} }

View file

@ -121,7 +121,7 @@ void mixerTask(void * pdata)
return; return;
#endif #endif
#if defined(PCBTARANIS) #if defined(SBUS)
processSbusInput(); processSbusInput();
#endif #endif

View file

@ -41,7 +41,7 @@ void processCrossfireTelemetryData(uint8_t data);
void crossfireSetDefault(int index, uint8_t id, uint8_t subId); void crossfireSetDefault(int index, uint8_t id, uint8_t subId);
bool isCrossfireOutputBufferAvailable(); bool isCrossfireOutputBufferAvailable();
#if defined(PCBX7) || defined(PCBHORUS) #if SPORT_MAX_BAUDRATE < 400000
const uint32_t CROSSFIRE_BAUDRATES[] = { const uint32_t CROSSFIRE_BAUDRATES[] = {
400000, 400000,
115200, 115200,

View file

@ -191,7 +191,7 @@ TEST(evalLogicalSwitches, playFile)
} }
#endif #endif
#if defined(PCBTARANIS) && !defined(PCBX7) #if defined(PCBTARANIS) && NUM_SWITCHES >= 8
TEST(getSwitch, edgeInstant) TEST(getSwitch, edgeInstant)
{ {
MODEL_RESET(); MODEL_RESET();

View file

@ -490,6 +490,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp""\3135d""\3135n""\3136d""\3136n" #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 #else
#define TR_TRIMS_SWITCHES TR("tSl""tSp""tVd""tVn""tPd""tPn""tKl""tKp", "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp") #define TR_TRIMS_SWITCHES TR("tSl""tSp""tVd""tVn""tPd""tPn""tKl""tKp", "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp")
#endif #endif

View file

@ -513,6 +513,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -429,14 +429,17 @@
#define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0"
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define LEN_VKEYS "\006" #define LEN_VKEYS "\005"
#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" #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) #elif defined(PCBTARANIS)
#define LEN_VKEYS "\005" #define LEN_VKEYS "\005"
#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus"
#else #else
#define LEN_VKEYS "\005" #define LEN_VKEYS "\005"
#define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0"
#endif #endif
#define LEN_VRENCODERS "\003" #define LEN_VRENCODERS "\003"
@ -472,6 +475,9 @@
#elif defined(PCBX9E) #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_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" #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) #elif defined(PCBX7)
#define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0"
#define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SF\0""\312SH\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SF\0""\312SH\0"
@ -496,6 +502,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -489,6 +489,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -493,6 +493,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -514,6 +514,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tDg""tDd""tPb""tPh""tGb""tGh""tAg""tAd", "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad") #define TR_TRIMS_SWITCHES TR("tDg""tDd""tPb""tPh""tGb""tGh""tAg""tAd", "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad")
#endif #endif

View file

@ -500,6 +500,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -487,6 +487,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -502,6 +502,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -492,6 +492,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Eu""\313Td""\313Tu""\313Al""\313Ar")
#endif #endif

View file

@ -507,6 +507,8 @@
#if defined(PCBHORUS) #if defined(PCBHORUS)
#define TR_TRIMS_SWITCHES "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh""\3135d""\3135u""\3136d""\3136u" #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 #else
#define TR_TRIMS_SWITCHES TR("tRv""tRh""tHn""tHu""tGn""tGu""tSv""tSh", "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh") #define TR_TRIMS_SWITCHES TR("tRv""tRh""tHn""tHu""tGn""tGu""tSv""tSh", "\313Rv""\313Rh""\313Hn""\313Hu""\313Gn""\313Gu""\313Sv""\313Sh")
#endif #endif

View file

@ -139,6 +139,15 @@ if [[ " X7 ALL " =~ " ${FLAVOR} " ]] ; then
make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS}
fi 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 if [[ " X9D X9 ALL " =~ " ${FLAVOR} " ]] ; then
# OpenTX on X9D # OpenTX on X9D
rm -rf * rm -rf *