feat(radio): Discover SBUS trainer availability (#4266)
Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
co-authored by
raphaelcoeffic
Peter Feerick
parent
b22fa28db9
commit
fa12b27438
@@ -19,11 +19,12 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
#include "hal/module_port.h"
|
||||
#include "hal/adc_driver.h"
|
||||
#include "hal/switch_driver.h"
|
||||
#include "hal/trainer_driver.h"
|
||||
|
||||
#include "opentx.h"
|
||||
#include "switches.h"
|
||||
#include "mixes.h"
|
||||
|
||||
@@ -725,10 +726,11 @@ bool isPxx2IsrmChannelsCountAllowed(int channels)
|
||||
|
||||
bool isTrainerUsingModuleBay()
|
||||
{
|
||||
#if defined(PCBTARANIS)
|
||||
if (TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE <= g_model.trainerData.mode && g_model.trainerData.mode <= TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
||||
if (g_model.trainerData.mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE ||
|
||||
g_model.trainerData.mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) {
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -892,7 +894,8 @@ bool isExternalModuleAvailable(int moduleType)
|
||||
|
||||
#if defined(PXX2)
|
||||
return modulePortFind(EXTERNAL_MODULE, ETX_MOD_TYPE_SERIAL,
|
||||
ETX_MOD_PORT_UART, ETX_Pol_Normal);
|
||||
ETX_MOD_PORT_UART, ETX_Pol_Normal,
|
||||
ETX_MOD_DIR_TX_RX | ETX_MOD_FULL_DUPLEX);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
@@ -1020,38 +1023,46 @@ bool isTrainerModeAvailable(int mode)
|
||||
)
|
||||
return false;
|
||||
|
||||
#if (defined(PCBXLITE) && !defined(PCBXLITES)) || defined(RADIO_COMMANDO8)
|
||||
if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE)
|
||||
if ((mode == TRAINER_MODE_MASTER_TRAINER_JACK ||
|
||||
mode == TRAINER_MODE_SLAVE) &&
|
||||
!trainer_dsc_available())
|
||||
return false;
|
||||
#endif
|
||||
|
||||
#if !defined(TRAINER_MODULE_CPPM)
|
||||
if (mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
|
||||
return false;
|
||||
#endif
|
||||
if (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE ||
|
||||
mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) {
|
||||
|
||||
#if !defined(TRAINER_MODULE_SBUS)
|
||||
if (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE)
|
||||
return false;
|
||||
#endif
|
||||
// no external module or is enabled
|
||||
if (!modulePortGetModuleDescription(EXTERNAL_MODULE) ||
|
||||
IS_EXTERNAL_MODULE_ENABLED()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#if defined(TRAINER_MODULE_CPPM) || defined(TRAINER_MODULE_SBUS)
|
||||
if (IS_EXTERNAL_MODULE_ENABLED() &&
|
||||
(mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE ||
|
||||
mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
|
||||
return false;
|
||||
#endif
|
||||
if (mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) {
|
||||
auto port = modulePortFind(EXTERNAL_MODULE, ETX_MOD_TYPE_TIMER,
|
||||
ETX_MOD_PORT_TIMER, ETX_Pol_Normal,
|
||||
ETX_MOD_DIR_RX);
|
||||
return port != nullptr;
|
||||
}
|
||||
|
||||
if (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) {
|
||||
auto port = modulePortFind(EXTERNAL_MODULE, ETX_MOD_TYPE_SERIAL,
|
||||
ETX_MOD_PORT_UART, ETX_Pol_Normal,
|
||||
ETX_MOD_DIR_RX);
|
||||
return port != nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(MULTIMODULE) || !defined(HARDWARE_INTERNAL_MODULE) || !defined(HARDWARE_EXTERNAL_MODULE)
|
||||
if (mode == TRAINER_MODE_MULTI)
|
||||
if (mode == TRAINER_MODE_MULTI) {
|
||||
|
||||
#if !defined(MULTIMODULE)
|
||||
return false;
|
||||
#else
|
||||
if (mode == TRAINER_MODE_MULTI &&
|
||||
((!IS_INTERNAL_MODULE_ENABLED() && !IS_EXTERNAL_MODULE_ENABLED()) ||
|
||||
if ((!IS_INTERNAL_MODULE_ENABLED() && !IS_EXTERNAL_MODULE_ENABLED()) ||
|
||||
(!isModuleMultimodule(INTERNAL_MODULE) &&
|
||||
!isModuleMultimodule(EXTERNAL_MODULE))))
|
||||
!isModuleMultimodule(EXTERNAL_MODULE)))
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user