feat: Radiomaster GX15 support (#7643)
Co-authored-by: 3djc <3djc@gh.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: philmoz <phil.a.mitchell@gmail.com> Co-authored-by: Peter Feerick <pfeerick@users.noreply.github.com>
This commit is contained in:
co-authored by
3djc
Claude Opus 5
philmoz
Peter Feerick
parent
423876b10b
commit
62ed67a462
@@ -134,6 +134,7 @@ body:
|
||||
- RadioMaster T8
|
||||
- RadioMaster TX12 / TX12MK2
|
||||
- RadioMaster TX15
|
||||
- RadioMaster GX15
|
||||
- RadioMaster TX16S / TX16SMK2
|
||||
- RadioMaster TX16S MK3
|
||||
- RadioMaster Zorro
|
||||
|
||||
@@ -87,7 +87,8 @@ jobs:
|
||||
- tprov2;tpros;bumblebee
|
||||
- mt12;gx12;t20;t20v2
|
||||
- t12max;tx12mk2;boxer
|
||||
- tx15;tx16s
|
||||
- tx16s
|
||||
- tx15;gx15
|
||||
- x12s;f16
|
||||
- v14;v14lcd;v16
|
||||
- x10;x10express
|
||||
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
- id: color-4
|
||||
target: [nb4p, st16, pa01, c14]
|
||||
- id: color-5
|
||||
target: [t15pro, tx16smk3]
|
||||
target: [t15pro, tx16smk3, gx15]
|
||||
|
||||
steps:
|
||||
- name: Check out the repo
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- nb4p
|
||||
- st16
|
||||
- c14
|
||||
- tx15
|
||||
- tx15;gx15
|
||||
- t15pro
|
||||
- v12
|
||||
container:
|
||||
|
||||
@@ -177,7 +177,7 @@ jobs:
|
||||
> If you are using a STM32 F2 based radio, *stop right now*, this release is not for you! EdgeTX v2.11 is the last release series to support these radios. Check [this list](https://hackmd.io/@edgetx/B12oQyQKye) if you are unsure if this affects you. Because of this, EdgeTX v2.11 will continue to be supported alongside 2.12, 3.0, etc., with a focus on bug fixes.
|
||||
|
||||
> [!WARNING]
|
||||
> Radios based on STM32H7 MCUs update differently to older radios. Do **not** use the "Flash via USB" option in EdgeTX Buddy with them (yet). To update radios such as the Flysky PA01 & ST16, Jumper T15 Pro, RM TX15 and RM TX16S MK3, please follow the instructions in the [EdgeTX Manual](https://manual.edgetx.org/installing-and-updating-edgetx/updating-your-stm32h7-radio).
|
||||
> Radios based on STM32H7 MCUs update differently to older radios. Do **not** use the "Flash via USB" option in EdgeTX Buddy with them (yet). To update radios such as the Flysky PA01 & ST16, Jumper T15 Pro, RM TX15, RM GX15 and RM TX16S MK3, please follow the instructions in the [EdgeTX Manual](https://manual.edgetx.org/installing-and-updating-edgetx/updating-your-stm32h7-radio).
|
||||
|
||||
> [!NOTE]
|
||||
> For MacOS users, Companion is now only compiled for MacOS 12 and above. Stay with v2.10.5 or earlier if you need support for an older version of MacOS.
|
||||
|
||||
@@ -93,8 +93,8 @@ void BoardJson::afterLoadFixups(Board::Type board, InputsTable * inputs, Switche
|
||||
// TODO json files do not contain gyro defs
|
||||
// Radio cmake directive IMU is currently used
|
||||
if (IS_TARANIS_XLITES(board) || IS_FAMILY_HORUS_OR_T16(board) ||
|
||||
IS_RADIOMASTER_TX15(board) || IS_RADIOMASTER_TX16SMK3(board) ||
|
||||
IS_FLYSKY_PA01(board)) {
|
||||
IS_RADIOMASTER_TX15(board) || IS_RADIOMASTER_GX15(board) ||
|
||||
IS_RADIOMASTER_TX16SMK3(board) || IS_FLYSKY_PA01(board)) {
|
||||
if (getInputIndex(inputs, "TILT_X", Board::LVT_TAG) < 0) {
|
||||
InputDefn defn;
|
||||
defn.type = AIT_FLEX;
|
||||
|
||||
@@ -137,6 +137,8 @@ uint32_t Boards::getFourCC(Type board)
|
||||
return 0x3878746F;
|
||||
case BOARD_RADIOMASTER_TX15:
|
||||
return 0x4978746F;
|
||||
case BOARD_RADIOMASTER_GX15:
|
||||
return 0x4978746F;
|
||||
case BOARD_RADIOMASTER_TX16SMK3:
|
||||
return 0x4978746F;
|
||||
case BOARD_RADIOMASTER_TX12:
|
||||
@@ -293,6 +295,7 @@ int Boards::getFlashSize(Type board)
|
||||
case BOARD_RADIOMASTER_TX16S:
|
||||
case BOARD_RADIOMASTER_TX16SMK3:
|
||||
case BOARD_RADIOMASTER_TX15:
|
||||
case BOARD_RADIOMASTER_GX15:
|
||||
case BOARD_FLYSKY_NV14:
|
||||
case BOARD_FLYSKY_EL18:
|
||||
case BOARD_FLYSKY_PA01: // 8MB SDRAM
|
||||
@@ -355,7 +358,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
|
||||
case HasIMU:
|
||||
return (IS_FAMILY_HORUS_OR_T16(board) || IS_TARANIS(board) ||
|
||||
IS_RADIOMASTER_TX15(board));
|
||||
IS_RADIOMASTER_TX15(board) || IS_RADIOMASTER_GX15(board) || IS_RADIOMASTER_TX16SMK3(board));
|
||||
|
||||
case HasInternalGPS:
|
||||
return ((IS_FAMILY_HORUS_OR_T16(board) && getCapability(board, HasAuxSerialMode)) ||
|
||||
@@ -422,7 +425,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
IS_RADIOMASTER_ZORRO(board) || IS_RADIOMASTER_TX15(board) ||
|
||||
IS_JUMPER_T15PRO(board) || IS_FLYSKY_PA01(board) ||
|
||||
IS_FLYSKY_ST16(board) || IS_RADIOMASTER_TX16SMK3(board) ||
|
||||
IS_IFLIGHT_C14(board));
|
||||
IS_IFLIGHT_C14(board) || IS_RADIOMASTER_GX15(board));
|
||||
|
||||
default:
|
||||
return getBoardJson(board)->getCapability(capability);
|
||||
@@ -660,6 +663,8 @@ QString Boards::getBoardName(Board::Type board)
|
||||
return "Radiomaster TX16 SMK3";
|
||||
case BOARD_RADIOMASTER_TX15:
|
||||
return "Radiomaster TX15";
|
||||
case BOARD_RADIOMASTER_GX15:
|
||||
return "Radiomaster GX15";
|
||||
case BOARD_RADIOMASTER_ZORRO:
|
||||
return "Radiomaster Zorro";
|
||||
case BOARD_RADIOMASTER_GX12:
|
||||
@@ -806,6 +811,7 @@ int Boards::getDefaultInternalModules(Board::Type board)
|
||||
case BOARD_HELLORADIOSKY_V14LCD:
|
||||
case BOARD_HELLORADIOSKY_V16:
|
||||
case BOARD_RADIOMASTER_TX15:
|
||||
case BOARD_RADIOMASTER_GX15:
|
||||
case BOARD_RADIOMASTER_TX16SMK3:
|
||||
case BOARD_IFLIGHT_COMMANDO8:
|
||||
case BOARD_IFLIGHT_COMMANDO14:
|
||||
@@ -881,6 +887,7 @@ void Boards::getBattRange(Board::Type board, int& vmin, int& vmax, unsigned int&
|
||||
case BOARD_RADIOMASTER_TX16S:
|
||||
case BOARD_RADIOMASTER_TX16SMK3:
|
||||
case BOARD_RADIOMASTER_TX15:
|
||||
case BOARD_RADIOMASTER_GX15:
|
||||
case BOARD_JUMPER_T16:
|
||||
case BOARD_JUMPER_T18:
|
||||
case BOARD_JUMPER_T20:
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace Board {
|
||||
BOARD_RADIOMASTER_TX16S,
|
||||
BOARD_RADIOMASTER_TX16SMK3,
|
||||
BOARD_RADIOMASTER_TX15,
|
||||
BOARD_RADIOMASTER_GX15,
|
||||
BOARD_JUMPER_T18,
|
||||
BOARD_JUMPER_T20,
|
||||
BOARD_RADIOMASTER_TX12,
|
||||
@@ -614,6 +615,11 @@ inline bool IS_RADIOMASTER_TX15(Board::Type board)
|
||||
return board == Board::BOARD_RADIOMASTER_TX15;
|
||||
}
|
||||
|
||||
inline bool IS_RADIOMASTER_GX15(Board::Type board)
|
||||
{
|
||||
return board == Board::BOARD_RADIOMASTER_GX15;
|
||||
}
|
||||
|
||||
inline bool IS_RADIOMASTER_TX12(Board::Type board)
|
||||
{
|
||||
return board == Board::BOARD_RADIOMASTER_TX12;
|
||||
@@ -689,6 +695,7 @@ inline bool IS_FAMILY_T16(Board::Type board)
|
||||
board == Board::BOARD_JUMPER_T16 ||
|
||||
board == Board::BOARD_JUMPER_T18 ||
|
||||
board == Board::BOARD_RADIOMASTER_TX15 ||
|
||||
board == Board::BOARD_RADIOMASTER_GX15 ||
|
||||
board == Board::BOARD_RADIOMASTER_TX16S ||
|
||||
board == Board::BOARD_RADIOMASTER_TX16SMK3;
|
||||
}
|
||||
|
||||
@@ -215,6 +215,8 @@ void GeneralSettings::init()
|
||||
strcpy(bluetoothName, "st16");
|
||||
else if (IS_RADIOMASTER_TX15(board))
|
||||
strcpy(bluetoothName, "tx15");
|
||||
else if (IS_RADIOMASTER_GX15(board))
|
||||
strcpy(bluetoothName, "gx15");
|
||||
else if (IS_RADIOMASTER_TX16SMK3(board))
|
||||
strcpy(bluetoothName, "tx16smk3");
|
||||
else if (IS_FAMILY_HORUS_OR_T16(board))
|
||||
|
||||
@@ -93,7 +93,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||
return id.contains("internalelrs") || IS_RADIOMASTER_TX12_MK2(board) ||
|
||||
IS_IFLIGHT_COMMANDO8(board) || IS_RADIOMASTER_BOXER(board) ||
|
||||
IS_RADIOMASTER_POCKET(board) || IS_JUMPER_T20(board) ||
|
||||
IS_RADIOMASTER_MT12(board) || IS_RADIOMASTER_TX15(board) || IS_JUMPER_T15PRO(board) || IS_JUMPER_T22(board);
|
||||
IS_RADIOMASTER_MT12(board) || IS_RADIOMASTER_TX15(board) || IS_RADIOMASTER_GX15(board) || IS_JUMPER_T15PRO(board) || IS_JUMPER_T22(board);
|
||||
case HasIntModuleFlySky:
|
||||
return id.contains("afhds2a") || id.contains("afhds3") ||
|
||||
IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FAMILY_PL18(board);
|
||||
@@ -735,6 +735,13 @@ void registerOpenTxFirmwares()
|
||||
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
||||
registerOpenTxFirmware(firmware);
|
||||
|
||||
/* Radiomaster GX15 board */
|
||||
firmware = new OpenTxFirmware(FIRMWAREID("gx15"), Firmware::tr("Radiomaster GX15"), BOARD_RADIOMASTER_GX15);
|
||||
addOpenTxFrskyOptions(firmware);
|
||||
addOpenTxRfOptions(firmware, FLEX);
|
||||
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
||||
registerOpenTxFirmware(firmware);
|
||||
|
||||
/* Radiomaster TX16S board */
|
||||
firmware = new OpenTxFirmware(FIRMWAREID("tx16s"), Firmware::tr("Radiomaster TX16S / SE / Hall / Masterfire"), BOARD_RADIOMASTER_TX16S);
|
||||
addOpenTxFrskyOptions(firmware);
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
["Jumper T-Pro V2", "tprov2-"],
|
||||
["RadioMaster Boxer", "boxer-"],
|
||||
["RadioMaster GX12", "gx12-"],
|
||||
["RadioMaster GX15", "gx15-"],
|
||||
["RadioMaster MT12","mt12-"],
|
||||
["RadioMaster Pocket", "pocket-"],
|
||||
["RadioMaster TX12MK2", "tx12mk2-"],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
include(CMakeForceCompiler)
|
||||
include(Bitmaps)
|
||||
|
||||
set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S PL18 T15PRO ST16 PA01 TX15 TX16SMK3 T22 V12)
|
||||
set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S PL18 T15PRO ST16 PA01 TX15 GX15 TX16SMK3 T22 V12)
|
||||
set(RADIO_LANGUAGES CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA)
|
||||
set(TTS_LANGUAGES CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA)
|
||||
|
||||
@@ -103,6 +103,8 @@ elseif(PCB STREQUAL V12)
|
||||
include(targets/v12/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL TX15)
|
||||
include(targets/tx15/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL GX15)
|
||||
include(targets/gx15/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL TX16SMK3)
|
||||
include(targets/tx16smk3/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL T22)
|
||||
|
||||
@@ -0,0 +1,541 @@
|
||||
{
|
||||
"adc_inputs": {
|
||||
"adcs": [
|
||||
{
|
||||
"name": "MAIN",
|
||||
"adc": "ADC1",
|
||||
"dma": "DMA2",
|
||||
"dma_channel": "LL_DMAMUX1_REQ_ADC1",
|
||||
"dma_stream": "LL_DMA_STREAM_4",
|
||||
"dma_stream_irq": "DMA2_Stream4_IRQn",
|
||||
"dma_stream_irq_handler": "DMA2_Stream4_IRQHandler",
|
||||
"sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5"
|
||||
},
|
||||
{
|
||||
"name": "EXT",
|
||||
"adc": "ADC3",
|
||||
"dma": "DMA2",
|
||||
"dma_channel": "LL_DMAMUX1_REQ_ADC3",
|
||||
"dma_stream": "LL_DMA_STREAM_0",
|
||||
"dma_stream_irq": "DMA2_Stream0_IRQn",
|
||||
"dma_stream_irq_handler": "DMA2_Stream0_IRQHandler",
|
||||
"sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5"
|
||||
}
|
||||
],
|
||||
"inputs": [
|
||||
{
|
||||
"name": "LH",
|
||||
"type": "STICK",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOA",
|
||||
"pin": "LL_GPIO_PIN_6",
|
||||
"channel": "LL_ADC_CHANNEL_3"
|
||||
},
|
||||
{
|
||||
"name": "LV",
|
||||
"type": "STICK",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOC",
|
||||
"pin": "LL_GPIO_PIN_3",
|
||||
"channel": "LL_ADC_CHANNEL_13",
|
||||
"inverted": true
|
||||
},
|
||||
{
|
||||
"name": "RV",
|
||||
"type": "STICK",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOC",
|
||||
"pin": "LL_GPIO_PIN_4",
|
||||
"channel": "LL_ADC_CHANNEL_4"
|
||||
},
|
||||
{
|
||||
"name": "RH",
|
||||
"type": "STICK",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOC",
|
||||
"pin": "LL_GPIO_PIN_5",
|
||||
"channel": "LL_ADC_CHANNEL_8",
|
||||
"inverted": true
|
||||
},
|
||||
{
|
||||
"name": "P1",
|
||||
"type": "FLEX",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOC",
|
||||
"pin": "LL_GPIO_PIN_1",
|
||||
"channel": "LL_ADC_CHANNEL_11",
|
||||
"inverted": true,
|
||||
"label": "S1",
|
||||
"short_label": "1",
|
||||
"default": "POT_CENTER"
|
||||
},
|
||||
{
|
||||
"name": "P2",
|
||||
"type": "FLEX",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOB",
|
||||
"pin": "LL_GPIO_PIN_1",
|
||||
"channel": "LL_ADC_CHANNEL_5",
|
||||
"inverted": true,
|
||||
"label": "S2",
|
||||
"short_label": "2",
|
||||
"default": "POT_CENTER"
|
||||
},
|
||||
{
|
||||
"name": "SL1",
|
||||
"type": "FLEX",
|
||||
"adc": "EXT",
|
||||
"gpio": "GPIOH",
|
||||
"pin": "LL_GPIO_PIN_2",
|
||||
"channel": "LL_ADC_CHANNEL_13",
|
||||
"label": "LS",
|
||||
"short_label": "L",
|
||||
"default": "SLIDER"
|
||||
},
|
||||
{
|
||||
"name": "SL2",
|
||||
"type": "FLEX",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOA",
|
||||
"pin": "LL_GPIO_PIN_7",
|
||||
"channel": "LL_ADC_CHANNEL_7",
|
||||
"inverted": true,
|
||||
"label": "RS",
|
||||
"short_label": "R",
|
||||
"default": "SLIDER"
|
||||
},
|
||||
{
|
||||
"name": "EXT1",
|
||||
"type": "FLEX",
|
||||
"adc": "MAIN",
|
||||
"gpio": "GPIOA",
|
||||
"pin": "LL_GPIO_PIN_5",
|
||||
"channel": "LL_ADC_CHANNEL_19",
|
||||
"label": "EXT1",
|
||||
"short_label": "E1"
|
||||
},
|
||||
{
|
||||
"name": "EXT2",
|
||||
"type": "FLEX",
|
||||
"adc": "EXT",
|
||||
"gpio": "GPIOH",
|
||||
"pin": "LL_GPIO_PIN_5",
|
||||
"channel": "LL_ADC_CHANNEL_16",
|
||||
"label": "EXT2",
|
||||
"short_label": "E2"
|
||||
},
|
||||
{
|
||||
"name": "VBAT",
|
||||
"type": "VBAT",
|
||||
"adc": "EXT",
|
||||
"gpio": "GPIOH",
|
||||
"pin": "LL_GPIO_PIN_3",
|
||||
"channel": "LL_ADC_CHANNEL_14"
|
||||
},
|
||||
{
|
||||
"name": "RTC_BAT",
|
||||
"type": "RTC_BAT",
|
||||
"adc": "EXT",
|
||||
"gpio": null,
|
||||
"pin": null,
|
||||
"channel": "LL_ADC_CHANNEL_VBAT"
|
||||
}
|
||||
]
|
||||
},
|
||||
"switches": [
|
||||
{
|
||||
"name": "SA",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P15",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P14",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SB",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P13",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P12",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SC",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P11",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P10",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SD",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P7",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P6",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SE",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P16",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P17",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SF",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P1",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SG",
|
||||
"type": "3POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "3POS",
|
||||
"display": null,
|
||||
"gpio_high": null,
|
||||
"pin_high": "PCA95XX_P4",
|
||||
"gpio_low": null,
|
||||
"pin_low": "PCA95XX_P5",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SH",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "TOGGLE",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P0",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SI",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "NONE",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P2",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SJ",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "NONE",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P3",
|
||||
"is_cfs": false
|
||||
},
|
||||
{
|
||||
"name": "SW1",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P0",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 0
|
||||
},
|
||||
{
|
||||
"name": "SW2",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P1",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 1
|
||||
},
|
||||
{
|
||||
"name": "SW3",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P2",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 2
|
||||
},
|
||||
{
|
||||
"name": "SW4",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P3",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 3
|
||||
},
|
||||
{
|
||||
"name": "SW5",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P4",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 4
|
||||
},
|
||||
{
|
||||
"name": "SW6",
|
||||
"type": "2POS",
|
||||
"flags": 0,
|
||||
"inverted": false,
|
||||
"default": "2POS",
|
||||
"display": null,
|
||||
"gpio": null,
|
||||
"pin": "PCA95XX_P5",
|
||||
"is_cfs": true,
|
||||
"cfs_idx": 5
|
||||
}
|
||||
],
|
||||
"keys": [
|
||||
{
|
||||
"gpio": "GPIOG",
|
||||
"pin": "LL_GPIO_PIN_3",
|
||||
"active_low": true,
|
||||
"key": "KEY_EXIT",
|
||||
"name": "EXIT",
|
||||
"label": "RTN"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOG",
|
||||
"pin": "LL_GPIO_PIN_12",
|
||||
"active_low": true,
|
||||
"key": "KEY_ENTER",
|
||||
"name": "ENTER",
|
||||
"label": "Enter"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOG",
|
||||
"pin": "LL_GPIO_PIN_7",
|
||||
"active_low": true,
|
||||
"key": "KEY_PAGEUP",
|
||||
"name": "PAGEUP",
|
||||
"label": "PAGE<"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOA",
|
||||
"pin": "LL_GPIO_PIN_8",
|
||||
"active_low": true,
|
||||
"key": "KEY_PAGEDN",
|
||||
"name": "PAGEDN",
|
||||
"label": "PAGE>"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOE",
|
||||
"pin": "LL_GPIO_PIN_3",
|
||||
"active_low": true,
|
||||
"key": "KEY_MODEL",
|
||||
"name": "MDL",
|
||||
"label": "MDL"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOG",
|
||||
"pin": "LL_GPIO_PIN_2",
|
||||
"active_low": true,
|
||||
"key": "KEY_TELE",
|
||||
"name": "TELE",
|
||||
"label": "TELE"
|
||||
},
|
||||
{
|
||||
"gpio": "GPIOB",
|
||||
"pin": "LL_GPIO_PIN_2",
|
||||
"active_low": true,
|
||||
"key": "KEY_SYS",
|
||||
"name": "SYS",
|
||||
"label": "SYS"
|
||||
}
|
||||
],
|
||||
"trims": [
|
||||
{
|
||||
"name": "T1"
|
||||
},
|
||||
{
|
||||
"name": "T2"
|
||||
},
|
||||
{
|
||||
"name": "T3"
|
||||
},
|
||||
{
|
||||
"name": "T4"
|
||||
},
|
||||
{
|
||||
"name": "T5",
|
||||
"dec": {
|
||||
"gpio": "GPIOH",
|
||||
"pin": "LL_GPIO_PIN_15",
|
||||
"active_low": true
|
||||
},
|
||||
"inc": {
|
||||
"gpio": "GPIOH",
|
||||
"pin": "LL_GPIO_PIN_13",
|
||||
"active_low": true
|
||||
},
|
||||
"active_low": true
|
||||
},
|
||||
{
|
||||
"name": "T6"
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"lcd_w": 480,
|
||||
"lcd_h": 320,
|
||||
"lcd_phys_w": 320,
|
||||
"lcd_phys_h": 480,
|
||||
"lcd_depth": 16,
|
||||
"ltdc_irq_prio": 4,
|
||||
"dma_screen_irq_prio": 6
|
||||
},
|
||||
"backlight": {
|
||||
"backlight_gpio": "GPIO_PIN(GPIOA, 10)",
|
||||
"backlight_timer": "TIM1",
|
||||
"backlight_timer_channel": "LL_TIM_CHANNEL_CH3",
|
||||
"backlight_gpio_af": "GPIO_AF1",
|
||||
"backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)"
|
||||
},
|
||||
"leds": {
|
||||
"led_strip_length": 26,
|
||||
"bling_led_strip_start": 6,
|
||||
"bling_led_strip_length": 20,
|
||||
"cfs_led_strip_start": 0,
|
||||
"cfs_led_strip_length": 6,
|
||||
"cfs_leds_per_switch": 1,
|
||||
"led_strip_gpio": "GPIO_PIN(GPIOA, 0)",
|
||||
"led_strip_gpio_af": "LL_GPIO_AF_1",
|
||||
"led_strip_timer": "TIM2",
|
||||
"led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)",
|
||||
"led_strip_timer_channel": "LL_TIM_CHANNEL_CH1",
|
||||
"led_strip_timer_dma": "DMA1",
|
||||
"led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM2_UP",
|
||||
"led_strip_timer_dma_stream": "LL_DMA_STREAM_0",
|
||||
"led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn",
|
||||
"led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler",
|
||||
"led_strip_refresh_period": 50,
|
||||
"status_leds": true,
|
||||
"led_red_gpio": "GPIO_PIN(GPIOI, 8)",
|
||||
"led_green_gpio": "GPIO_PIN(GPIOI, 11)",
|
||||
"led_blue_gpio": "GPIO_PIN(GPIOI, 10)"
|
||||
},
|
||||
"hardware": {
|
||||
"has_ext_module_support": true,
|
||||
"has_int_module_support": true,
|
||||
"cpu": "STM32H750xB",
|
||||
"cpu_type": "STM32H7"
|
||||
},
|
||||
"timers": {
|
||||
"cpu_freq": 480000000,
|
||||
"peri1_frequency": 120000000,
|
||||
"peri2_frequency": 120000000,
|
||||
"timer_mult_apb1": 2,
|
||||
"timer_mult_apb2": 2,
|
||||
"ms_timer": "TIM14",
|
||||
"ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn",
|
||||
"ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler",
|
||||
"mixer_scheduler_timer": "TIM12",
|
||||
"mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)",
|
||||
"mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn",
|
||||
"mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler"
|
||||
},
|
||||
"imu": {
|
||||
"imu_i2c_bus": "I2C_Bus_1",
|
||||
"imu_i2c_address": "0x6A",
|
||||
"imu_int_gpio": "GPIO_PIN(GPIOG, 13)",
|
||||
"imu_invert_x": true,
|
||||
"imu_invert_y": true,
|
||||
"exti": [
|
||||
{
|
||||
"irq": "EXTI15_10_IRQ",
|
||||
"priority": 6
|
||||
}
|
||||
]
|
||||
},
|
||||
"rotenc": {
|
||||
"rotary_encoder_gpio_a": "GPIOI",
|
||||
"rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_7",
|
||||
"rotary_encoder_gpio_b": "GPIOJ",
|
||||
"rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_8",
|
||||
"rotary_encoder_position": "(((ROTARY_ENCODER_GPIO_A->IDR >> 7) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 7) & 0x02))",
|
||||
"rotary_encoder_exti_line1": "LL_EXTI_LINE_7",
|
||||
"rotary_encoder_exti_line2": "LL_EXTI_LINE_8",
|
||||
"exti": [
|
||||
{
|
||||
"irq": "EXTI7_IRQ",
|
||||
"priority": 5
|
||||
},
|
||||
{
|
||||
"irq": "EXTI8_IRQ",
|
||||
"priority": 5
|
||||
}
|
||||
],
|
||||
"rotary_encoder_exti_port_a": "LL_SYSCFG_EXTI_PORTI",
|
||||
"rotary_encoder_exti_port_b": "LL_SYSCFG_EXTI_PORTJ",
|
||||
"rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE7",
|
||||
"rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE8",
|
||||
"rotary_encoder_timer": "TIM17",
|
||||
"rotary_encoder_timer_irqn": "TIM17_IRQn",
|
||||
"rotary_encoder_timer_irqhandler": "TIM17_IRQHandler"
|
||||
},
|
||||
"haptic": {
|
||||
"haptic_pwm": true,
|
||||
"haptic_gpio": "GPIO_PIN(GPIOC, 7)",
|
||||
"haptic_gpio_timer": "TIM3",
|
||||
"haptic_gpio_af": "GPIO_AF2",
|
||||
"haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE",
|
||||
"haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE",
|
||||
"haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2"
|
||||
},
|
||||
"key_lock_combo": [
|
||||
"KEY_SYS",
|
||||
"KEY_MODEL"
|
||||
]
|
||||
}
|
||||
@@ -36,5 +36,9 @@ void usbChargerInit()
|
||||
|
||||
bool usbChargerLed()
|
||||
{
|
||||
#if defined UCHARGER_INVERTED
|
||||
return (!gpio_read(UCHARGER_GPIO) && usbPlugged());
|
||||
#else
|
||||
return (gpio_read(UCHARGER_GPIO) && usbPlugged());
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ static inline void check_struct()
|
||||
|
||||
#if defined(PCBXLITES)
|
||||
CHKSIZE(RadioData, 951);
|
||||
#elif defined(RADIO_ST16) || defined(PCBPA01) || defined(RADIO_TX15) || defined(RADIO_T15PRO) || defined(RADIO_TX16SMK3) || defined(RADIO_T22)
|
||||
#elif defined(RADIO_ST16) || defined(PCBPA01) || defined(RADIO_TX15) || defined(RADIO_GX15) || defined(RADIO_T15PRO) || defined(RADIO_TX16SMK3) || defined(RADIO_T22)
|
||||
CHKSIZE(RadioData, 1183);
|
||||
#elif defined(RADIO_V12)
|
||||
CHKSIZE(RadioData, 1180);
|
||||
@@ -112,7 +112,7 @@ static inline void check_struct()
|
||||
#else
|
||||
CHKSIZE(ModelData, 6877);
|
||||
#endif
|
||||
#elif defined(PCBST16) || defined(RADIO_T15PRO) || defined(RADIO_TX15)
|
||||
#elif defined(PCBST16) || defined(RADIO_T15PRO) || defined(RADIO_TX15) || defined(RADIO_GX15)
|
||||
CHKSIZE(ModelData, 7641);
|
||||
#elif defined(RADIO_V12)
|
||||
CHKSIZE(ModelData, 7640);
|
||||
|
||||
@@ -422,7 +422,7 @@ void generalDefault()
|
||||
|
||||
#if defined(MANUFACTURER_RADIOMASTER)
|
||||
g_eeGeneral.audioMuteEnable = 1;
|
||||
#if defined(RADIO_TX15)
|
||||
#if defined(RADIO_TX15) || defined(RADIO_GX15)
|
||||
g_eeGeneral.backlightBright = 50; // Screen looks off if not set high enough
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -46,6 +46,8 @@ elseif(PCB STREQUAL PA01)
|
||||
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_pa01.cpp)
|
||||
elseif(PCB STREQUAL TX15)
|
||||
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_tx15.cpp)
|
||||
elseif(PCB STREQUAL GX15)
|
||||
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_gx15.cpp)
|
||||
elseif(PCB STREQUAL TX16SMK3)
|
||||
set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_tx16smk3.cpp)
|
||||
elseif(PCB STREQUAL X7)
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
#endif
|
||||
#elif defined(PCBTX15)
|
||||
#include "yaml_datastructs_tx15.cpp"
|
||||
#elif defined(PCBGX15)
|
||||
#include "yaml_datastructs_gx15.cpp"
|
||||
#elif defined(PCBT15)
|
||||
#include "yaml_datastructs_t15pro.cpp"
|
||||
#elif defined(PCBTX16SMK3)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,199 @@
|
||||
option(UNEXPECTED_SHUTDOWN "Enable the Unexpected Shutdown screen" ON)
|
||||
option(PXX1 "PXX1 protocol support" ON)
|
||||
option(PXX2 "PXX2 protocol support" OFF)
|
||||
option(AFHDS3 "AFHDS3 TX Module" ON)
|
||||
option(MULTIMODULE "DIY Multiprotocol TX Module (https://github.com/pascallanger/DIY-Multiprotocol-TX-Module)" ON)
|
||||
option(GHOST "Ghost TX Module" ON)
|
||||
option(MODULE_SIZE_STD "Standard size TX Module" ON)
|
||||
option(LUA_MIXER "Enable LUA mixer/model scripts support" ON)
|
||||
option(DISK_CACHE "Enable SD card disk cache" ON)
|
||||
|
||||
set(FIRMWARE_QSPI YES)
|
||||
set(FIRMWARE_FORMAT_UF2 YES)
|
||||
set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)")
|
||||
set(CPU_TYPE STM32H7)
|
||||
set(HSE_VALUE 48000000)
|
||||
set(SDCARD YES)
|
||||
set(STORAGE_MODELSLIST YES)
|
||||
set(HAPTIC YES)
|
||||
set(GUI_DIR colorlcd)
|
||||
set(BITMAPS_DIR 480x272)
|
||||
set(TARGET_DIR gx15)
|
||||
set(RTC_BACKUP_RAM YES)
|
||||
set(PPM_LIMITS_SYMETRICAL YES)
|
||||
set(USB_SERIAL ON CACHE BOOL "Enable USB serial (CDC)")
|
||||
set(HARDWARE_EXTERNAL_MODULE YES)
|
||||
set(INTERNAL_MODULE_AFHDS3 NO)
|
||||
set(ROTARY_ENCODER YES)
|
||||
set(FUNCTION_SWITCHES_WITH_RGB YES)
|
||||
|
||||
#option(STICKS_DEAD_ZONE "Enable sticks dead zone" YES)
|
||||
|
||||
# IMU support
|
||||
set(IMU ON)
|
||||
add_definitions(-DIMU_ICM4207C)
|
||||
add_definitions(-DIMU_SC7U22)
|
||||
|
||||
# for size report script
|
||||
set(CPU_TYPE_FULL STM32H750xB)
|
||||
set(TARGET_LINKER_DIR stm32h750_sdram)
|
||||
set(TARGET_EXTRAM_START 0xD0000000)
|
||||
set(SIZE_TARGET_MEM_DEFINE "MEM_SIZE_SDRAM1=8192")
|
||||
set(FIRMWARE_STRIP_BOOTLOADER YES)
|
||||
|
||||
add_definitions(-DPCBGX15 -DPCBHORUS)
|
||||
add_definitions(-DBATTERY_CHARGE)
|
||||
add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS)
|
||||
add_definitions(-DFIRMWARE_QSPI)
|
||||
add_definitions(-DFIRMWARE_FORMAT_UF2)
|
||||
add_definitions(-DUSE_CUSTOM_EXTI_IRQ)
|
||||
add_definitions(-DUSB_CHARGER)
|
||||
|
||||
set(FLAVOUR gx15)
|
||||
add_definitions(-DRADIO_GX15)
|
||||
add_definitions(-DMANUFACTURER_RADIOMASTER)
|
||||
|
||||
# defines existing internal modules
|
||||
set(INTERNAL_MODULES CRSF CACHE STRING "Internal modules")
|
||||
set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
|
||||
|
||||
set(BITMAPS_TARGET bm480_bitmaps)
|
||||
set(FONTS_TARGET x12_fonts)
|
||||
set(LCD_DRIVER lcd_driver.cpp)
|
||||
set(HARDWARE_TOUCH YES)
|
||||
set(RADIO_DEPENDENCIES ${RADIO_DEPENDENCIES} ${BITMAPS_TARGET})
|
||||
set(FIRMWARE_DEPENDENCIES datacopy)
|
||||
set(SOFTWARE_KEYBOARD ON)
|
||||
set(FUNCTION_SWITCHES ON)
|
||||
set(USB_CHARGER YES)
|
||||
set(AUX_SERIAL YES)
|
||||
set(AUX2_SERIAL YES)
|
||||
|
||||
add_definitions(
|
||||
-DSTM32H750XBTx -DSTM32H750xx
|
||||
-DSDRAM -DCCMRAM
|
||||
-DHARDWARE_TOUCH -DHARDWARE_KEYS -DSOFTWARE_KEYBOARD
|
||||
-DWS2812_MAX_LEDS=26
|
||||
)
|
||||
|
||||
set(SDRAM ON)
|
||||
|
||||
add_definitions(-DRTCLOCK)
|
||||
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
||||
add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE})
|
||||
|
||||
if(STICKS_DEAD_ZONE)
|
||||
add_definitions(-DSTICK_DEAD_ZONE)
|
||||
endif()
|
||||
|
||||
if(NOT UNEXPECTED_SHUTDOWN)
|
||||
add_definitions(-DNO_UNEXPECTED_SHUTDOWN)
|
||||
endif()
|
||||
|
||||
if(DISK_CACHE)
|
||||
set(SRC ${SRC} disk_cache.cpp)
|
||||
add_definitions(-DDISK_CACHE)
|
||||
endif()
|
||||
|
||||
if(FUNCTION_SWITCHES_WITH_RGB)
|
||||
set(FUNCTION_SWITCHES YES)
|
||||
add_definitions(-DFUNCTION_SWITCHES)
|
||||
add_definitions(-DFUNCTION_SWITCHES_RGB_LEDS)
|
||||
endif()
|
||||
|
||||
if(FUNCTION_SWITCHES)
|
||||
add_definitions(-DFUNCTION_SWITCHES)
|
||||
endif()
|
||||
|
||||
set(AFHDS3 ON)
|
||||
|
||||
# VCP CLI
|
||||
set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough")
|
||||
set(CLI ON CACHE BOOL "Enable CLI")
|
||||
|
||||
set(BOARD rm-h750)
|
||||
|
||||
include_directories(boards/${BOARD})
|
||||
|
||||
set(TARGET_SRC_DIR targets/${TARGET_DIR})
|
||||
set(BOARD_SRC_DIR boards/${BOARD})
|
||||
|
||||
set(BOARD_COMMON_SRC
|
||||
${BOARD_SRC_DIR}/board.cpp
|
||||
${BOARD_SRC_DIR}/bsp_io.cpp
|
||||
${BOARD_SRC_DIR}/lcd_driver_480.cpp
|
||||
${BOARD_SRC_DIR}/backlight_driver.cpp
|
||||
${BOARD_SRC_DIR}/haptic_driver.cpp
|
||||
${BOARD_SRC_DIR}/extflash_driver.cpp
|
||||
${BOARD_SRC_DIR}/usb_charger_driver.cpp
|
||||
${TARGET_SRC_DIR}/key_driver.cpp
|
||||
targets/common/arm/stm32/abnormal_reboot.cpp
|
||||
targets/common/arm/stm32/delays_driver.cpp
|
||||
targets/common/arm/stm32/dma2d.cpp
|
||||
targets/common/arm/stm32/flash_driver.cpp
|
||||
targets/common/arm/stm32/pwr_driver.cpp
|
||||
targets/common/arm/stm32/rotary_encoder_driver.cpp
|
||||
targets/common/arm/stm32/rtc_driver.cpp
|
||||
targets/common/arm/stm32/watchdog_driver.cpp
|
||||
drivers/pca95xx.cpp
|
||||
)
|
||||
|
||||
# Bootloader board library
|
||||
add_library(board_bl OBJECT EXCLUDE_FROM_ALL
|
||||
${BOARD_COMMON_SRC}
|
||||
${BOARD_SRC_DIR}/sdram_driver.cpp
|
||||
${RADIO_SRC_DIR}/gui/colorlcd/boot_menu.cpp
|
||||
targets/common/arm/stm32/stm32_qspi.cpp
|
||||
targets/common/arm/stm32/stm32_pulse_driver.cpp
|
||||
)
|
||||
add_dependencies(board_bl minimal_board_lib)
|
||||
set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $<TARGET_OBJECTS:board_bl>)
|
||||
|
||||
set(CMSIS_SRC ${BOARD_SRC_DIR}/system_clock.c)
|
||||
|
||||
# Firmware board library
|
||||
add_library(board OBJECT EXCLUDE_FROM_ALL
|
||||
${BOARD_COMMON_SRC}
|
||||
${BOARD_SRC_DIR}/tp_gt911.cpp
|
||||
${BOARD_SRC_DIR}/audio_driver.cpp
|
||||
drivers/icm42607C.cpp
|
||||
drivers/sc7u22.cpp
|
||||
drivers/tas2505.cpp
|
||||
targets/common/arm/stm32/heartbeat_driver.cpp
|
||||
targets/common/arm/stm32/mixer_scheduler_driver.cpp
|
||||
targets/common/arm/stm32/module_timer_driver.cpp
|
||||
targets/common/arm/stm32/stm32_pulse_driver.cpp
|
||||
targets/common/arm/stm32/stm32_softserial_driver.cpp
|
||||
targets/common/arm/stm32/stm32_qspi.cpp
|
||||
targets/common/arm/stm32/stm32_i2s.cpp
|
||||
targets/common/arm/stm32/stm32_switch_driver.cpp
|
||||
targets/common/arm/stm32/stm32_rgbleds.cpp
|
||||
targets/common/arm/stm32/trainer_driver.cpp
|
||||
)
|
||||
add_dependencies(board board_lib)
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} $<TARGET_OBJECTS:board>)
|
||||
|
||||
include_directories(${RADIO_SRC_DIR}/fonts/colorlcd gui/${GUI_DIR} gui/${GUI_DIR}/layouts)
|
||||
|
||||
if(BOOTLOADER)
|
||||
set(FIRMWARE_TARGET_SRC
|
||||
${FIRMWARE_TARGET_SRC}
|
||||
../../bootloader/loadboot.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
set(SRC
|
||||
${SRC}
|
||||
io/frsky_firmware_update.cpp
|
||||
io/multi_firmware_update.cpp
|
||||
)
|
||||
|
||||
if (MULTIMODULE)
|
||||
add_definitions(-DMULTI_PROTOLIST)
|
||||
set(SRC ${SRC}
|
||||
io/multi_protolist.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
# Make malloc() thread-safe
|
||||
add_definitions(-DTHREADSAFE_MALLOC)
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTx
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "drivers/pca95xx.h"
|
||||
#include "hal/switch_driver.h"
|
||||
|
||||
#define IO_EXPANDER_I2C_BUS I2C_Bus_2
|
||||
#define IO_EXPANDER1_I2C_ADDR 0x74
|
||||
#define IO_EXPANDER2_I2C_ADDR 0x75
|
||||
|
||||
// Port expander 2
|
||||
#define BSP_TR6U PCA95XX_PIN_7
|
||||
#define BSP_TR6D PCA95XX_PIN_6
|
||||
#define BSP_TR4R PCA95XX_PIN_8
|
||||
#define BSP_TR4L PCA95XX_PIN_9
|
||||
#define BSP_TR2D PCA95XX_PIN_10
|
||||
#define BSP_TR2U PCA95XX_PIN_11
|
||||
#define BSP_TR1D PCA95XX_PIN_12
|
||||
#define BSP_TR1U PCA95XX_PIN_13
|
||||
#define BSP_TR3R PCA95XX_PIN_14
|
||||
#define BSP_TR3L PCA95XX_PIN_15
|
||||
|
||||
extern uint8_t isSwitch3Pos(uint8_t idx);
|
||||
|
||||
int bsp_io_init();
|
||||
uint32_t bsp_io_read_switches();
|
||||
uint32_t bsp_io_read_fs_switches();
|
||||
uint32_t bsp_get_fs_switches();
|
||||
|
||||
uint16_t bsp_input_get();
|
||||
struct stm32_switch_t;
|
||||
|
||||
constexpr uint32_t IO_EXPANDER1_MASK = 0xFFFF;
|
||||
constexpr uint32_t IO_EXPANDER2_MASK = 0xFFFF;
|
||||
@@ -0,0 +1,511 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
STM32H750
|
||||
|
||||
SDMMC uses own DMA controler
|
||||
|
||||
DMA1
|
||||
Stream0: LED_STRIP_TIMER_DMA_STREAM
|
||||
Stream1: INTMODULE_DMA_STREAM
|
||||
Stream2: FLYSKY_HALL_DMA_Stream_RX
|
||||
Stream3: TELEMETRY_DMA_Stream_RX
|
||||
Stream4: I2S_DMA_Stream
|
||||
Stream5: INTMODULE_RX_DMA_STREAM
|
||||
Stream6: AUX2_SERIAL_DMA_RX_STREAM
|
||||
Stream7: TELEMETRY_DMA_Stream_TX
|
||||
|
||||
DMA2
|
||||
Stream0: ADC_EXT_DMA_STREAM (do not move)
|
||||
Stream1: AUX_SERIAL_DMA_TX_STREAM
|
||||
Stream2: AUX_SERIAL_DMA_RX_STREAM
|
||||
Stream3: EXTMODULE_TIMER_DMA_STREAM
|
||||
Stream4: ADC_DMA_STREAM (do not move)
|
||||
Stream5: EXTMODULE_USART_RX_DMA_STREAM
|
||||
Stream6: EXTMODULE_USART_TX_DMA_STREAM
|
||||
Stream7: AUX2_SERIAL_DMA_TX_STREAM
|
||||
|
||||
TIM1: BACKLIGHT_TIMER
|
||||
TIM2: LED_STRIP_TIMER
|
||||
TIM3: HAPTIC_GPIO_TIMER
|
||||
TIM4:
|
||||
TIM5: EXTMODULE_TIMER
|
||||
TIM7:
|
||||
TIM8: TRAINER_TIMER
|
||||
TIM12: MIXER_SCHEDULER_TIMER
|
||||
TIM14: MS_TIMER
|
||||
TIM15: PDM
|
||||
TIM16:
|
||||
TIM17: ROTARY_ENCODER_TIMER
|
||||
*/
|
||||
|
||||
#ifndef _HAL_H_
|
||||
#define _HAL_H_
|
||||
|
||||
#include "hal_settings.h"
|
||||
|
||||
// Keys
|
||||
#define KEYS_GPIO_REG_PAGEDN GPIOA
|
||||
#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PA.08
|
||||
#define KEYS_GPIO_REG_PAGEUP GPIOG
|
||||
#define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PG.07
|
||||
#define KEYS_GPIO_REG_SYS GPIOB
|
||||
#define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_2 // PB.02
|
||||
#define KEYS_GPIO_REG_ENTER GPIOG
|
||||
#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PG.12
|
||||
#define KEYS_GPIO_REG_MDL GPIOE
|
||||
#define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_3 // PE.03
|
||||
#define KEYS_GPIO_REG_EXIT GPIOG
|
||||
#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PG.03
|
||||
#define KEYS_GPIO_REG_TELE GPIOG
|
||||
#define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PG.02
|
||||
|
||||
// Trims
|
||||
#define TRIMS_GPIO_REG_LHL
|
||||
#define TRIMS_GPIO_PIN_LHL
|
||||
|
||||
#define TRIMS_GPIO_REG_LHR
|
||||
#define TRIMS_GPIO_PIN_LHR
|
||||
|
||||
#define TRIMS_GPIO_REG_LVD
|
||||
#define TRIMS_GPIO_PIN_LVD
|
||||
|
||||
#define TRIMS_GPIO_REG_LVU
|
||||
#define TRIMS_GPIO_PIN_LVU
|
||||
|
||||
#define TRIMS_GPIO_REG_RHL
|
||||
#define TRIMS_GPIO_PIN_RHL
|
||||
|
||||
#define TRIMS_GPIO_REG_RHR
|
||||
#define TRIMS_GPIO_PIN_RHR
|
||||
|
||||
#define TRIMS_GPIO_REG_RVD
|
||||
#define TRIMS_GPIO_PIN_RVD
|
||||
|
||||
#define TRIMS_GPIO_REG_RVU
|
||||
#define TRIMS_GPIO_PIN_RVU
|
||||
|
||||
#define TRIMS_GPIO_REG_RSD
|
||||
#define TRIMS_GPIO_PIN_RSD
|
||||
|
||||
#define TRIMS_GPIO_REG_RSU
|
||||
#define TRIMS_GPIO_PIN_RSU
|
||||
|
||||
#define TRIMS_GPIO_REG_LSD GPIOH
|
||||
#define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_15
|
||||
|
||||
#define TRIMS_GPIO_REG_LSU GPIOH
|
||||
#define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13
|
||||
|
||||
// function switches
|
||||
//SW1
|
||||
#define SWITCHES_GPIO_REG_K
|
||||
#define SWITCHES_GPIO_PIN_K PCA95XX_P0
|
||||
#define SWITCHES_K_CFS_IDX 0
|
||||
#define FUNCTION_SWITCH_1 SK
|
||||
//SW2
|
||||
#define SWITCHES_GPIO_REG_L
|
||||
#define SWITCHES_GPIO_PIN_L PCA95XX_P1
|
||||
#define SWITCHES_L_CFS_IDX 1
|
||||
#define FUNCTION_SWITCH_2 SL
|
||||
//SW3
|
||||
#define SWITCHES_GPIO_REG_M
|
||||
#define SWITCHES_GPIO_PIN_M PCA95XX_P2
|
||||
#define SWITCHES_M_CFS_IDX 2
|
||||
#define FUNCTION_SWITCH_3 SM
|
||||
//SW4
|
||||
#define SWITCHES_GPIO_REG_N
|
||||
#define SWITCHES_GPIO_PIN_N PCA95XX_P3
|
||||
#define SWITCHES_N_CFS_IDX 3
|
||||
#define FUNCTION_SWITCH_4 SN
|
||||
//SW5
|
||||
#define SWITCHES_GPIO_REG_O
|
||||
#define SWITCHES_GPIO_PIN_O PCA95XX_P4
|
||||
#define SWITCHES_O_CFS_IDX 4
|
||||
#define FUNCTION_SWITCH_5 SO
|
||||
//SW6
|
||||
#define SWITCHES_GPIO_REG_P
|
||||
#define SWITCHES_GPIO_PIN_P PCA95XX_P5
|
||||
#define SWITCHES_P_CFS_IDX 5
|
||||
#define FUNCTION_SWITCH_6 SP
|
||||
|
||||
// Extender Switches
|
||||
#define SWITCHES_A_3POS
|
||||
#define SWITCHES_GPIO_REG_A_H
|
||||
#define SWITCHES_GPIO_PIN_A_H PCA95XX_P15
|
||||
#define SWITCHES_GPIO_REG_A_L
|
||||
#define SWITCHES_GPIO_PIN_A_L PCA95XX_P14
|
||||
#define SWITCHES_B_3POS
|
||||
#define SWITCHES_GPIO_REG_B_H
|
||||
#define SWITCHES_GPIO_PIN_B_H PCA95XX_P13
|
||||
#define SWITCHES_GPIO_REG_B_L
|
||||
#define SWITCHES_GPIO_PIN_B_L PCA95XX_P12
|
||||
#define SWITCHES_C_3POS
|
||||
#define SWITCHES_GPIO_REG_C_H
|
||||
#define SWITCHES_GPIO_PIN_C_H PCA95XX_P11
|
||||
#define SWITCHES_GPIO_REG_C_L
|
||||
#define SWITCHES_GPIO_PIN_C_L PCA95XX_P10
|
||||
#define SWITCHES_D_3POS
|
||||
#define SWITCHES_GPIO_REG_D_H
|
||||
#define SWITCHES_GPIO_PIN_D_H PCA95XX_P7
|
||||
#define SWITCHES_GPIO_REG_D_L
|
||||
#define SWITCHES_GPIO_PIN_D_L PCA95XX_P6
|
||||
#define SWITCHES_E_3POS
|
||||
#define SWITCHES_GPIO_REG_E_H
|
||||
#define SWITCHES_GPIO_PIN_E_H PCA95XX_P16
|
||||
#define SWITCHES_GPIO_REG_E_L
|
||||
#define SWITCHES_GPIO_PIN_E_L PCA95XX_P17
|
||||
#define SWITCHES_F_2POS
|
||||
#define SWITCHES_GPIO_REG_F
|
||||
#define SWITCHES_GPIO_PIN_F PCA95XX_P1
|
||||
#define SWITCHES_G_3POS
|
||||
#define SWITCHES_GPIO_REG_G_H
|
||||
#define SWITCHES_GPIO_PIN_G_H PCA95XX_P4
|
||||
#define SWITCHES_GPIO_REG_G_L
|
||||
#define SWITCHES_GPIO_PIN_G_L PCA95XX_P5
|
||||
#define SWITCHES_H_2POS
|
||||
#define SWITCHES_GPIO_REG_H
|
||||
#define SWITCHES_GPIO_PIN_H PCA95XX_P0
|
||||
#define SWITCHES_I_2POS
|
||||
#define SWITCHES_GPIO_REG_I
|
||||
#define SWITCHES_GPIO_PIN_I PCA95XX_P2
|
||||
#define SWITCHES_J_2POS
|
||||
#define SWITCHES_GPIO_REG_J
|
||||
#define SWITCHES_GPIO_PIN_J PCA95XX_P3
|
||||
|
||||
//MEMS
|
||||
#define PDM_DATA GPIO_PIN(GPIOD,4)
|
||||
#define PDM_CLK GPIO_PIN(GPIOD, 13)
|
||||
|
||||
// Expanders
|
||||
#define IO_INT_GPIO GPIO_PIN(GPIOB, 3)
|
||||
#define IO_RESET_GPIO GPIO_PIN(GPIOG, 10)
|
||||
#if !defined(USE_EXTI3_IRQ)
|
||||
#define USE_EXTI3_IRQ
|
||||
#define EXTI3_IRQ_Priority 9
|
||||
#endif
|
||||
|
||||
// ADC
|
||||
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_6 // PA.06
|
||||
#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PC.03
|
||||
#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_4 // PC.04
|
||||
#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_5 // PC.05
|
||||
|
||||
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 POT1
|
||||
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 POT2
|
||||
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_3 // PH.03
|
||||
#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_2 // PH.02 VRC/LS
|
||||
#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PA.05 VRD/RS
|
||||
|
||||
#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_5 // PA.05,ADC1_CH19
|
||||
#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_5 // PH.05,ADC3_CH16
|
||||
|
||||
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_SLIDER2|ADC_GPIO_PIN_EXT1)
|
||||
#define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2)
|
||||
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_POT1)
|
||||
#define ADC_GPIOH_PINS (ADC_GPIO_PIN_BATT | ADC_GPIO_PIN_SLIDER1|ADC_GPIO_PIN_EXT2)
|
||||
|
||||
|
||||
#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC12_INP3
|
||||
#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_13 // ADC12_INP13
|
||||
#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_4 // ADC12_INP4
|
||||
#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_8 // ADC12_INP8
|
||||
|
||||
// Each ADC cannot map more than 8 channels, otherwise it will cause problems
|
||||
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC12_INP11
|
||||
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_5 // ADC12_INP5
|
||||
#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_INP14
|
||||
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC3_INP17
|
||||
#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_13 // ADC3_INP13
|
||||
#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_19 // ADC12_INP19
|
||||
|
||||
#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_19 // ADC1_IN19
|
||||
#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_16 // ADC3_IN16
|
||||
|
||||
#define ADC_MAIN ADC1
|
||||
#define ADC_DMA DMA2
|
||||
#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1
|
||||
#define ADC_DMA_STREAM LL_DMA_STREAM_4
|
||||
#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn
|
||||
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
|
||||
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5
|
||||
|
||||
#define ADC_EXT ADC3
|
||||
#define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_BATT , ADC_CHANNEL_RTC_BAT,ADC_CHANNEL_EXT2 }
|
||||
#define ADC_EXT_DMA DMA2
|
||||
#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3
|
||||
#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0
|
||||
#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn
|
||||
#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
|
||||
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5
|
||||
#define ADC_VREF_PREC2 330
|
||||
|
||||
#define ADC_DIRECTION { \
|
||||
0,-1,0,-1, /* gimbals */ \
|
||||
-1,-1, /* pots */ \
|
||||
0,-1, /* sliders */ \
|
||||
0,0, /* ext */ \
|
||||
0, /* vbat */ \
|
||||
0, /* rtc_bat */ \
|
||||
0 /* lux sensor */ \
|
||||
}
|
||||
|
||||
#define USE_EXTI9_5_IRQ // used for I2C port extender interrupt
|
||||
#define EXTI9_5_IRQ_Priority 5
|
||||
|
||||
// Power
|
||||
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOA, 4)
|
||||
#define PWR_ON_GPIO GPIO_PIN(GPIOH, 12)
|
||||
|
||||
// Chargers (USB and wireless)
|
||||
#define UCHARGER_GPIO GPIO_PIN(GPIOD, 11)
|
||||
#define UCHARGER_EN_GPIO GPIO_PIN(GPIOB, 12)
|
||||
#define UCHARGER_INVERTED (true)
|
||||
|
||||
// S.Port update connector
|
||||
#define HAS_SPORT_UPDATE_CONNECTOR() (false)
|
||||
|
||||
// Telemetry
|
||||
#define TELEMETRY_SET_INPUT 0
|
||||
#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOA, 9)
|
||||
#define TELEMETRY_RX_GPIO GPIO_UNDEF
|
||||
#define TELEMETRY_USART USART1
|
||||
#define TELEMETRY_USART_IRQn USART1_IRQn
|
||||
#define TELEMETRY_DMA DMA1
|
||||
#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_7
|
||||
#define TELEMETRY_DMA_Channel_TX LL_DMAMUX1_REQ_USART1_TX
|
||||
#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream7_IRQn
|
||||
#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler
|
||||
#define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_3
|
||||
#define TELEMETRY_DMA_Channel_RX LL_DMAMUX1_REQ_USART1_RX
|
||||
#define TELEMETRY_USART_IRQHandler USART1_IRQHandler
|
||||
|
||||
// Software IRQ (Prio 5 -> FreeRTOS compatible)
|
||||
#define TELEMETRY_USE_CUSTOM_EXTI
|
||||
#define CUSTOM_EXTI_IRQ_NAME ETH_WKUP_IRQ
|
||||
#define ETH_WKUP_IRQ_Priority 5
|
||||
#define CUSTOM_EXTI_IRQ_LINE 86
|
||||
#define TELEMETRY_RX_FRAME_EXTI_LINE CUSTOM_EXTI_IRQ_LINE
|
||||
|
||||
// USB
|
||||
#define USB_GPIO GPIOA
|
||||
#define USB_GPIO_VBUS GPIO_PIN(GPIOH, 11)
|
||||
#define USB_GPIO_DM GPIO_PIN(GPIOA, 11)
|
||||
#define USB_GPIO_DP GPIO_PIN(GPIOA, 12)
|
||||
#define USB_GPIO_AF GPIO_AF10
|
||||
|
||||
// LCD
|
||||
#define LCD_SPI_CS_GPIO GPIOD
|
||||
#define LCD_SPI_CS_GPIO_PIN LL_GPIO_PIN_5
|
||||
#define LCD_SPI_SCK_GPIO GPIOB
|
||||
#define LCD_SPI_SCK_GPIO_PIN LL_GPIO_PIN_0
|
||||
#define LCD_SPI_MOSI_GPIO GPIOI
|
||||
#define LCD_SPI_MOSI_GPIO_PIN LL_GPIO_PIN_9
|
||||
|
||||
#define LCD_RESET_GPIO GPIOJ
|
||||
#define LCD_RESET_GPIO_PIN LL_GPIO_PIN_12
|
||||
|
||||
#define LCD_TE_GPIO GPIOI
|
||||
#define LCD_TE_GPIO_PIN LL_GPIO_PIN_4
|
||||
|
||||
// QSPI Flash
|
||||
#define QSPI_CLK_GPIO GPIO_PIN(GPIOF, 10)
|
||||
#define QSPI_CLK_GPIO_AF GPIO_AF9
|
||||
#define QSPI_CS_GPIO GPIO_PIN(GPIOG, 6)
|
||||
#define QSPI_CS_GPIO_AF GPIO_AF10
|
||||
#define QSPI_MISO_GPIO GPIO_PIN(GPIOF, 9)
|
||||
#define QSPI_MISO_GPIO_AF GPIO_AF10
|
||||
#define QSPI_MOSI_GPIO GPIO_PIN(GPIOF, 8)
|
||||
#define QSPI_MOSI_GPIO_AF GPIO_AF10
|
||||
#define QSPI_WP_GPIO GPIO_PIN(GPIOF, 7)
|
||||
#define QSPI_WP_GPIO_AF GPIO_AF9
|
||||
#define QSPI_HOLD_GPIO GPIO_PIN(GPIOF, 6)
|
||||
#define QSPI_HOLD_GPIO_AF GPIO_AF9
|
||||
#define QSPI_FLASH_SIZE 0x1000000
|
||||
|
||||
|
||||
// SD
|
||||
#define SD_SDIO SDMMC1
|
||||
#define SD_SDIO_CLK_DIV(fq) (HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SDMMC) / (2 * fq))
|
||||
#define SD_SDIO_TRANSFER_CLK_DIV SD_SDIO_CLK_DIV(24000000) // Hz
|
||||
|
||||
#define SD2_PRESENT_GPIO GPIO_PIN(GPIOH, 8) // PH.08
|
||||
#define SD2_SDIO SDMMC2
|
||||
#define SD2_SDIO_PIN_D0 GPIO_PIN(GPIOB, 14)
|
||||
#define SD2_SDIO_AF_D0 GPIO_AF9
|
||||
#define SD2_SDIO_PIN_D1 GPIO_PIN(GPIOB, 15)
|
||||
#define SD2_SDIO_AF_D1 GPIO_AF9
|
||||
#define SD2_SDIO_PIN_D2 GPIO_PIN(GPIOG, 11)
|
||||
#define SD2_SDIO_AF_D2 GPIO_AF10
|
||||
#define SD2_SDIO_PIN_D3 GPIO_PIN(GPIOB, 4)
|
||||
#define SD2_SDIO_AF_D3 GPIO_AF9
|
||||
#define SD2_SDIO_PIN_CLK GPIO_PIN(GPIOD, 6)
|
||||
#define SD2_SDIO_AF_CLK GPIO_AF11
|
||||
#define SD2_SDIO_PIN_CMD GPIO_PIN(GPIOD, 7)
|
||||
#define SD2_SDIO_AF_CMD GPIO_AF11
|
||||
#define SD2_SDIO_TRANSFER_CLK_DIV SD_SDIO_CLK_DIV(24000000) // Hz
|
||||
|
||||
#define STORAGE_USE_SDIO
|
||||
|
||||
// AUDIO
|
||||
#define AUDIO_I2C I2C_Bus_1
|
||||
#define AUDIO_SPI SPI2
|
||||
#define AUDIO_RESET_PIN GPIO_PIN(GPIOH, 10)
|
||||
#define AUDIO_HP_DETECT_PIN GPIO_PIN(GPIOH, 14)
|
||||
#undef VOLUME_LEVEL_MAX
|
||||
#define VOLUME_LEVEL_MAX 20
|
||||
#define I2S_DMA DMA1
|
||||
#define I2S_DMA_Stream LL_DMA_STREAM_4
|
||||
#define I2S_DMA_Stream_Request LL_DMAMUX1_REQ_SPI2_TX
|
||||
#define I2S_DMA_Stream_IRQn DMA1_Stream4_IRQn
|
||||
#define I2S_DMA_Stream_IRQHandler DMA1_Stream4_IRQHandler
|
||||
|
||||
// I2C Bus
|
||||
#define I2C_B1 I2C4
|
||||
#define I2C_B1_SDA_GPIO GPIO_PIN(GPIOD, 13) // PD.13
|
||||
#define I2C_B1_SCL_GPIO GPIO_PIN(GPIOD, 12) // PD.12
|
||||
#define I2C_B1_GPIO_AF LL_GPIO_AF_4
|
||||
#define I2C_B1_CLK_RATE 400000
|
||||
|
||||
#define I2C_B2 I2C1
|
||||
#define I2C_B2_SDA_GPIO GPIO_PIN(GPIOB, 9) // PB.09
|
||||
#define I2C_B2_SCL_GPIO GPIO_PIN(GPIOB, 8) // PB.08
|
||||
#define I2C_B2_GPIO_AF LL_GPIO_AF_4
|
||||
#define I2C_B2_CLK_RATE 400000
|
||||
|
||||
#define GPIO_LED_GPIO_ON gpio_set
|
||||
#define GPIO_LED_GPIO_OFF gpio_clear
|
||||
|
||||
// Internal Module
|
||||
#define INTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 13) // PB.13
|
||||
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOH, 9) // PH.09
|
||||
#define INTMODULE_BOOTCMD_DEFAULT 0
|
||||
#define INTMODULE_TX_GPIO GPIO_PIN(GPIOG, 14)
|
||||
#define INTMODULE_RX_GPIO GPIO_PIN(GPIOG, 9)
|
||||
#define INTMODULE_USART USART6
|
||||
#define INTMODULE_GPIO_AF LL_GPIO_AF_7
|
||||
#define INTMODULE_USART_IRQn USART6_IRQn
|
||||
#define INTMODULE_USART_IRQHandler USART6_IRQHandler
|
||||
#define INTMODULE_DMA DMA1
|
||||
#define INTMODULE_DMA_STREAM LL_DMA_STREAM_1
|
||||
#define INTMODULE_DMA_STREAM_IRQ DMA1_Stream1_IRQn
|
||||
#define INTMODULE_DMA_FLAG_TC DMA_FLAG_TCIF1
|
||||
#define INTMODULE_DMA_CHANNEL LL_DMAMUX1_REQ_USART6_TX
|
||||
#define INTMODULE_RX_DMA DMA1
|
||||
#define INTMODULE_RX_DMA_STREAM LL_DMA_STREAM_5
|
||||
#define INTMODULE_RX_DMA_CHANNEL LL_DMAMUX1_REQ_USART6_RX
|
||||
#define INTMODULE_RX_DMA_Stream_IRQn DMA1_Stream5_IRQn
|
||||
#define INTMODULE_RX_DMA_Stream_IRQHandler DMA1_Stream5_IRQHandler
|
||||
|
||||
// External Module
|
||||
#define EXTMODULE
|
||||
#define EXTMODULE_PULSES
|
||||
#define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOD, 4) // PD.04
|
||||
#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOA, 2) // TIM2_CH3, TIM5_CH3,TIM15_CH1,
|
||||
#define EXTMODULE_RX_GPIO GPIO_PIN(GPIOA, 3)
|
||||
#define EXTMODULE_TX_GPIO_AF LL_GPIO_AF_3 // TIM5_CH3
|
||||
#define EXTMODULE_TIMER TIM5
|
||||
#define EXTMODULE_TIMER_32BITS
|
||||
#define EXTMODULE_TIMER_Channel LL_TIM_CHANNEL_CH3
|
||||
#define EXTMODULE_TIMER_IRQn TIM5_IRQn
|
||||
#define EXTMODULE_TIMER_IRQHandler TIM5_IRQHandler
|
||||
#define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
|
||||
#define EXTMODULE_TIMER_TX_GPIO_AF LL_GPIO_AF_2
|
||||
|
||||
|
||||
//USART
|
||||
#define EXTMODULE_USART USART2
|
||||
#define EXTMODULE_USART_TX_DMA DMA2
|
||||
#define EXTMODULE_USART_TX_DMA_CHANNEL LL_DMAMUX1_REQ_USART2_TX
|
||||
#define EXTMODULE_USART_TX_DMA_STREAM LL_DMA_STREAM_6
|
||||
#define EXTMODULE_USART_RX_DMA_CHANNEL LL_DMAMUX1_REQ_USART2_RX
|
||||
#define EXTMODULE_USART_RX_DMA_STREAM LL_DMA_STREAM_5
|
||||
#define EXTMODULE_USART_IRQHandler USART2_IRQHandler
|
||||
#define EXTMODULE_USART_IRQn USART2_IRQn
|
||||
|
||||
//TIMER
|
||||
#define EXTMODULE_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM5_UP
|
||||
#define EXTMODULE_TIMER_DMA DMA2
|
||||
#define EXTMODULE_TIMER_DMA_STREAM LL_DMA_STREAM_6
|
||||
#define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream6_IRQn
|
||||
#define EXTMODULE_TIMER_DMA_IRQHandler DMA2_Stream6_IRQHandler
|
||||
|
||||
// Trainer Port
|
||||
#define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA)
|
||||
|
||||
#define TRAINER_IN_GPIO GPIO_PIN(GPIOI, 6)
|
||||
#define TRAINER_IN_TIMER_Channel LL_TIM_CHANNEL_CH2
|
||||
|
||||
#define TRAINER_OUT_GPIO GPIO_PIN(GPIOI, 5)
|
||||
#define TRAINER_OUT_TIMER_Channel LL_TIM_CHANNEL_CH1
|
||||
|
||||
#define TRAINER_TIMER TIM8
|
||||
#define TRAINER_TIMER_IRQn TIM8_CC_IRQn
|
||||
#define TRAINER_TIMER_IRQHandler TIM8_CC_IRQHandler
|
||||
#define TRAINER_GPIO_AF LL_GPIO_AF_3
|
||||
#define TRAINER_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
|
||||
|
||||
#define TRAINER_DETECT_GPIO GPIO_PIN(GPIOH, 4)
|
||||
|
||||
// AUX ports
|
||||
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 6) // PB.06
|
||||
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 5) // PB.05
|
||||
#define AUX_SERIAL_USART UART5
|
||||
#define AUX_SERIAL_USART_IRQHandler UART5_IRQHandler
|
||||
#define AUX_SERIAL_USART_IRQn UART5_IRQn
|
||||
#define AUX_SERIAL_DMA_TX DMA2
|
||||
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_1
|
||||
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMAMUX1_REQ_UART5_TX
|
||||
#define AUX_SERIAL_DMA_RX DMA2
|
||||
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_2
|
||||
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMAMUX1_REQ_UART5_RX
|
||||
#define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOB, 7) // PB.07
|
||||
|
||||
#define AUX2_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10
|
||||
#define AUX2_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
|
||||
#define AUX2_SERIAL_USART USART3
|
||||
#define AUX2_SERIAL_USART_IRQHandler USART3_IRQHandler
|
||||
#define AUX2_SERIAL_USART_IRQn USART3_IRQn
|
||||
#define AUX2_SERIAL_DMA_TX DMA2
|
||||
#define AUX2_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_7
|
||||
#define AUX2_SERIAL_DMA_TX_CHANNEL LL_DMAMUX1_REQ_USART3_TX
|
||||
#define AUX2_SERIAL_DMA_RX DMA1
|
||||
#define AUX2_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_6
|
||||
#define AUX2_SERIAL_DMA_RX_CHANNEL LL_DMAMUX1_REQ_USART3_RX
|
||||
#define AUX2_SERIAL_PWR_GPIO GPIO_PIN(GPIOC, 13) // PC.13
|
||||
|
||||
// Touch
|
||||
#define TOUCH_I2C_BUS I2C_Bus_2
|
||||
#define TOUCH_INT_GPIO GPIO_PIN(GPIOE, 2) // PE.02
|
||||
#define TOUCH_RST_GPIO GPIO_PIN(GPIOJ, 13) // PJ.13
|
||||
|
||||
// TOUCH_INT_EXTI IRQ
|
||||
#if !defined(USE_EXTI2_IRQ)
|
||||
#define USE_EXTI2_IRQ
|
||||
#define EXTI2_IRQ_Priority 9
|
||||
#endif
|
||||
|
||||
#define LSE_DRIVE_STRENGTH RCC_LSEDRIVE_HIGH
|
||||
|
||||
#endif // _HAL_H_
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* 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 "hal/key_driver.h"
|
||||
|
||||
#include "bsp_io.h"
|
||||
#include "stm32_hal_ll.h"
|
||||
#include "stm32_gpio_driver.h"
|
||||
#include "stm32_i2c_driver.h"
|
||||
|
||||
#include "hal.h"
|
||||
#include "delays_driver.h"
|
||||
#include "keys.h"
|
||||
|
||||
#include "stm32_keys.inc"
|
||||
#include "debug.h"
|
||||
|
||||
void keysInit() {
|
||||
_init_keys();
|
||||
_init_trims();
|
||||
}
|
||||
|
||||
|
||||
uint32_t readKeys() { return _read_keys(); }
|
||||
|
||||
/* The output bit-order has to be:
|
||||
0 LHL TR3L (Left equals down)
|
||||
1 LHR TR3R
|
||||
2 LVD TR1D
|
||||
3 LVU TR1U
|
||||
4 RVD TR2D
|
||||
5 RVU TR2U
|
||||
6 RHL TR4L
|
||||
7 RHR TR4R
|
||||
*/
|
||||
|
||||
enum PhysicalTrims {
|
||||
TR3L = 0,
|
||||
TR3R,
|
||||
TR1D = 2,
|
||||
TR1U,
|
||||
TR2D = 4,
|
||||
TR2U,
|
||||
TR4L = 6,
|
||||
TR4R,
|
||||
TR5U = 8,
|
||||
TR5D,
|
||||
TR6U = 10,
|
||||
TR6D
|
||||
};
|
||||
|
||||
uint32_t readTrims()
|
||||
{
|
||||
uint32_t result = 0;
|
||||
uint32_t keys = bsp_get_fs_switches();
|
||||
|
||||
#define _TRIM(t) \
|
||||
if ((keys & BSP_##t) == 0) result |= 1 << t;
|
||||
|
||||
_TRIM(TR1U);
|
||||
_TRIM(TR1D);
|
||||
_TRIM(TR3L);
|
||||
_TRIM(TR3R);
|
||||
_TRIM(TR2U);
|
||||
_TRIM(TR2D);
|
||||
_TRIM(TR4L);
|
||||
_TRIM(TR4R);
|
||||
if (!LL_GPIO_IsInputPinSet(GPIOH, LL_GPIO_PIN_15)) result |= (1 << TR5U);
|
||||
if (!LL_GPIO_IsInputPinSet(GPIOH, LL_GPIO_PIN_13)) result |= (1 << TR5D);
|
||||
_TRIM(TR6U);
|
||||
_TRIM(TR6D);
|
||||
|
||||
#undef _TRIM
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _USB_DESCRIPTOR_H_
|
||||
#define _USB_DESCRIPTOR_H_
|
||||
|
||||
#define USB_NAME "Radiomaster GX15"
|
||||
#define USB_MANUFACTURER 'R', 'M', ' ', ' ', ' ', ' ', ' ', ' ' /* 8 bytes */
|
||||
#define USB_PRODUCT 'G', 'X', '1', '5', ' ', ' ', ' ', ' ' /* 8 Bytes */
|
||||
|
||||
#endif // _USB_DESCRIPTOR_H_
|
||||
@@ -195,6 +195,73 @@ LEGACY_NAMES = [
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"targets": {"gx15"},
|
||||
"inputs": {
|
||||
"LH": {
|
||||
"yaml": "Rud",
|
||||
"lua": "rud",
|
||||
"description": "Rudder"
|
||||
},
|
||||
"LV": {
|
||||
"yaml": "Ele",
|
||||
"lua": "ele",
|
||||
"description": "Elevator"
|
||||
},
|
||||
"RV": {
|
||||
"yaml": "Thr",
|
||||
"lua": "thr",
|
||||
"description": "Throttle"
|
||||
},
|
||||
"RH": {
|
||||
"yaml": "Ail",
|
||||
"lua": "ail",
|
||||
"description": "Aileron"
|
||||
},
|
||||
"P1": {
|
||||
"yaml": "S1",
|
||||
"lua": "s1",
|
||||
"label": "S1",
|
||||
"short_label": "1",
|
||||
"description": "Potentiometer S1"
|
||||
},
|
||||
"P2": {
|
||||
"yaml": "S2",
|
||||
"lua": "s2",
|
||||
"label": "S2",
|
||||
"short_label": "2",
|
||||
"description": "Potentiometer S2"
|
||||
},
|
||||
"SL1": {
|
||||
"yaml": "LS",
|
||||
"lua": "ls",
|
||||
"label": "LS",
|
||||
"short_label": "L",
|
||||
"description": "Left slider"
|
||||
},
|
||||
"SL2": {
|
||||
"yaml": "RS",
|
||||
"lua": "rs",
|
||||
"label": "RS",
|
||||
"short_label": "R",
|
||||
"description": "Right slider"
|
||||
},
|
||||
"EXT1": {
|
||||
"yaml": "EXT1",
|
||||
"lua": "ext1",
|
||||
"label": "EXT1",
|
||||
"short_label": "E1",
|
||||
"description": "Ext 1"
|
||||
},
|
||||
"EXT2": {
|
||||
"yaml": "EXT2",
|
||||
"lua": "ext2",
|
||||
"label": "EXT2",
|
||||
"short_label": "E2",
|
||||
"description": "Ext 2"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"targets": {"x12s"},
|
||||
"inputs": {
|
||||
|
||||
@@ -122,6 +122,9 @@ get_target_build_options() {
|
||||
tx15)
|
||||
BUILD_OPTIONS+="-DPCB=TX15"
|
||||
;;
|
||||
gx15)
|
||||
BUILD_OPTIONS+="-DPCB=GX15"
|
||||
;;
|
||||
tx16s)
|
||||
BUILD_OPTIONS+="-DPCB=X10 -DPCBREV=TX16S"
|
||||
;;
|
||||
|
||||
@@ -9,7 +9,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
: "${SRCDIR:=$(dirname "$(pwd)/$0")/..}"
|
||||
|
||||
: ${FLAVOR:="nv14;el18;pl18;pl18ev;pl18u;nb4p;st16;c14;pa01;t12;t12max;t15;t15pro;t22;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;tx16smk3;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v16;v14;v14lcd;v12;tx15"}
|
||||
: ${FLAVOR:="nv14;el18;pl18;pl18ev;pl18u;nb4p;st16;c14;pa01;t12;t12max;t15;t15pro;t22;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;tx16smk3;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v16;v14;v14lcd;v12;tx15;gx15"}
|
||||
: ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"}
|
||||
|
||||
# wipe build directory clean
|
||||
|
||||
@@ -11,7 +11,7 @@ if [[ -n ${GCC_ARM} ]] ; then
|
||||
export PATH=${GCC_ARM}:$PATH
|
||||
fi
|
||||
|
||||
: ${FLAVOR:="x10;t15;pl18;nv14;pl18u;nb4p;x9d;x9dp2019;x9e;xlite;xlites;x7;tpro;t20;f16;gx12;st16;c14;pa01;tx15;t15pro;tx16smk3;t22;v12"}
|
||||
: ${FLAVOR:="x10;t15;pl18;nv14;pl18u;nb4p;x9d;x9dp2019;x9e;xlite;xlites;x7;tpro;t20;f16;gx12;st16;c14;pa01;tx15;gx15;t15pro;tx16smk3;t22;v12"}
|
||||
: ${SRCDIR:="$(dirname "$SCRIPT_DIR")"}
|
||||
|
||||
: ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DDISABLE_COMPANION=YES -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"}
|
||||
|
||||
Reference in New Issue
Block a user