Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ body:
- RadioMaster TX16S / TX16SMK2
- RadioMaster TX16S MK3
- RadioMaster Zorro
- Senduwing H17
- Other (Please specify below)
validations:
required: true
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/build_fw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ jobs:
- t15pro
- pa01
- t22
- h17
container:
image: ghcr.io/edgetx/edgetx-dev:2.12
volumes:
Expand Down Expand Up @@ -113,6 +114,7 @@ jobs:
- t15pro
- t22
- c14
- h17
container:
image: ghcr.io/edgetx/edgetx-dev:2.12
volumes:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
- tx15
- t15pro
- gx15
- h17
container:
image: ghcr.io/edgetx/edgetx-dev:2.12
volumes:
Expand Down
8 changes: 5 additions & 3 deletions companion/src/firmwares/boardjson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ 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)) {
// H17 has no IMU
if ((IS_TARANIS_XLITES(board) || IS_FAMILY_HORUS_OR_T16(board) ||
IS_RADIOMASTER_TX15(board) || IS_RADIOMASTER_TX16SMK3(board) ||
IS_FLYSKY_PA01(board)) &&
!IS_SENDUWING_H17(board)) {
if (getInputIndex(inputs, "TILT_X", Board::LVT_TAG) < 0) {
InputDefn defn;
defn.type = AIT_FLEX;
Expand Down
10 changes: 10 additions & 0 deletions companion/src/firmwares/boards.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x4E78746F;
case BOARD_IFLIGHT_COMMANDO14:
return 0x4F78746F;
case BOARD_SENDUWING_H17:
return 0x5078746F;
default:
return 0;
}
Expand Down Expand Up @@ -241,6 +243,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_HELLORADIOSKY_V12:
case BOARD_HELLORADIOSKY_V16:
case BOARD_IFLIGHT_COMMANDO14:
case BOARD_SENDUWING_H17:
return 0;
default:
return 0;
Expand Down Expand Up @@ -309,6 +312,7 @@ int Boards::getFlashSize(Type board)
case BOARD_HELLORADIOSKY_V12: // 8MB SDRAM
case BOARD_HELLORADIOSKY_V16:
case BOARD_IFLIGHT_COMMANDO14:
case BOARD_SENDUWING_H17: // 8MB SDRAM
return FSIZE_2MB;
case BOARD_UNKNOWN:
return FSIZE_MAX;
Expand Down Expand Up @@ -755,6 +759,8 @@ QString Boards::getBoardName(Board::Type board)
return "iFlight Commando 8";
case BOARD_IFLIGHT_COMMANDO14:
return "iFlight Commando 14";
case BOARD_SENDUWING_H17:
return "Senduwing H17";
case BOARD_FATFISH_F16:
return "Fatfish F16";
case BOARD_HELLORADIOSKY_V12:
Expand Down Expand Up @@ -881,6 +887,7 @@ int Boards::getDefaultInternalModules(Board::Type board)
case BOARD_RADIOMASTER_TX16SMK3:
case BOARD_IFLIGHT_COMMANDO8:
case BOARD_IFLIGHT_COMMANDO14:
case BOARD_SENDUWING_H17:
case BOARD_JUMPER_BUMBLEBEE:
case BOARD_JUMPER_T12MAX:
case BOARD_JUMPER_T14:
Expand Down Expand Up @@ -980,6 +987,9 @@ void Boards::getBattRange(Board::Type board, int& vmin, int& vmax, unsigned int&
case BOARD_FLYSKY_PA01:
BR(70, 86, 80)
break;
case BOARD_SENDUWING_H17:
BR(70, 86, 74)
break;
case BOARD_IFLIGHT_COMMANDO8:
BR(30, 42, 32)
break;
Expand Down
8 changes: 7 additions & 1 deletion companion/src/firmwares/boards.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ namespace Board {
BOARD_HELLORADIOSKY_V14,
BOARD_HELLORADIOSKY_V14LCD,
BOARD_IFLIGHT_COMMANDO14,
BOARD_SENDUWING_H17,
BOARD_TYPE_COUNT,
BOARD_TYPE_MAX = BOARD_TYPE_COUNT - 1
};
Expand Down Expand Up @@ -514,6 +515,11 @@ inline bool IS_IFLIGHT_C14(Board::Type board)
return board == Board::BOARD_IFLIGHT_COMMANDO14;
}

inline bool IS_SENDUWING_H17(Board::Type board)
{
return (board == Board::BOARD_SENDUWING_H17);
}

inline bool IS_JUMPER_T12(Board::Type board)
{
return board == Board::BOARD_JUMPER_T12;
Expand Down Expand Up @@ -835,7 +841,7 @@ inline bool IS_FAMILY_HORUS_OR_T16(Board::Type board)
return IS_FAMILY_HORUS(board) || IS_FAMILY_T16(board) ||
IS_FLYSKY_NV14(board)/*generally*/ || IS_FLYSKY_EL18(board)/*generally*/
|| IS_FAMILY_PL18(board) || IS_FLYSKY_ST16(board)/*generally*/ || IS_FLYSKY_PA01(board)/*generally*/
|| IS_IFLIGHT_C14(board);
|| IS_IFLIGHT_C14(board) || IS_SENDUWING_H17(board)/*generally*/;
}

inline bool IS_HORUS_OR_TARANIS(Board::Type board)
Expand Down
12 changes: 10 additions & 2 deletions companion/src/firmwares/opentx/opentxinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@ int OpenTxFirmware::getCapability(::Capability capability)
IS_RADIOMASTER_POCKET(board) || IS_RADIOMASTER_TX12(board) || IS_RADIOMASTER_TX12_MK2(board) ||
IS_RADIOMASTER_TX16S(board) || 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_JUMPER_T22(board)) || IS_RADIOMASTER_GX15(board);
IS_RADIOMASTER_TX16SMK3(board) || IS_JUMPER_T22(board)) || IS_RADIOMASTER_GX15(board) ||
IS_SENDUWING_H17(board);
case HasSoftwareSerialPower:
return IS_RADIOMASTER_TX16S(board);
case HasIntModuleMulti:
Expand All @@ -350,7 +351,8 @@ 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_JUMPER_T15PRO(board) || IS_JUMPER_T22(board) ||
IS_SENDUWING_H17(board);
case HasIntModuleFlySky:
return id.contains("afhds2a") || id.contains("afhds3") ||
IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FAMILY_PL18(board);
Expand Down Expand Up @@ -909,6 +911,12 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX + AFHDS2A + AFHDS3);

/* Senduwing H17 board */
firmware = new OpenTxFirmware(FIRMWAREID("h17"), Firmware::tr("Senduwing H17"), BOARD_SENDUWING_H17);
addOpenTxFrskyOptions(firmware);
addOpenTxRfOptions(firmware, FLEX);
registerOpenTxFirmware(firmware);

Firmware::sortRegisteredFirmwares();
Firmware::setDefaultVariant(Firmware::getFirmwareForFlavour("tx16s"));
Firmware::setCurrentVariant(Firmware::getDefaultVariant());
Expand Down
3 changes: 2 additions & 1 deletion fw.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
["RadioMaster TX15", "tx15-"],
["RadioMaster TX16S", "tx16s-"],
["RadioMaster TX16S MK3", "tx16smk3-"],
["RadioMaster Zorro","zorro-"]
["RadioMaster Zorro","zorro-"],
["Senduwing H17", "h17-"]
],
"changelog": "- Major initial bug fixes"
}
4 changes: 3 additions & 1 deletion radio/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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 GX15)
set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S PL18 T15PRO ST16 PA01 TX15 TX16SMK3 T22 V12 GX15 H17)
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)

Expand Down Expand Up @@ -106,6 +106,8 @@ elseif(PCB STREQUAL TX15)
include(targets/tx15/CMakeLists.txt)
elseif(PCB STREQUAL TX16SMK3)
include(targets/tx16smk3/CMakeLists.txt)
elseif(PCB STREQUAL H17)
include(targets/h17/CMakeLists.txt)
elseif(PCB STREQUAL T22)
include(targets/t22/CMakeLists.txt)
elseif(PCB STREQUAL GX15)
Expand Down
78 changes: 78 additions & 0 deletions radio/src/boards/senduwing-h750/backlight_driver.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* 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/gpio.h"
#include "stm32_gpio.h"
#include "stm32_timer.h"
#include "stm32_pulse_driver.h"

#include "edgetx_types.h"
#include "board.h"

#include "globals.h"

static const stm32_pulse_timer_t _bl_timer = {
.GPIO = (gpio_t)BACKLIGHT_GPIO,
.GPIO_Alternate = BACKLIGHT_GPIO_AF,
.TIMx = BACKLIGHT_TIMER,
.TIM_Freq = BACKLIGHT_TIMER_FREQ,
.TIM_Channel = BACKLIGHT_TIMER_CHANNEL,
.TIM_IRQn = (IRQn_Type)-1,
.DMAx = nullptr,
.DMA_Stream = 0,
.DMA_Channel = 0,
.DMA_IRQn = (IRQn_Type)-1,
.DMA_TC_CallbackPtr = nullptr,
};

void backlightLowInit()
{
gpio_init(BACKLIGHT_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW);
gpio_clear(BACKLIGHT_GPIO);
}

void backlightInit()
{
stm32_pulse_init(&_bl_timer, 10000);
stm32_pulse_config_output(&_bl_timer, true, LL_TIM_OCMODE_PWM1, 100);
LL_TIM_SetAutoReload(_bl_timer.TIMx, 100);
LL_TIM_EnableCounter(_bl_timer.TIMx);
}

void backlightEnable(uint8_t dutyCycle)
{
stm32_pulse_set_cmp_val(&_bl_timer, dutyCycle);
}

void lcdOff() {
backlightEnable(0);
}

void lcdOn(){
backlightEnable(BACKLIGHT_LEVEL_MAX);
}

bool boardBacklightOn;

bool isBacklightEnabled()
{
return boardBacklightOn;
}
Loading