mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 16:55:20 +03:00
parent
269831e0c4
commit
c4001c8507
85 changed files with 1555 additions and 976 deletions
|
@ -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+
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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_
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
163
radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp
Normal file
163
radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp
Normal 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);
|
||||||
|
}
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
174
radio/src/targets/taranis/intmodule_pulses_driver.cpp
Normal file
174
radio/src/targets/taranis/intmodule_pulses_driver.cpp
Normal 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();
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,7 @@ void mixerTask(void * pdata)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(SBUS)
|
||||||
processSbusInput();
|
processSbusInput();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue