mirror of
https://github.com/opentx/opentx.git
synced 2025-07-12 19:10:19 +03:00
parent
5bf197439a
commit
5d4f6679e5
41 changed files with 276 additions and 2286 deletions
|
@ -24,8 +24,6 @@ set(COMPANION_OSX_APP_BUNDLE_NAME "OpenTX Companion ${VERSION_MAJOR}.${VERSION_M
|
||||||
# On OS X we copy dfu-util to the application bundle. This the path from which we copy
|
# On OS X we copy dfu-util to the application bundle. This the path from which we copy
|
||||||
# the binary (default homebrew path)
|
# the binary (default homebrew path)
|
||||||
set(DFU_UTIL_PATH "/usr/local/bin/dfu-util")
|
set(DFU_UTIL_PATH "/usr/local/bin/dfu-util")
|
||||||
set(AVRDUDE_PATH "/usr/local/bin/avrdude")
|
|
||||||
set(AVRDUDE_CONF "/usr/local/etc/avrdude.conf")
|
|
||||||
|
|
||||||
option(ALLOW_NIGHTLY_BUILDS "Allow nightly builds download / update") # Disabled by default
|
option(ALLOW_NIGHTLY_BUILDS "Allow nightly builds download / update") # Disabled by default
|
||||||
if(ALLOW_NIGHTLY_BUILDS)
|
if(ALLOW_NIGHTLY_BUILDS)
|
||||||
|
@ -239,7 +237,6 @@ set(companion_SRCS
|
||||||
flasheepromdialog.cpp
|
flasheepromdialog.cpp
|
||||||
printdialog.cpp
|
printdialog.cpp
|
||||||
modelprinter.cpp
|
modelprinter.cpp
|
||||||
fusesdialog.cpp
|
|
||||||
logsdialog.cpp
|
logsdialog.cpp
|
||||||
downloaddialog.cpp
|
downloaddialog.cpp
|
||||||
splashlibrarydialog.cpp
|
splashlibrarydialog.cpp
|
||||||
|
@ -259,7 +256,6 @@ set(companion_MOC_HDRS
|
||||||
burnconfigdialog.h
|
burnconfigdialog.h
|
||||||
comparedialog.h
|
comparedialog.h
|
||||||
printdialog.h
|
printdialog.h
|
||||||
fusesdialog.h
|
|
||||||
logsdialog.h
|
logsdialog.h
|
||||||
creditsdialog.h
|
creditsdialog.h
|
||||||
releasenotesdialog.h
|
releasenotesdialog.h
|
||||||
|
@ -291,7 +287,6 @@ set(companion_MOC_HDRS
|
||||||
set(companion_UIS
|
set(companion_UIS
|
||||||
mdichild.ui
|
mdichild.ui
|
||||||
comparedialog.ui
|
comparedialog.ui
|
||||||
fusesdialog.ui
|
|
||||||
logsdialog.ui
|
logsdialog.ui
|
||||||
apppreferencesdialog.ui
|
apppreferencesdialog.ui
|
||||||
fwpreferencesdialog.ui
|
fwpreferencesdialog.ui
|
||||||
|
@ -407,7 +402,7 @@ elseif(WIN32)
|
||||||
install(TARGETS ${SIMULATOR_NAME} DESTINATION ${INSTALL_DESTINATION})
|
install(TARGETS ${SIMULATOR_NAME} DESTINATION ${INSTALL_DESTINATION})
|
||||||
install(FILES ${simulator_plugins} DESTINATION "${INSTALL_DESTINATION}")
|
install(FILES ${simulator_plugins} DESTINATION "${INSTALL_DESTINATION}")
|
||||||
# supporting utilities
|
# supporting utilities
|
||||||
set(INSTALL_TEMP_FILES avrdude.exe avrdude.conf dfu-util.exe libusb0.dll libusb-1.0.dll license.txt)
|
set(INSTALL_TEMP_FILES dfu-util.exe libusb0.dll libusb-1.0.dll license.txt)
|
||||||
foreach(tmpfile ${INSTALL_TEMP_FILES})
|
foreach(tmpfile ${INSTALL_TEMP_FILES})
|
||||||
install(FILES "${COMPANION_SRC_DIRECTORY}/../targets/windows/${tmpfile}" DESTINATION ${INSTALL_DESTINATION})
|
install(FILES "${COMPANION_SRC_DIRECTORY}/../targets/windows/${tmpfile}" DESTINATION ${INSTALL_DESTINATION})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -554,14 +549,11 @@ IF(APPLE)
|
||||||
set(${COMPANION_SOURCES} ${COMPANION_SOURCES} ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE})
|
set(${COMPANION_SOURCES} ${COMPANION_SOURCES} ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE})
|
||||||
install(FILES ${MAC_ICON_FILE} DESTINATION ${companion_res_dir} COMPONENT Runtime)
|
install(FILES ${MAC_ICON_FILE} DESTINATION ${companion_res_dir} COMPONENT Runtime)
|
||||||
|
|
||||||
# Copy dfu-util and avrdude, resolve symlink first
|
# Copy dfu-util, resolve symlink first
|
||||||
get_filename_component(DFU_UTIL_ABSOLUTE_PATH ${DFU_UTIL_PATH} REALPATH)
|
get_filename_component(DFU_UTIL_ABSOLUTE_PATH ${DFU_UTIL_PATH} REALPATH)
|
||||||
get_filename_component(AVRDUDE_ABSOLUTE_PATH ${AVRDUDE_PATH} REALPATH)
|
install(PROGRAMS ${DFU_UTIL_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime)
|
||||||
get_filename_component(AVRDUDECONF_ABSOLUTE_PATH ${AVRDUDE_CONF} REALPATH)
|
|
||||||
install(PROGRAMS ${DFU_UTIL_ABSOLUTE_PATH} ${AVRDUDE_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime)
|
|
||||||
install(FILES ${AVRDUDECONF_ABSOLUTE_PATH} DESTINATION ${companion_res_dir} COMPONENT Runtime)
|
|
||||||
|
|
||||||
set(bundle_tools_path "\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/dfu-util;\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/avrdude")
|
set(bundle_tools_path "\${CMAKE_INSTALL_PREFIX}/${companion_res_dir}/dfu-util;")
|
||||||
|
|
||||||
|
|
||||||
# Include depencies (adding frameworks, fixing the embbeded libraries)
|
# Include depencies (adding frameworks, fixing the embbeded libraries)
|
||||||
|
|
|
@ -36,61 +36,23 @@ burnConfigDialog::burnConfigDialog(QWidget *parent) :
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setWindowIcon(CompanionIcon("configure.png"));
|
setWindowIcon(CompanionIcon("configure.png"));
|
||||||
ui->avrdude_programmer->model()->sort(0);
|
|
||||||
|
|
||||||
getSettings();
|
getSettings();
|
||||||
populateProgrammers();
|
|
||||||
Board::Type board = getCurrentBoard();
|
Board::Type board = getCurrentBoard();
|
||||||
if (IS_STM32(board)) {
|
if (IS_STM32(board)) {
|
||||||
setWindowTitle(tr("DFU-UTIL Configuration"));
|
setWindowTitle(tr("DFU-UTIL Configuration"));
|
||||||
ui->avrArgs->hide();
|
|
||||||
ui->avrdude_location->hide();
|
|
||||||
ui->avrdude_port->hide();
|
|
||||||
ui->avrdude_programmer->hide();
|
|
||||||
ui->label_av1->hide();
|
|
||||||
ui->label_av2->hide();
|
|
||||||
ui->label_av4->hide();
|
|
||||||
ui->label_av5->hide();
|
|
||||||
ui->pushButton->hide();
|
|
||||||
ui->pushButton_3->hide();
|
|
||||||
ui->pushButton_4->hide();
|
|
||||||
ui->label_sb1->hide();
|
ui->label_sb1->hide();
|
||||||
ui->label_sb3->hide();
|
ui->label_sb3->hide();
|
||||||
ui->samba_location->hide();
|
ui->samba_location->hide();
|
||||||
ui->samba_port->hide();
|
ui->samba_port->hide();
|
||||||
ui->sb_browse->hide();
|
ui->sb_browse->hide();
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(board)) {
|
|
||||||
setWindowTitle(tr("SAM-BA Configuration"));
|
|
||||||
ui->avrArgs->hide();
|
|
||||||
ui->avrdude_location->hide();
|
|
||||||
ui->avrdude_port->hide();
|
|
||||||
ui->avrdude_programmer->hide();
|
|
||||||
ui->label_av1->hide();
|
|
||||||
ui->label_av2->hide();
|
|
||||||
ui->label_av4->hide();
|
|
||||||
ui->label_av5->hide();
|
|
||||||
ui->pushButton->hide();
|
|
||||||
ui->pushButton_3->hide();
|
|
||||||
ui->pushButton_4->hide();
|
|
||||||
ui->label_dfu1->hide();
|
|
||||||
ui->dfu_location->hide();
|
|
||||||
ui->dfu_browse->hide();
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
setWindowTitle(tr("AVRDUDE Configuration"));
|
setWindowTitle(tr("SAM-BA Configuration"));
|
||||||
ui->label_sb1->hide();
|
|
||||||
ui->label_sb3->hide();
|
|
||||||
ui->samba_location->hide();
|
|
||||||
ui->samba_port->hide();
|
|
||||||
ui->sb_browse->hide();
|
|
||||||
ui->label_dfu1->hide();
|
ui->label_dfu1->hide();
|
||||||
ui->label_dfu2->hide();
|
|
||||||
ui->dfu_location->hide();
|
ui->dfu_location->hide();
|
||||||
ui->dfu_browse->hide();
|
ui->dfu_browse->hide();
|
||||||
}
|
}
|
||||||
ui->label_av3->hide();
|
|
||||||
ui->avrdude_mcu->hide();
|
|
||||||
ui->label_sb2->hide();
|
ui->label_sb2->hide();
|
||||||
ui->arm_mcu->hide();
|
ui->arm_mcu->hide();
|
||||||
ui->label_dfu2->hide();
|
ui->label_dfu2->hide();
|
||||||
|
@ -105,46 +67,26 @@ burnConfigDialog::~burnConfigDialog()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList burnConfigDialog::getAvrdudeArgs()
|
|
||||||
{
|
|
||||||
QStringList args = avrArgs;
|
|
||||||
if (!avrPort.isEmpty())
|
|
||||||
args << "-P" << avrPort;
|
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
args << "-C" << QFileInfo(QApplication::applicationDirPath() + "/../Resources/avrdude.conf").absoluteFilePath();
|
|
||||||
#endif
|
|
||||||
return args;
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::getSettings()
|
void burnConfigDialog::getSettings()
|
||||||
{
|
{
|
||||||
avrLoc = g.avrdudeLocation();
|
|
||||||
sambaLoc = g.sambaLocation();
|
sambaLoc = g.sambaLocation();
|
||||||
dfuLoc = g.dfuLocation();
|
dfuLoc = g.dfuLocation();
|
||||||
|
|
||||||
#if defined WIN32 || !defined __GNUC__
|
#if defined WIN32 || !defined __GNUC__
|
||||||
if ( avrLoc.isEmpty())
|
|
||||||
avrLoc = QFileInfo("avrdude.exe").absoluteFilePath();
|
|
||||||
if ( sambaLoc.isEmpty())
|
if ( sambaLoc.isEmpty())
|
||||||
sambaLoc = QFileInfo("sam-ba.exe").absoluteFilePath();
|
sambaLoc = QFileInfo("sam-ba.exe").absoluteFilePath();
|
||||||
if ( dfuLoc.isEmpty())
|
if ( dfuLoc.isEmpty())
|
||||||
dfuLoc = QFileInfo("dfu-util.exe").absoluteFilePath();
|
dfuLoc = QFileInfo("dfu-util.exe").absoluteFilePath();
|
||||||
#elif defined __APPLE__
|
#elif defined __APPLE__
|
||||||
if ( avrLoc.isEmpty())
|
|
||||||
avrLoc = QFileInfo(QApplication::applicationDirPath() + "/../Resources/avrdude").absoluteFilePath();
|
|
||||||
if ( sambaLoc.isEmpty())
|
if ( sambaLoc.isEmpty())
|
||||||
sambaLoc = "/usr/local/bin/sam-ba";
|
sambaLoc = "/usr/local/bin/sam-ba";
|
||||||
if ( dfuLoc.isEmpty())
|
if ( dfuLoc.isEmpty())
|
||||||
dfuLoc = QFileInfo(QApplication::applicationDirPath() + "/../Resources/dfu-util").absoluteFilePath();
|
dfuLoc = QFileInfo(QApplication::applicationDirPath() + "/../Resources/dfu-util").absoluteFilePath();
|
||||||
#elif defined __FreeBSD__
|
#elif defined __FreeBSD__
|
||||||
if (avrLoc.isEmpty())
|
|
||||||
avrLoc = "/usr/local/bin/avrdude";
|
|
||||||
if (dfuLoc.isEmpty())
|
if (dfuLoc.isEmpty())
|
||||||
dfuLoc = "/usr/local/bin/dfu-util";
|
dfuLoc = "/usr/local/bin/dfu-util";
|
||||||
#else
|
#else
|
||||||
if ( avrLoc.isEmpty())
|
|
||||||
avrLoc = "/usr/bin/avrdude";
|
|
||||||
if ( sambaLoc.isEmpty())
|
if ( sambaLoc.isEmpty())
|
||||||
sambaLoc = "/usr/bin/sam-ba";
|
sambaLoc = "/usr/bin/sam-ba";
|
||||||
if ( dfuLoc.isEmpty())
|
if ( dfuLoc.isEmpty())
|
||||||
|
@ -152,45 +94,22 @@ void burnConfigDialog::getSettings()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
dfuArgs = g.dfuArguments().split(" ", QString::SkipEmptyParts);
|
dfuArgs = g.dfuArguments().split(" ", QString::SkipEmptyParts);
|
||||||
avrArgs = g.avrArguments().split(" ", QString::SkipEmptyParts);
|
|
||||||
avrProgrammer = g.programmer();
|
|
||||||
avrPort = g.avrPort();
|
|
||||||
avrMCU = g.mcu();
|
|
||||||
armMCU = g.armMcu();
|
armMCU = g.armMcu();
|
||||||
sambaPort = g.sambaPort();
|
sambaPort = g.sambaPort();
|
||||||
|
|
||||||
ui->avrdude_location->setText(getAVRDUDE());
|
|
||||||
ui->avrArgs->setText(avrArgs.join(" "));
|
|
||||||
|
|
||||||
ui->samba_location->setText(getSAMBA());
|
ui->samba_location->setText(getSAMBA());
|
||||||
ui->samba_port->setText(getSambaPort());
|
ui->samba_port->setText(getSambaPort());
|
||||||
|
|
||||||
ui->dfu_location->setText(getDFU());
|
ui->dfu_location->setText(getDFU());
|
||||||
ui->dfuArgs->setText(getDFUArgs().join(" "));
|
ui->dfuArgs->setText(getDFUArgs().join(" "));
|
||||||
|
|
||||||
int idx1 = ui->avrdude_programmer->findText(getProgrammer());
|
|
||||||
int idx2 = ui->avrdude_port->findText(getPort());
|
|
||||||
int idx3 = ui->avrdude_mcu->findText(getMCU());
|
|
||||||
int idx4 = ui->arm_mcu->findText(getArmMCU());
|
int idx4 = ui->arm_mcu->findText(getArmMCU());
|
||||||
if(idx1>=0) ui->avrdude_programmer->setCurrentIndex(idx1);
|
|
||||||
if(idx2>=0) ui->avrdude_port->setCurrentIndex(idx2);
|
|
||||||
if(idx3>=0) ui->avrdude_mcu->setCurrentIndex(idx3);
|
|
||||||
if(idx4>=0) ui->arm_mcu->setCurrentIndex(idx4);
|
if(idx4>=0) ui->arm_mcu->setCurrentIndex(idx4);
|
||||||
QFile file;
|
QFile file;
|
||||||
if (file.exists(avrLoc)) {
|
|
||||||
ui->pushButton_3->setEnabled(true);
|
|
||||||
} else {
|
|
||||||
ui->pushButton_3->setDisabled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void burnConfigDialog::putSettings()
|
void burnConfigDialog::putSettings()
|
||||||
{
|
{
|
||||||
g.avrdudeLocation( avrLoc );
|
|
||||||
g.programmer( avrProgrammer);
|
|
||||||
g.mcu( avrMCU );
|
|
||||||
g.avrPort( avrPort );
|
|
||||||
g.avrArguments( avrArgs.join(" ") );
|
|
||||||
g.sambaLocation( sambaLoc );
|
g.sambaLocation( sambaLoc );
|
||||||
g.sambaPort( sambaPort );
|
g.sambaPort( sambaPort );
|
||||||
g.armMcu( armMCU );
|
g.armMcu( armMCU );
|
||||||
|
@ -198,73 +117,6 @@ void burnConfigDialog::putSettings()
|
||||||
g.dfuArguments( dfuArgs.join(" ") );
|
g.dfuArguments( dfuArgs.join(" ") );
|
||||||
}
|
}
|
||||||
|
|
||||||
void burnConfigDialog::populateProgrammers()
|
|
||||||
{
|
|
||||||
QString fileName = QFileInfo(avrLoc).canonicalPath() + "/avrdude.conf"; //for windows
|
|
||||||
if(!QFileInfo(fileName).exists()) fileName = "/etc/avrdude.conf"; //for linux
|
|
||||||
if(!QFileInfo(fileName).exists()) fileName = "/etc/avrdude/avrdude.conf"; //for linux
|
|
||||||
if(!QFileInfo(fileName).exists()) return; // not found avrdude.conf - returning
|
|
||||||
|
|
||||||
QFile file(fileName);
|
|
||||||
|
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
|
|
||||||
|
|
||||||
QStringList items;
|
|
||||||
QString line = "";
|
|
||||||
QString prevline = "";
|
|
||||||
QTextStream in(&file);
|
|
||||||
while (!in.atEnd())
|
|
||||||
{
|
|
||||||
prevline = line;
|
|
||||||
line = in.readLine();
|
|
||||||
|
|
||||||
if(prevline.left(10).toLower()=="programmer")
|
|
||||||
items << line.section('"',1,1);
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
|
|
||||||
items.sort();
|
|
||||||
|
|
||||||
QString avrProgrammer_temp = avrProgrammer;
|
|
||||||
ui->avrdude_programmer->clear();
|
|
||||||
ui->avrdude_programmer->addItems(items);
|
|
||||||
int idx1 = ui->avrdude_programmer->findText(avrProgrammer_temp);
|
|
||||||
if(idx1>=0) ui->avrdude_programmer->setCurrentIndex(idx1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_avrdude_programmer_currentIndexChanged(QString )
|
|
||||||
{
|
|
||||||
avrProgrammer = ui->avrdude_programmer->currentText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_avrdude_mcu_currentIndexChanged(QString )
|
|
||||||
{
|
|
||||||
avrMCU = ui->avrdude_mcu->currentText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_avrdude_location_editingFinished()
|
|
||||||
{
|
|
||||||
avrLoc = ui->avrdude_location->text();
|
|
||||||
if (avrLoc.isEmpty()) {
|
|
||||||
ui->pushButton_3->setDisabled(true);
|
|
||||||
} else {
|
|
||||||
QFile file;
|
|
||||||
if (file.exists(avrLoc)) {
|
|
||||||
ui->pushButton_3->setEnabled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_avrArgs_editingFinished()
|
|
||||||
{
|
|
||||||
avrArgs = ui->avrArgs->text().split(" ", QString::SkipEmptyParts);
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_avrdude_port_currentIndexChanged(QString )
|
|
||||||
{
|
|
||||||
avrPort = ui->avrdude_port->currentText();
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_samba_location_editingFinished()
|
void burnConfigDialog::on_samba_location_editingFinished()
|
||||||
{
|
{
|
||||||
sambaLoc = ui->samba_location->text();
|
sambaLoc = ui->samba_location->text();
|
||||||
|
@ -280,17 +132,6 @@ void burnConfigDialog::on_arm_mcu_currentIndexChanged(QString )
|
||||||
armMCU = ui->arm_mcu->currentText();
|
armMCU = ui->arm_mcu->currentText();
|
||||||
}
|
}
|
||||||
|
|
||||||
void burnConfigDialog::on_pushButton_clicked()
|
|
||||||
{
|
|
||||||
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->avrdude_location->text());
|
|
||||||
|
|
||||||
if(!fileName.isEmpty())
|
|
||||||
{
|
|
||||||
ui->avrdude_location->setText(fileName);
|
|
||||||
avrLoc = fileName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_sb_browse_clicked()
|
void burnConfigDialog::on_sb_browse_clicked()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->samba_location->text());
|
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Location"),ui->samba_location->text());
|
||||||
|
@ -322,27 +163,6 @@ void burnConfigDialog::on_dfuArgs_editingFinished()
|
||||||
dfuArgs = ui->dfuArgs->text().split(" ", QString::SkipEmptyParts);
|
dfuArgs = ui->dfuArgs->text().split(" ", QString::SkipEmptyParts);
|
||||||
}
|
}
|
||||||
|
|
||||||
void burnConfigDialog::listAvrdudeProgrammers()
|
|
||||||
{
|
|
||||||
ProgressDialog progressDialog(this, tr("List available programmers"), CompanionIcon("list.png"), true);
|
|
||||||
FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-c?", progressDialog.progress());
|
|
||||||
flashProcess.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO choose better name when no merge in progress....
|
|
||||||
void burnConfigDialog::on_pushButton_3_clicked()
|
|
||||||
{
|
|
||||||
listAvrdudeProgrammers();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO choose better name when no merge in progress....
|
|
||||||
void burnConfigDialog::on_pushButton_4_clicked()
|
|
||||||
{
|
|
||||||
ProgressDialog progressDialog(this, tr("Avrdude help"), CompanionIcon("configure.png"), true);
|
|
||||||
FlashProcess flashProcess(ui->avrdude_location->text(), QStringList() << "-?", progressDialog.progress());
|
|
||||||
flashProcess.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
|
void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
|
||||||
{
|
{
|
||||||
Board::Type board = getCurrentBoard();
|
Board::Type board = getCurrentBoard();
|
||||||
|
@ -351,31 +171,20 @@ void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
|
||||||
ui->label_dfu2->show();
|
ui->label_dfu2->show();
|
||||||
ui->dfuArgs->show();
|
ui->dfuArgs->show();
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(board)) {
|
else {
|
||||||
ui->label_sb2->show();
|
ui->label_sb2->show();
|
||||||
ui->arm_mcu->show();
|
ui->arm_mcu->show();
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
ui->label_av3->show();
|
|
||||||
ui->avrdude_mcu->show();
|
|
||||||
QMessageBox::warning(this, CPN_STR_APP_NAME,
|
|
||||||
tr("<b><u>WARNING!</u></b><br>Normally CPU type is automatically selected according to the chosen firmware.<br>If you change the CPU type the resulting eeprom could be inconsistent."),
|
|
||||||
QMessageBox::Ok);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (IS_STM32(board)) {
|
if (IS_STM32(board)) {
|
||||||
ui->label_dfu2->hide();
|
ui->label_dfu2->hide();
|
||||||
ui->dfuArgs->hide();
|
ui->dfuArgs->hide();
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(board)) {
|
else {
|
||||||
ui->label_sb2->hide();
|
ui->label_sb2->hide();
|
||||||
ui->arm_mcu->hide();
|
ui->arm_mcu->hide();
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
ui->label_av3->hide();
|
|
||||||
ui->avrdude_mcu->hide();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
QTimer::singleShot(0, this, SLOT(shrink()));
|
QTimer::singleShot(0, this, SLOT(shrink()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,45 +39,25 @@ public:
|
||||||
burnConfigDialog(QWidget *parent = 0);
|
burnConfigDialog(QWidget *parent = 0);
|
||||||
~burnConfigDialog();
|
~burnConfigDialog();
|
||||||
|
|
||||||
QString getAVRDUDE() {return avrLoc;}
|
|
||||||
QString getSAMBA() {return sambaLoc;}
|
QString getSAMBA() {return sambaLoc;}
|
||||||
QString getDFU() {return dfuLoc;}
|
QString getDFU() {return dfuLoc;}
|
||||||
QStringList getAvrdudeArgs();
|
|
||||||
QStringList getDFUArgs() {return dfuArgs;}
|
QStringList getDFUArgs() {return dfuArgs;}
|
||||||
QString getProgrammer() {return avrProgrammer;}
|
|
||||||
QString getMCU() {return avrMCU;}
|
|
||||||
QString getArmMCU() {return armMCU;}
|
QString getArmMCU() {return armMCU;}
|
||||||
QString getPort() {return avrPort;}
|
|
||||||
QString getSambaPort() {return sambaPort;}
|
QString getSambaPort() {return sambaPort;}
|
||||||
|
|
||||||
void listAvrdudeProgrammers();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::burnConfigDialog *ui;
|
Ui::burnConfigDialog *ui;
|
||||||
|
|
||||||
void populateProgrammers();
|
void populateProgrammers();
|
||||||
|
|
||||||
QString avrLoc;
|
|
||||||
QString sambaLoc;
|
QString sambaLoc;
|
||||||
QString dfuLoc;
|
QString dfuLoc;
|
||||||
QStringList avrArgs;
|
|
||||||
QString avrProgrammer;
|
|
||||||
QString avrMCU;
|
|
||||||
QString armMCU;
|
QString armMCU;
|
||||||
QString avrPort;
|
|
||||||
QString sambaPort;
|
QString sambaPort;
|
||||||
QStringList dfuArgs;
|
QStringList dfuArgs;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void shrink();
|
void shrink();
|
||||||
void on_avrArgs_editingFinished();
|
|
||||||
void on_pushButton_4_clicked();
|
|
||||||
void on_pushButton_3_clicked();
|
|
||||||
void on_pushButton_clicked();
|
|
||||||
void on_avrdude_location_editingFinished();
|
|
||||||
void on_avrdude_programmer_currentIndexChanged(QString );
|
|
||||||
void on_avrdude_mcu_currentIndexChanged(QString );
|
|
||||||
void on_avrdude_port_currentIndexChanged(QString );
|
|
||||||
void on_samba_location_editingFinished();
|
void on_samba_location_editingFinished();
|
||||||
void on_samba_port_editingFinished();
|
void on_samba_port_editingFinished();
|
||||||
void on_arm_mcu_currentIndexChanged(QString );
|
void on_arm_mcu_currentIndexChanged(QString );
|
||||||
|
|
|
@ -45,615 +45,7 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="9" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QLineEdit" name="dfu_location">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Location of sam-ba executable</string>
|
|
||||||
</property>
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>The location of the AVRDUDE executable.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dfu-util</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="9" column="0">
|
|
||||||
<widget class="QLabel" name="label_dfu1">
|
|
||||||
<property name="text">
|
|
||||||
<string>DFU-Util Location</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QLineEdit" name="avrdude_location">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Location of AVRDUDE executable</string>
|
|
||||||
</property>
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>The location of the AVRDUDE executable.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true"/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="4" rowspan="2">
|
|
||||||
<widget class="QPushButton" name="pushButton">
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>Use this button to browse and look for the AVRDUDE executable file.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Browse...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_av2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Programmer</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QComboBox" name="avrdude_programmer">
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>Programmer used for communicating with the controller.
|
|
||||||
Please consult the programmer's documentation and the AVRDUDE documentation to select the appropriate programmer.</string>
|
|
||||||
</property>
|
|
||||||
<property name="insertPolicy">
|
|
||||||
<enum>QComboBox::InsertAlphabetically</enum>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">c2n232i</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dasa3</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dasa</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">siprog</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">ponyser</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">89isp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">frank-stk200</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">blaster</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">ere-isp-avr</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">atisp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dapa</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">xil</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">futurlec</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">abcmini</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">picoweb</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">sp12</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">alf</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">bascom</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dt006</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">pony-stk200</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk200</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">bsd</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">pavr</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_pdi</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_dw</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_hvsp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_pp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_isp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">dragon_jtag</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2pdi</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2avr32</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtagmkII_avr32</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2dw</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2isp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2fast</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag2slow</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtagmkII</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag1slow</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtag1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">jtagmkI</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avr911</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avr109</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">butterfly</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">usbtiny</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">usbasp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avr910</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk600hvsp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk600pp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk600</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk500hvsp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk500pp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk500v2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">mib510</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk500v1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">stk500</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">buspirate</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avrisp2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avrispmkII</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avrispv2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avrisp</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">arduino</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="4">
|
|
||||||
<widget class="QPushButton" name="pushButton_3">
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>List all available programmers.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>List Available</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="2">
|
|
||||||
<widget class="QLineEdit" name="avrArgs">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Extra arguments that will be passed to AVRDUDE on every call</string>
|
|
||||||
</property>
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>Extra arguments used in AVRDUDE.
|
|
||||||
This can be used for providing extra information to AVRDUDE.
|
|
||||||
|
|
||||||
Please only use this if you know what you are doing. There are no error checks and you could cripple your controller.</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true"/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="label_av5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Extra Arguments</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="4">
|
|
||||||
<widget class="QPushButton" name="pushButton_4">
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>Show AVRDUDE help</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Show Help</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="2">
|
|
||||||
<widget class="QComboBox" name="avrdude_port">
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>Communication port to the programmer.
|
|
||||||
</string>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true"/>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">usb</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com3</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com4</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com5</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com6</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com7</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com8</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com9</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com10</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com11</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com12</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com13</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com14</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">com15</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">lpt1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">lpt2</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">lpt3</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">lpt4</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">avrdoper</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">/dev/ttyUSB0</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">/dev/ttyUSB1</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_av4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Port</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label_av1">
|
|
||||||
<property name="text">
|
|
||||||
<string>AVRDUDE Location</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_av3">
|
|
||||||
<property name="text">
|
|
||||||
<string>MCU</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
|
||||||
<widget class="QComboBox" name="avrdude_mcu">
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>CPU of your TX</string>
|
|
||||||
</property>
|
|
||||||
<property name="whatsThis">
|
|
||||||
<string>CPU present on your 9x radio
|
|
||||||
Should be m64 for stock radios
|
|
||||||
m2560 for v4.1 boards</string>
|
|
||||||
</property>
|
|
||||||
<property name="insertPolicy">
|
|
||||||
<enum>QComboBox::InsertAlphabetically</enum>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">m64</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">m128</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">m2560</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="2">
|
|
||||||
<widget class="QComboBox" name="arm_mcu">
|
<widget class="QComboBox" name="arm_mcu">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>CPU of your TX</string>
|
<string>CPU of your TX</string>
|
||||||
|
@ -678,7 +70,27 @@ m2560 for v4.1 boards</string>
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="3" column="2">
|
||||||
|
<widget class="QLineEdit" name="dfu_location">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Location of sam-ba executable</string>
|
||||||
|
</property>
|
||||||
|
<property name="whatsThis">
|
||||||
|
<string>The location of the AVRDUDE executable.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">dfu-util</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_dfu1">
|
||||||
|
<property name="text">
|
||||||
|
<string>DFU-Util Location</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_sb1">
|
<widget class="QLabel" name="label_sb1">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>SAM-BA Location</string>
|
<string>SAM-BA Location</string>
|
||||||
|
@ -688,7 +100,7 @@ m2560 for v4.1 boards</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="2">
|
<item row="0" column="2">
|
||||||
<widget class="QLineEdit" name="samba_location">
|
<widget class="QLineEdit" name="samba_location">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Location of sam-ba executable</string>
|
<string>Location of sam-ba executable</string>
|
||||||
|
@ -701,7 +113,7 @@ m2560 for v4.1 boards</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_sb2">
|
<widget class="QLabel" name="label_sb2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>ARM MCU</string>
|
<string>ARM MCU</string>
|
||||||
|
@ -711,7 +123,7 @@ m2560 for v4.1 boards</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_sb3">
|
<widget class="QLabel" name="label_sb3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Port</string>
|
<string>Port</string>
|
||||||
|
@ -721,7 +133,7 @@ m2560 for v4.1 boards</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="2">
|
<item row="2" column="2">
|
||||||
<widget class="QLineEdit" name="samba_port">
|
<widget class="QLineEdit" name="samba_port">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>sam-ba serial port</string>
|
<string>sam-ba serial port</string>
|
||||||
|
@ -734,14 +146,14 @@ m2560 for v4.1 boards</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_dfu2">
|
<widget class="QLabel" name="label_dfu2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Alternate device</string>
|
<string>Alternate device</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="2">
|
<item row="4" column="2">
|
||||||
<widget class="QLineEdit" name="dfuArgs">
|
<widget class="QLineEdit" name="dfuArgs">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Extra arguments that will be passed to AVRDUDE on every call</string>
|
<string>Extra arguments that will be passed to AVRDUDE on every call</string>
|
||||||
|
@ -757,7 +169,7 @@ Please only use this if you know what you are doing. There are no error checks
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="4">
|
<item row="0" column="4">
|
||||||
<widget class="QPushButton" name="sb_browse">
|
<widget class="QPushButton" name="sb_browse">
|
||||||
<property name="whatsThis">
|
<property name="whatsThis">
|
||||||
<string>Use this button to browse and look for the AVRDUDE executable file.</string>
|
<string>Use this button to browse and look for the AVRDUDE executable file.</string>
|
||||||
|
@ -767,7 +179,7 @@ Please only use this if you know what you are doing. There are no error checks
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="4">
|
<item row="3" column="4">
|
||||||
<widget class="QPushButton" name="dfu_browse">
|
<widget class="QPushButton" name="dfu_browse">
|
||||||
<property name="whatsThis">
|
<property name="whatsThis">
|
||||||
<string>Use this button to browse and look for the AVRDUDE executable file.</string>
|
<string>Use this button to browse and look for the AVRDUDE executable file.</string>
|
||||||
|
@ -777,14 +189,14 @@ Please only use this if you know what you are doing. There are no error checks
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="2">
|
<item row="5" column="2">
|
||||||
<widget class="QCheckBox" name="advCtrChkB">
|
<widget class="QCheckBox" name="advCtrChkB">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Use advanced controls</string>
|
<string>Use advanced controls</string>
|
||||||
|
@ -809,14 +221,6 @@ Please only use this if you know what you are doing. There are no error checks
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>avrdude_location</tabstop>
|
|
||||||
<tabstop>pushButton</tabstop>
|
|
||||||
<tabstop>avrdude_programmer</tabstop>
|
|
||||||
<tabstop>pushButton_3</tabstop>
|
|
||||||
<tabstop>avrdude_mcu</tabstop>
|
|
||||||
<tabstop>avrdude_port</tabstop>
|
|
||||||
<tabstop>avrArgs</tabstop>
|
|
||||||
<tabstop>pushButton_4</tabstop>
|
|
||||||
<tabstop>samba_location</tabstop>
|
<tabstop>samba_location</tabstop>
|
||||||
<tabstop>sb_browse</tabstop>
|
<tabstop>sb_browse</tabstop>
|
||||||
<tabstop>arm_mcu</tabstop>
|
<tabstop>arm_mcu</tabstop>
|
||||||
|
|
|
@ -19,8 +19,6 @@ set(firmwares_SRCS
|
||||||
sensordata.cpp
|
sensordata.cpp
|
||||||
telem_data.cpp
|
telem_data.cpp
|
||||||
afhds3.cpp
|
afhds3.cpp
|
||||||
er9x/er9xeeprom.cpp
|
|
||||||
er9x/er9xinterface.cpp
|
|
||||||
ersky9x/ersky9xeeprom.cpp
|
ersky9x/ersky9xeeprom.cpp
|
||||||
ersky9x/ersky9xinterface.cpp
|
ersky9x/ersky9xinterface.cpp
|
||||||
opentx/opentxeeprom.cpp
|
opentx/opentxeeprom.cpp
|
||||||
|
|
|
@ -25,18 +25,13 @@
|
||||||
// Update: These are now all only used within this class.
|
// Update: These are now all only used within this class.
|
||||||
// External access is only via getEEpromSize() and getFlashSize()
|
// External access is only via getEEpromSize() and getFlashSize()
|
||||||
|
|
||||||
#define EESIZE_STOCK 2048
|
|
||||||
#define EESIZE_M128 4096
|
|
||||||
#define EESIZE_GRUVIN9X 4096
|
|
||||||
#define EESIZE_TARANIS (32*1024)
|
#define EESIZE_TARANIS (32*1024)
|
||||||
#define EESIZE_SKY9X (128*4096)
|
#define EESIZE_SKY9X (128*4096)
|
||||||
#define EESIZE_9XRPRO (128*4096)
|
#define EESIZE_9XRPRO (128*4096)
|
||||||
#define EESIZE_MAX EESIZE_9XRPRO
|
#define EESIZE_MAX EESIZE_9XRPRO
|
||||||
|
|
||||||
// getFlashSize() (and these macros) is only used by radiointerface::getDfuArgs (perhaps can find a better way?)
|
// getFlashSize() (and these macros) is only used by radiointerface::getDfuArgs (perhaps can find a better way?)
|
||||||
#define FSIZE_STOCK (64*1024)
|
|
||||||
#define FSIZE_M128 (128*1024)
|
|
||||||
#define FSIZE_GRUVIN9X (256*1024)
|
|
||||||
#define FSIZE_TARANIS (512*1024)
|
#define FSIZE_TARANIS (512*1024)
|
||||||
#define FSIZE_SKY9X (256*1024)
|
#define FSIZE_SKY9X (256*1024)
|
||||||
#define FSIZE_9XRPRO (512*1024)
|
#define FSIZE_9XRPRO (512*1024)
|
||||||
|
@ -82,12 +77,6 @@ uint32_t Boards::getFourCC(Type board)
|
||||||
case BOARD_AR9X:
|
case BOARD_AR9X:
|
||||||
case BOARD_9XRPRO:
|
case BOARD_9XRPRO:
|
||||||
return 0x3278746F;
|
return 0x3278746F;
|
||||||
case BOARD_MEGA2560:
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
return 0x3178746F;
|
|
||||||
case BOARD_9X_M64:
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return 0;
|
|
||||||
case BOARD_JUMPER_T12:
|
case BOARD_JUMPER_T12:
|
||||||
return 0x3D78746F;
|
return 0x3D78746F;
|
||||||
case BOARD_JUMPER_T16:
|
case BOARD_JUMPER_T16:
|
||||||
|
@ -104,13 +93,6 @@ uint32_t Boards::getFourCC(Type board)
|
||||||
int Boards::getEEpromSize(Board::Type board)
|
int Boards::getEEpromSize(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_9X_M64:
|
|
||||||
return EESIZE_STOCK;
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return EESIZE_M128;
|
|
||||||
case BOARD_MEGA2560:
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
return EESIZE_GRUVIN9X;
|
|
||||||
case BOARD_SKY9X:
|
case BOARD_SKY9X:
|
||||||
return EESIZE_SKY9X;
|
return EESIZE_SKY9X;
|
||||||
case BOARD_9XRPRO:
|
case BOARD_9XRPRO:
|
||||||
|
@ -144,13 +126,6 @@ int Boards::getEEpromSize(Board::Type board)
|
||||||
int Boards::getFlashSize(Type board)
|
int Boards::getFlashSize(Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_9X_M64:
|
|
||||||
return FSIZE_STOCK;
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return FSIZE_M128;
|
|
||||||
case BOARD_MEGA2560:
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
return FSIZE_GRUVIN9X;
|
|
||||||
case BOARD_SKY9X:
|
case BOARD_SKY9X:
|
||||||
return FSIZE_SKY9X;
|
return FSIZE_SKY9X;
|
||||||
case BOARD_9XRPRO:
|
case BOARD_9XRPRO:
|
||||||
|
@ -412,7 +387,7 @@ QString Boards::getAnalogInputName(Board::Type board, int index)
|
||||||
|
|
||||||
index -= getCapability(board, Board::Sticks);
|
index -= getCapability(board, Board::Sticks);
|
||||||
|
|
||||||
if (IS_9X(board) || IS_2560(board) || IS_SKY9X(board)) {
|
if (IS_SKY9X(board)) {
|
||||||
const QString pots[] = {
|
const QString pots[] = {
|
||||||
"P1",
|
"P1",
|
||||||
"P2",
|
"P2",
|
||||||
|
@ -496,14 +471,6 @@ bool Boards::isBoardCompatible(Type board1, Type board2)
|
||||||
QString Boards::getBoardName(Board::Type board)
|
QString Boards::getBoardName(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_9X_M64:
|
|
||||||
return "9X";
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return "9X128";
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
return "Gruvin9x";
|
|
||||||
case BOARD_MEGA2560:
|
|
||||||
return "MEGA2560";
|
|
||||||
case BOARD_TARANIS_X7:
|
case BOARD_TARANIS_X7:
|
||||||
return "Taranis X7/X7S";
|
return "Taranis X7/X7S";
|
||||||
case BOARD_TARANIS_X7_ACCESS:
|
case BOARD_TARANIS_X7_ACCESS:
|
||||||
|
|
|
@ -32,10 +32,6 @@ namespace Board {
|
||||||
enum Type
|
enum Type
|
||||||
{
|
{
|
||||||
BOARD_UNKNOWN = -1,
|
BOARD_UNKNOWN = -1,
|
||||||
BOARD_9X_M64 = 0,
|
|
||||||
BOARD_9X_M128,
|
|
||||||
BOARD_MEGA2560,
|
|
||||||
BOARD_GRUVIN9X,
|
|
||||||
BOARD_SKY9X,
|
BOARD_SKY9X,
|
||||||
BOARD_9XRPRO,
|
BOARD_9XRPRO,
|
||||||
BOARD_AR9X,
|
BOARD_AR9X,
|
||||||
|
@ -191,26 +187,6 @@ class Boards
|
||||||
// temporary aliases for transition period, use Boards class instead.
|
// temporary aliases for transition period, use Boards class instead.
|
||||||
#define getBoardCapability(b__, c__) Boards::getCapability(b__, c__)
|
#define getBoardCapability(b__, c__) Boards::getCapability(b__, c__)
|
||||||
|
|
||||||
inline bool IS_9X(Board::Type board)
|
|
||||||
{
|
|
||||||
return board == Board::BOARD_9X_M64 || board == Board::BOARD_9X_M128;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool IS_STOCK(Board::Type board)
|
|
||||||
{
|
|
||||||
return board == Board::BOARD_9X_M64;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool IS_M128(Board::Type board)
|
|
||||||
{
|
|
||||||
return board == Board::BOARD_9X_M128;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool IS_2560(Board::Type board)
|
|
||||||
{
|
|
||||||
return board == Board::BOARD_GRUVIN9X || board == Board::BOARD_MEGA2560;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool IS_SKY9X(Board::Type board)
|
inline bool IS_SKY9X(Board::Type board)
|
||||||
{
|
{
|
||||||
return board == Board::BOARD_SKY9X || board == Board::BOARD_9XRPRO || board == Board::BOARD_AR9X;
|
return board == Board::BOARD_SKY9X || board == Board::BOARD_9XRPRO || board == Board::BOARD_AR9X;
|
||||||
|
|
|
@ -112,13 +112,10 @@ void CustomFunctionData::populateResetParams(const ModelData * model, QComboBox
|
||||||
{
|
{
|
||||||
int val = 0;
|
int val = 0;
|
||||||
Firmware * firmware = Firmware::getCurrentVariant();
|
Firmware * firmware = Firmware::getCurrentVariant();
|
||||||
Board::Type board = firmware->getBoard();
|
|
||||||
|
|
||||||
b->addItem(tr("Timer1"), val++);
|
b->addItem(tr("Timer1"), val++);
|
||||||
b->addItem(tr("Timer2"), val++);
|
b->addItem(tr("Timer2"), val++);
|
||||||
if (IS_ARM(board)) {
|
b->addItem( tr("Timer3"), val++);
|
||||||
b->addItem( tr("Timer3"), val++);
|
|
||||||
}
|
|
||||||
b->addItem(tr("Flight"), val++);
|
b->addItem(tr("Flight"), val++);
|
||||||
b->addItem(tr("Telemetry"), val++);
|
b->addItem(tr("Telemetry"), val++);
|
||||||
int reCount = firmware->getCapability(RotaryEncoders);
|
int reCount = firmware->getCapability(RotaryEncoders);
|
||||||
|
@ -132,7 +129,7 @@ void CustomFunctionData::populateResetParams(const ModelData * model, QComboBox
|
||||||
if ((int)value < b->count()) {
|
if ((int)value < b->count()) {
|
||||||
b->setCurrentIndex(value);
|
b->setCurrentIndex(value);
|
||||||
}
|
}
|
||||||
if (model && IS_ARM(board)) {
|
if (model) {
|
||||||
for (unsigned i=0; i<CPN_MAX_SENSORS; ++i) {
|
for (unsigned i=0; i<CPN_MAX_SENSORS; ++i) {
|
||||||
if (model->sensorData[i].isAvailable()) {
|
if (model->sensorData[i].isAvailable()) {
|
||||||
RawSource item = RawSource(SOURCE_TYPE_TELEMETRY, 3*i);
|
RawSource item = RawSource(SOURCE_TYPE_TELEMETRY, 3*i);
|
||||||
|
@ -210,14 +207,8 @@ QString CustomFunctionData::paramToString(const ModelData * model) const
|
||||||
case FUNC_ADJUST_GVAR_INCDEC:
|
case FUNC_ADJUST_GVAR_INCDEC:
|
||||||
float val;
|
float val;
|
||||||
QString unit;
|
QString unit;
|
||||||
if (IS_ARM(getCurrentBoard())) {
|
val = param * model->gvarData[func - FuncAdjustGV1].multiplierGet();
|
||||||
val = param * model->gvarData[func - FuncAdjustGV1].multiplierGet();
|
unit = model->gvarData[func - FuncAdjustGV1].unitToString();
|
||||||
unit = model->gvarData[func - FuncAdjustGV1].unitToString();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
val = param;
|
|
||||||
unit = "";
|
|
||||||
}
|
|
||||||
return QString("Increment: %1%2").arg(val).arg(unit);
|
return QString("Increment: %1%2").arg(val).arg(unit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,7 +224,7 @@ QString CustomFunctionData::repeatToString() const
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
unsigned int step = IS_ARM(getCurrentBoard()) ? 1 : 10;
|
unsigned int step = 1;
|
||||||
return tr("repeat(%1s)").arg(step*repeatParam);
|
return tr("repeat(%1s)").arg(step*repeatParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,10 +75,7 @@ void EEPROMInterface::showEepromErrors(QWidget *parent, const QString &title, co
|
||||||
|
|
||||||
if (errors.test(UNSUPPORTED_NEWER_VERSION)) { errorsList << tr("- Eeprom is from a newer version of OpenTX"); }
|
if (errors.test(UNSUPPORTED_NEWER_VERSION)) { errorsList << tr("- Eeprom is from a newer version of OpenTX"); }
|
||||||
if (errors.test(NOT_OPENTX)) { errorsList << tr("- Eeprom is not from OpenTX"); }
|
if (errors.test(NOT_OPENTX)) { errorsList << tr("- Eeprom is not from OpenTX"); }
|
||||||
if (errors.test(NOT_TH9X)) { errorsList << tr("- Eeprom is not from Th9X"); }
|
|
||||||
if (errors.test(NOT_GRUVIN9X)) { errorsList << tr("- Eeprom is not from Gruvin9X"); }
|
|
||||||
if (errors.test(NOT_ERSKY9X)) { errorsList << tr("- Eeprom is not from ErSky9X"); }
|
if (errors.test(NOT_ERSKY9X)) { errorsList << tr("- Eeprom is not from ErSky9X"); }
|
||||||
if (errors.test(NOT_ER9X)) { errorsList << tr("- Eeprom is not from Er9X"); }
|
|
||||||
if (errors.test(WRONG_SIZE)) { errorsList << tr("- Eeprom size is invalid"); }
|
if (errors.test(WRONG_SIZE)) { errorsList << tr("- Eeprom size is invalid"); }
|
||||||
if (errors.test(WRONG_FILE_SYSTEM)) { errorsList << tr("- Eeprom file system is invalid"); }
|
if (errors.test(WRONG_FILE_SYSTEM)) { errorsList << tr("- Eeprom file system is invalid"); }
|
||||||
if (errors.test(UNKNOWN_BOARD)) { errorsList << tr("- Eeprom is from a unknown board"); }
|
if (errors.test(UNKNOWN_BOARD)) { errorsList << tr("- Eeprom is from a unknown board"); }
|
||||||
|
|
|
@ -235,10 +235,7 @@ enum EepromLoadErrors {
|
||||||
WRONG_SIZE,
|
WRONG_SIZE,
|
||||||
WRONG_FILE_SYSTEM,
|
WRONG_FILE_SYSTEM,
|
||||||
NOT_OPENTX,
|
NOT_OPENTX,
|
||||||
NOT_TH9X,
|
|
||||||
NOT_GRUVIN9X,
|
|
||||||
NOT_ERSKY9X,
|
NOT_ERSKY9X,
|
||||||
NOT_ER9X,
|
|
||||||
UNKNOWN_BOARD,
|
UNKNOWN_BOARD,
|
||||||
WRONG_BOARD,
|
WRONG_BOARD,
|
||||||
BACKUP_NOT_SUPPORTED,
|
BACKUP_NOT_SUPPORTED,
|
||||||
|
|
|
@ -110,9 +110,7 @@ GeneralSettings::GeneralSettings()
|
||||||
backlightOffBright = 20;
|
backlightOffBright = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(board)) {
|
speakerVolume = 12;
|
||||||
speakerVolume = 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_JUMPER_T16(board))
|
if (IS_JUMPER_T16(board))
|
||||||
strcpy(bluetoothName, "t16");
|
strcpy(bluetoothName, "t16");
|
||||||
|
|
|
@ -207,36 +207,25 @@ bool ModelData::isEmpty() const
|
||||||
|
|
||||||
void ModelData::setDefaultInputs(const GeneralSettings & settings)
|
void ModelData::setDefaultInputs(const GeneralSettings & settings)
|
||||||
{
|
{
|
||||||
Board::Type board = getCurrentBoard();
|
for (int i = 0; i < CPN_MAX_STICKS; i++) {
|
||||||
if (IS_ARM(board)) {
|
ExpoData * expo = &expoData[i];
|
||||||
for (int i = 0; i < CPN_MAX_STICKS; i++) {
|
expo->chn = i;
|
||||||
ExpoData * expo = &expoData[i];
|
expo->mode = INPUT_MODE_BOTH;
|
||||||
expo->chn = i;
|
expo->srcRaw = settings.getDefaultSource(i);
|
||||||
expo->mode = INPUT_MODE_BOTH;
|
expo->weight = 100;
|
||||||
expo->srcRaw = settings.getDefaultSource(i);
|
strncpy(inputNames[i], Helpers::removeAccents(expo->srcRaw.toString(this)).toLatin1().constData(), sizeof(inputNames[i]) - 1);
|
||||||
expo->weight = 100;
|
|
||||||
strncpy(inputNames[i], Helpers::removeAccents(expo->srcRaw.toString(this)).toLatin1().constData(), sizeof(inputNames[i]) - 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelData::setDefaultMixes(const GeneralSettings & settings)
|
void ModelData::setDefaultMixes(const GeneralSettings & settings)
|
||||||
{
|
{
|
||||||
Board::Type board = getCurrentBoard();
|
setDefaultInputs(settings);
|
||||||
if (IS_ARM(board)) {
|
|
||||||
setDefaultInputs(settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < CPN_MAX_STICKS; i++) {
|
for (int i = 0; i < CPN_MAX_STICKS; i++) {
|
||||||
MixData * mix = &mixData[i];
|
MixData * mix = &mixData[i];
|
||||||
mix->destCh = i + 1;
|
mix->destCh = i + 1;
|
||||||
mix->weight = 100;
|
mix->weight = 100;
|
||||||
if (IS_ARM(board)) {
|
mix->srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i);
|
||||||
mix->srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mix->srcRaw = RawSource(SOURCE_TYPE_STICK, i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,13 +41,10 @@ class RadioDataConversionState;
|
||||||
class RSSIAlarmData {
|
class RSSIAlarmData {
|
||||||
public:
|
public:
|
||||||
RSSIAlarmData() { clear(); }
|
RSSIAlarmData() { clear(); }
|
||||||
unsigned int level[2]; // AVR Only
|
|
||||||
int warning;
|
int warning;
|
||||||
int critical;
|
int critical;
|
||||||
bool disabled;
|
bool disabled;
|
||||||
void clear() {
|
void clear() {
|
||||||
this->level[0] = 2;
|
|
||||||
this->level[1] = 3;
|
|
||||||
this->warning = 45;
|
this->warning = 45;
|
||||||
this->critical = 42;
|
this->critical = 42;
|
||||||
this->disabled = false;
|
this->disabled = false;
|
||||||
|
|
|
@ -721,13 +721,7 @@ class FlightModeField: public TransformedField {
|
||||||
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
|
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
|
||||||
else
|
else
|
||||||
trim = std::max(-500, std::min(500, phase.trim[i]));
|
trim = std::max(-500, std::min(500, phase.trim[i]));
|
||||||
if (board == BOARD_9X_M64 || (board == BOARD_9X_M128 && version >= 215)) {
|
trimBase[i] = trim;
|
||||||
trimBase[i] = trim >> 2;
|
|
||||||
trimExt[i] = (trim & 0x03);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
trimBase[i] = trim;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -751,11 +745,7 @@ class FlightModeField: public TransformedField {
|
||||||
phase.trim[i] = 0;
|
phase.trim[i] = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int trim;
|
int trim = trimBase[i];
|
||||||
if (board == BOARD_9X_M64 || (board == BOARD_9X_M128 && version >= 215))
|
|
||||||
trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
|
|
||||||
else
|
|
||||||
trim = trimBase[i];
|
|
||||||
if (trim > 500) {
|
if (trim > 500) {
|
||||||
phase.trimRef[i] = trim - 501;
|
phase.trimRef[i] = trim - 501;
|
||||||
if (phase.trimRef[i] >= index)
|
if (phase.trimRef[i] >= index)
|
||||||
|
|
|
@ -37,9 +37,6 @@
|
||||||
#define TARANIS_X9LITES_VARIANT 0x0801
|
#define TARANIS_X9LITES_VARIANT 0x0801
|
||||||
#define JUMPER_T12_VARIANT 0x4001
|
#define JUMPER_T12_VARIANT 0x4001
|
||||||
|
|
||||||
#define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT)
|
|
||||||
#define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS)
|
|
||||||
|
|
||||||
class OpenTxGeneralData: public TransformedField {
|
class OpenTxGeneralData: public TransformedField {
|
||||||
public:
|
public:
|
||||||
OpenTxGeneralData(GeneralSettings & generalData, Board::Type board, unsigned int version, unsigned int variant=0);
|
OpenTxGeneralData(GeneralSettings & generalData, Board::Type board, unsigned int version, unsigned int variant=0);
|
||||||
|
|
|
@ -58,14 +58,6 @@ OpenTxEepromInterface::~OpenTxEepromInterface()
|
||||||
const char * OpenTxEepromInterface::getName()
|
const char * OpenTxEepromInterface::getName()
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_9X_M64:
|
|
||||||
return "OpenTX for 9X board";
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return "OpenTX for M128 / 9X board";
|
|
||||||
case BOARD_MEGA2560:
|
|
||||||
return "OpenTX for MEGA2560 board";
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
return "OpenTX for Gruvin9x board / 9X";
|
|
||||||
case BOARD_JUMPER_T12:
|
case BOARD_JUMPER_T12:
|
||||||
return "OpenTX for Jumper T12";
|
return "OpenTX for Jumper T12";
|
||||||
case BOARD_JUMPER_T16:
|
case BOARD_JUMPER_T16:
|
||||||
|
@ -280,16 +272,7 @@ unsigned long OpenTxEepromInterface::load(RadioData &radioData, const uint8_t *
|
||||||
|
|
||||||
uint8_t OpenTxEepromInterface::getLastDataVersion(Board::Type board)
|
uint8_t OpenTxEepromInterface::getLastDataVersion(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
return 219;
|
||||||
case BOARD_9X_M64:
|
|
||||||
return 216;
|
|
||||||
case BOARD_GRUVIN9X:
|
|
||||||
case BOARD_MEGA2560:
|
|
||||||
case BOARD_9X_M128:
|
|
||||||
return 217;
|
|
||||||
default:
|
|
||||||
return 219;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenTxEepromInterface::showErrors(const QString & title, const QStringList & errors)
|
void OpenTxEepromInterface::showErrors(const QString & title, const QStringList & errors)
|
||||||
|
@ -325,10 +308,7 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
|
||||||
|
|
||||||
efile->EeFsCreate(eeprom, size, board, version);
|
efile->EeFsCreate(eeprom, size, board, version);
|
||||||
|
|
||||||
if (board == BOARD_9X_M128) {
|
if (IS_TARANIS_X9E(board)) {
|
||||||
variant |= M128_VARIANT;
|
|
||||||
}
|
|
||||||
else if (IS_TARANIS_X9E(board)) {
|
|
||||||
variant |= TARANIS_X9E_VARIANT;
|
variant |= TARANIS_X9E_VARIANT;
|
||||||
}
|
}
|
||||||
else if (IS_TARANIS_X9LITES(board)) {
|
else if (IS_TARANIS_X9LITES(board)) {
|
||||||
|
@ -445,43 +425,26 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case Models:
|
case Models:
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 0;
|
return 0;
|
||||||
else if (IS_ARM(board))
|
else
|
||||||
return 60;
|
return 60;
|
||||||
else if (board == BOARD_9X_M128)
|
|
||||||
return 30;
|
|
||||||
else if (IS_2560(board))
|
|
||||||
return 30;
|
|
||||||
else
|
|
||||||
return 16;
|
|
||||||
case Imperial:
|
case Imperial:
|
||||||
if (IS_ARM(board))
|
return 0;
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return id.contains("imperial") ? 1 : 0;
|
|
||||||
case ModelImage:
|
case ModelImage:
|
||||||
return (board == BOARD_TARANIS_X9D || IS_TARANIS_PLUS(board) || board == BOARD_TARANIS_X9DP_2019 || IS_FAMILY_HORUS_OR_T16(board));
|
return (board == BOARD_TARANIS_X9D || IS_TARANIS_PLUS(board) || board == BOARD_TARANIS_X9DP_2019 || IS_FAMILY_HORUS_OR_T16(board));
|
||||||
case HasBeeper:
|
case HasBeeper:
|
||||||
return (!IS_ARM(board));
|
return false;
|
||||||
case HasPxxCountry:
|
case HasPxxCountry:
|
||||||
return 1;
|
return 1;
|
||||||
case HasGeneralUnits:
|
case HasGeneralUnits:
|
||||||
if (IS_ARM(board))
|
return true;
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
case HasNegAndSwitches:
|
case HasNegAndSwitches:
|
||||||
return IS_ARM(board);
|
return true;
|
||||||
case PPMExtCtrl:
|
case PPMExtCtrl:
|
||||||
return 1;
|
return 1;
|
||||||
case PPMFrameLength:
|
case PPMFrameLength:
|
||||||
return 40;
|
return 40;
|
||||||
case FlightModes:
|
case FlightModes:
|
||||||
if (IS_ARM(board))
|
return 9;
|
||||||
return 9;
|
|
||||||
else if (IS_2560(board))
|
|
||||||
return 6;
|
|
||||||
else
|
|
||||||
return 5;
|
|
||||||
case FlightModesHaveFades:
|
case FlightModesHaveFades:
|
||||||
return 1;
|
return 1;
|
||||||
case Heli:
|
case Heli:
|
||||||
|
@ -493,7 +456,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
if (IS_HORUS_OR_TARANIS(board))
|
if (IS_HORUS_OR_TARANIS(board))
|
||||||
return id.contains("nogvars") ? 0 : 9;
|
return id.contains("nogvars") ? 0 : 9;
|
||||||
else if (id.contains("gvars"))
|
else if (id.contains("gvars"))
|
||||||
return IS_ARM(board) ? 9 : 5;
|
return 9;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
case ModelName:
|
case ModelName:
|
||||||
|
@ -501,66 +464,48 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case FlightModesName:
|
case FlightModesName:
|
||||||
return (IS_HORUS_OR_TARANIS(board) ? 10 : 6);
|
return (IS_HORUS_OR_TARANIS(board) ? 10 : 6);
|
||||||
case GvarsName:
|
case GvarsName:
|
||||||
return (IS_9X(board) ? 0 : 3);
|
return 3;
|
||||||
case GvarsInCS:
|
case GvarsInCS:
|
||||||
case HasFAIMode:
|
case HasFAIMode:
|
||||||
return 1;
|
return 1;
|
||||||
case GvarsAreNamed:
|
case GvarsAreNamed:
|
||||||
case GvarsFlightModes:
|
case GvarsFlightModes:
|
||||||
return ((IS_ARM(board) || IS_2560(board)) ? 1 : 0);
|
return 1;
|
||||||
case Mixes:
|
case Mixes:
|
||||||
return (IS_ARM(board) ? 64 : 32);
|
return 64;
|
||||||
case OffsetWeight:
|
case OffsetWeight:
|
||||||
return (IS_ARM(board) ? 500 : 245);
|
return 500;
|
||||||
case Timers:
|
case Timers:
|
||||||
return (IS_ARM(board) ? 3 : 2);
|
return 3;
|
||||||
case TimersName:
|
case TimersName:
|
||||||
if (HAS_LARGE_LCD(board))
|
if (HAS_LARGE_LCD(board))
|
||||||
return 8;
|
return 8;
|
||||||
else if (IS_ARM(board))
|
else
|
||||||
return 3;
|
return 3;
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
case PermTimers:
|
case PermTimers:
|
||||||
return (IS_2560(board) || IS_ARM(board));
|
return true;
|
||||||
case CustomFunctions:
|
case CustomFunctions:
|
||||||
if (IS_ARM(board))
|
return 64;
|
||||||
return 64;
|
|
||||||
else if (IS_2560(board) || board == BOARD_9X_M128)
|
|
||||||
return 24;
|
|
||||||
else
|
|
||||||
return 16;
|
|
||||||
case SafetyChannelCustomFunction:
|
case SafetyChannelCustomFunction:
|
||||||
return id.contains("nooverridech") ? 0 : 1;
|
return id.contains("nooverridech") ? 0 : 1;
|
||||||
case LogicalSwitches:
|
case LogicalSwitches:
|
||||||
if (IS_ARM(board))
|
return 64;
|
||||||
return 64;
|
|
||||||
else
|
|
||||||
return 12;
|
|
||||||
case CustomAndSwitches:
|
case CustomAndSwitches:
|
||||||
if (IS_ARM(board))
|
return getCapability(LogicalSwitches);
|
||||||
return getCapability(LogicalSwitches);
|
|
||||||
else
|
|
||||||
return 15/*4bits*/- 9/*sw positions*/;
|
|
||||||
case LogicalSwitchesExt:
|
case LogicalSwitchesExt:
|
||||||
return (IS_ARM(board) ? true : false);
|
return true;
|
||||||
case RotaryEncoders:
|
case RotaryEncoders:
|
||||||
if (board == BOARD_GRUVIN9X)
|
|
||||||
return 2;
|
|
||||||
else if (IS_SKY9X(board))
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
return 0;
|
||||||
case Outputs:
|
case Outputs:
|
||||||
return (IS_ARM(board) ? 32 : 16);
|
return 32;
|
||||||
case NumCurvePoints:
|
case NumCurvePoints:
|
||||||
return (IS_ARM(board) ? 512 : 104);
|
return 512;
|
||||||
case VoicesAsNumbers:
|
case VoicesAsNumbers:
|
||||||
return (IS_ARM(board) ? 0 : 1);
|
return 0;
|
||||||
case VoicesMaxLength:
|
case VoicesMaxLength:
|
||||||
return (IS_ARM(board) ? (IS_TARANIS_X9(board) ? 8 : 6) : 0);
|
return (IS_TARANIS_X9(board) ? 8 : 6);
|
||||||
case MultiLangVoice:
|
case MultiLangVoice:
|
||||||
return (IS_ARM(board) ? 1 : 0);
|
return 1;
|
||||||
case SoundPitch:
|
case SoundPitch:
|
||||||
return 1;
|
return 1;
|
||||||
case Haptic:
|
case Haptic:
|
||||||
|
@ -571,7 +516,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
case MaxVolume:
|
case MaxVolume:
|
||||||
return (IS_ARM(board) ? 23 : 7);
|
return 23;
|
||||||
case MaxContrast:
|
case MaxContrast:
|
||||||
if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board))
|
if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board))
|
||||||
return 30;
|
return 30;
|
||||||
|
@ -583,7 +528,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
else
|
else
|
||||||
return 10;
|
return 10;
|
||||||
case HasSoundMixer:
|
case HasSoundMixer:
|
||||||
return (IS_ARM(board) ? 1 : 0);
|
return 1;
|
||||||
case ExtraInputs:
|
case ExtraInputs:
|
||||||
return 1;
|
return 1;
|
||||||
case TrimsRange:
|
case TrimsRange:
|
||||||
|
@ -593,29 +538,26 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case Simulation:
|
case Simulation:
|
||||||
return 1;
|
return 1;
|
||||||
case NumCurves:
|
case NumCurves:
|
||||||
return (HAS_LARGE_LCD(board) ? 32 : (IS_ARM(board) ? 16 : 8));
|
return (HAS_LARGE_LCD(board) ? 32 : 16);
|
||||||
case HasMixerNames:
|
case HasMixerNames:
|
||||||
return (IS_ARM(board) ? (IS_TARANIS_X9(board) ? 8 : 6) : false);
|
return (IS_TARANIS_X9(board) ? 8 : 6);
|
||||||
case HasExpoNames:
|
case HasExpoNames:
|
||||||
return (IS_ARM(board) ? (IS_TARANIS_X9(board) ? 8 : 6) : false);
|
return (IS_TARANIS_X9(board) ? 8 : 6);
|
||||||
case HasNoExpo:
|
case HasNoExpo:
|
||||||
return (IS_HORUS_OR_TARANIS(board) ? false : true);
|
return (IS_HORUS_OR_TARANIS(board) ? false : true);
|
||||||
case ChannelsName:
|
case ChannelsName:
|
||||||
return (IS_ARM(board) ? (HAS_LARGE_LCD(board) ? 6 : 4) : 0);
|
return (HAS_LARGE_LCD(board) ? 6 : 4);
|
||||||
case HasCvNames:
|
case HasCvNames:
|
||||||
return (IS_ARM(board) ? 1 : 0);
|
return 1;
|
||||||
case Telemetry:
|
case Telemetry:
|
||||||
if (IS_2560(board) || IS_ARM(board) || id.contains("frsky") || id.contains("telemetrez"))
|
return 1;
|
||||||
return TM_HASTELEMETRY | TM_HASOFFSET | TM_HASWSHH;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
case TelemetryBars:
|
case TelemetryBars:
|
||||||
return 1;
|
return 1;
|
||||||
case TelemetryCustomScreens:
|
case TelemetryCustomScreens:
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return IS_ARM(board) ? 4 : 2;
|
return 4;
|
||||||
case TelemetryCustomScreensBars:
|
case TelemetryCustomScreensBars:
|
||||||
return (getCapability(TelemetryCustomScreens) ? 4 : 0);
|
return (getCapability(TelemetryCustomScreens) ? 4 : 0);
|
||||||
case TelemetryCustomScreensLines:
|
case TelemetryCustomScreensLines:
|
||||||
|
@ -627,7 +569,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case TelemetryUnits:
|
case TelemetryUnits:
|
||||||
return 0;
|
return 0;
|
||||||
case TelemetryMaxMultiplier:
|
case TelemetryMaxMultiplier:
|
||||||
return (IS_ARM(board) ? 32 : 8);
|
return 32;
|
||||||
case PPMCenter:
|
case PPMCenter:
|
||||||
return (IS_HORUS_OR_TARANIS(board) ? 500 : (id.contains("ppmca") ? 125 : 0));
|
return (IS_HORUS_OR_TARANIS(board) ? 500 : (id.contains("ppmca") ? 125 : 0));
|
||||||
case PPMUnitMicroseconds:
|
case PPMUnitMicroseconds:
|
||||||
|
@ -639,11 +581,11 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case HasVario:
|
case HasVario:
|
||||||
return 1;
|
return 1;
|
||||||
case HasVarioSink:
|
case HasVarioSink:
|
||||||
return ((IS_2560(board) || IS_ARM(board)) ? true : false);
|
return true;
|
||||||
case HasFailsafe:
|
case HasFailsafe:
|
||||||
return (IS_ARM(board) ? 32 : 0);
|
return 32;
|
||||||
case NumModules:
|
case NumModules:
|
||||||
return (IS_ARM(board) ? 2 : 1);
|
return 2;
|
||||||
case NumFirstUsableModule:
|
case NumFirstUsableModule:
|
||||||
return (IS_JUMPER_T12(board) ? 1 : 0);
|
return (IS_JUMPER_T12(board) ? 1 : 0);
|
||||||
case HasModuleR9MFlex:
|
case HasModuleR9MFlex:
|
||||||
|
@ -651,23 +593,23 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case HasModuleR9MMini:
|
case HasModuleR9MMini:
|
||||||
return IS_TARANIS_XLITE(board) && !id.contains("stdr9m");
|
return IS_TARANIS_XLITE(board) && !id.contains("stdr9m");
|
||||||
case HasPPMStart:
|
case HasPPMStart:
|
||||||
return (IS_ARM(board) ? true : false);
|
return true;
|
||||||
case HastxCurrentCalibration:
|
case HastxCurrentCalibration:
|
||||||
return (IS_SKY9X(board) ? true : false);
|
return (IS_SKY9X(board) ? true : false);
|
||||||
case HasVolume:
|
case HasVolume:
|
||||||
return (IS_ARM(board) ? true : false);
|
return true;
|
||||||
case HasBrightness:
|
case HasBrightness:
|
||||||
return (IS_ARM(board) ? true : false);
|
return true;
|
||||||
case PerModelTimers:
|
case PerModelTimers:
|
||||||
return 1;
|
return 1;
|
||||||
case SlowScale:
|
case SlowScale:
|
||||||
return (IS_ARM(board) ? 10 : 2);
|
return 10;
|
||||||
case SlowRange:
|
case SlowRange:
|
||||||
return (IS_ARM(board) ? 250 : 15);
|
return 250;
|
||||||
case CSFunc:
|
case CSFunc:
|
||||||
return 18;
|
return 18;
|
||||||
case HasSDLogs:
|
case HasSDLogs:
|
||||||
return ((IS_2560(board) || IS_ARM(board)) ? true : false);
|
return true;
|
||||||
case LcdWidth:
|
case LcdWidth:
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 480;
|
return 480;
|
||||||
|
@ -694,19 +636,19 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case GetThrSwitch:
|
case GetThrSwitch:
|
||||||
return (IS_HORUS_OR_TARANIS(board) ? SWITCH_SF1 : SWITCH_THR);
|
return (IS_HORUS_OR_TARANIS(board) ? SWITCH_SF1 : SWITCH_THR);
|
||||||
case HasDisplayText:
|
case HasDisplayText:
|
||||||
return IS_ARM(board) ? 1 : 0;
|
return 1;
|
||||||
case HasTopLcd:
|
case HasTopLcd:
|
||||||
return IS_TARANIS_X9E(board) ? 1 : 0;
|
return IS_TARANIS_X9E(board) ? 1 : 0;
|
||||||
case GlobalFunctions:
|
case GlobalFunctions:
|
||||||
return IS_ARM(board) ? 64 : 0;
|
return 64;
|
||||||
case VirtualInputs:
|
case VirtualInputs:
|
||||||
return IS_ARM(board) ? 32 : 0;
|
return 32;
|
||||||
case InputsLength:
|
case InputsLength:
|
||||||
return HAS_LARGE_LCD(board) ? 4 : 3;
|
return HAS_LARGE_LCD(board) ? 4 : 3;
|
||||||
case TrainerInputs:
|
case TrainerInputs:
|
||||||
return IS_ARM(board) ? 16 : 8;
|
return 16;
|
||||||
case RtcTime:
|
case RtcTime:
|
||||||
return IS_ARM(board) || IS_2560(board) ? 1 : 0;
|
return 1;
|
||||||
case LuaScripts:
|
case LuaScripts:
|
||||||
return IS_HORUS_OR_TARANIS(board) && id.contains("lua") ? 7 : 0;
|
return IS_HORUS_OR_TARANIS(board) && id.contains("lua") ? 7 : 0;
|
||||||
case LuaInputsPerScript:
|
case LuaInputsPerScript:
|
||||||
|
@ -715,17 +657,13 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
return IS_HORUS_OR_TARANIS(board) ? 6 : 0;
|
return IS_HORUS_OR_TARANIS(board) ? 6 : 0;
|
||||||
case LimitsPer1000:
|
case LimitsPer1000:
|
||||||
case EnhancedCurves:
|
case EnhancedCurves:
|
||||||
return IS_ARM(board);
|
return 1;
|
||||||
case HasFasOffset:
|
case HasFasOffset:
|
||||||
return (IS_STOCK(board) ? false : true);
|
return true;
|
||||||
case HasMahPersistent:
|
case HasMahPersistent:
|
||||||
return (IS_ARM(board) ? true : false);
|
return true;
|
||||||
case SimulatorVariant:
|
case SimulatorVariant:
|
||||||
if (board == BOARD_9X_M64)
|
if (IS_TARANIS_X9E(board))
|
||||||
return SIMU_STOCK_VARIANTS;
|
|
||||||
else if (board == BOARD_9X_M128)
|
|
||||||
return SIMU_M128_VARIANTS;
|
|
||||||
else if (IS_TARANIS_X9E(board))
|
|
||||||
return TARANIS_X9E_VARIANT;
|
return TARANIS_X9E_VARIANT;
|
||||||
else if (IS_TARANIS_X9LITES(board))
|
else if (IS_TARANIS_X9LITES(board))
|
||||||
return TARANIS_X9LITES_VARIANT;
|
return TARANIS_X9LITES_VARIANT;
|
||||||
|
@ -744,7 +682,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case MavlinkTelemetry:
|
case MavlinkTelemetry:
|
||||||
return id.contains("mavlink") ? 1 : 0;
|
return id.contains("mavlink") ? 1 : 0;
|
||||||
case SportTelemetry:
|
case SportTelemetry:
|
||||||
return IS_ARM(board) ? 1 : 0;
|
return 1;
|
||||||
case HasInputDiff:
|
case HasInputDiff:
|
||||||
case HasMixerExpo:
|
case HasMixerExpo:
|
||||||
return (IS_HORUS_OR_TARANIS(board) ? true : false);
|
return (IS_HORUS_OR_TARANIS(board) ? true : false);
|
||||||
|
@ -777,10 +715,8 @@ QTime OpenTxFirmware::getMaxTimerStart()
|
||||||
{
|
{
|
||||||
if (IS_HORUS_OR_TARANIS(board))
|
if (IS_HORUS_OR_TARANIS(board))
|
||||||
return QTime(23, 59, 59);
|
return QTime(23, 59, 59);
|
||||||
else if (IS_ARM(board))
|
|
||||||
return QTime(8, 59, 59);
|
|
||||||
else
|
else
|
||||||
return QTime(0, 59, 59);
|
return QTime(8, 59, 59);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
|
bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
|
||||||
|
@ -947,14 +883,9 @@ EepromLoadErrors OpenTxEepromInterface::checkVersion(unsigned int version)
|
||||||
// M128 revert because too much RAM used!
|
// M128 revert because too much RAM used!
|
||||||
case 216:
|
case 216:
|
||||||
// A lot of things (first github release)
|
// A lot of things (first github release)
|
||||||
if (IS_2560(board) || IS_M128(board)) {
|
|
||||||
return OLD_VERSION;
|
|
||||||
}
|
|
||||||
case 217:
|
case 217:
|
||||||
// 3 logical switches removed on M128 / gruvin9x boards
|
// 3 logical switches removed on M128 / gruvin9x boards
|
||||||
if (IS_ARM(board)) {
|
|
||||||
return OLD_VERSION;
|
return OLD_VERSION;
|
||||||
}
|
|
||||||
case 218:
|
case 218:
|
||||||
// ACCESS
|
// ACCESS
|
||||||
// switches add for X7/X10/X12S
|
// switches add for X7/X10/X12S
|
||||||
|
@ -974,21 +905,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;
|
bool variantError = false;
|
||||||
if (board == BOARD_9X_M128 && !(variant & M128_VARIANT)) {
|
if (IS_TARANIS_X9E(board)) {
|
||||||
if (version == 212) {
|
|
||||||
uint8_t tmp[1000];
|
|
||||||
for (int i = 1; i < 31; i++) {
|
|
||||||
efile->openRd(i);
|
|
||||||
int sz = efile->readRlc2(tmp, sizeof(tmp));
|
|
||||||
if (sz == 849) {
|
|
||||||
qWarning() << " warning: M128 variant not set (but model size seems ok)";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
variantError = true;
|
|
||||||
}
|
|
||||||
else if (IS_TARANIS_X9E(board)) {
|
|
||||||
if (variant != TARANIS_X9E_VARIANT) {
|
if (variant != TARANIS_X9E_VARIANT) {
|
||||||
variantError = true;
|
variantError = true;
|
||||||
}
|
}
|
||||||
|
@ -1080,9 +997,6 @@ unsigned long OpenTxEepromInterface::loadBackup(RadioData &radioData, const uint
|
||||||
case 0x32:
|
case 0x32:
|
||||||
backupBoard = BOARD_SKY9X;
|
backupBoard = BOARD_SKY9X;
|
||||||
break;
|
break;
|
||||||
case 0x31:
|
|
||||||
backupBoard = BOARD_GRUVIN9X;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
dbg << " unknown board";
|
dbg << " unknown board";
|
||||||
errors.set(UNKNOWN_BOARD);
|
errors.set(UNKNOWN_BOARD);
|
||||||
|
@ -1379,14 +1293,6 @@ void registerOpenTxFirmwares()
|
||||||
addOpenTxArm9xOptions(firmware);
|
addOpenTxArm9xOptions(firmware);
|
||||||
registerOpenTxFirmware(firmware);
|
registerOpenTxFirmware(firmware);
|
||||||
|
|
||||||
// These are kept only for import purposes, marked as deprecated to hide from UI.
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr", Firmware::tr("Turnigy 9XR"), BOARD_9X_M64), true);
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr128", Firmware::tr("Turnigy 9XR with m128 chip"), BOARD_9X_M128), true);
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-9x", Firmware::tr("9X with stock board"), BOARD_9X_M64), true);
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-9x128", Firmware::tr("9X with stock board and m128 chip"), BOARD_9X_M128), true);
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-gruvin9x", Firmware::tr("9X with Gruvin9x board"), BOARD_GRUVIN9X), true);
|
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-mega2560", Firmware::tr("DIY MEGA2560 radio"), BOARD_MEGA2560), true);
|
|
||||||
|
|
||||||
Firmware::setDefaultVariant(Firmware::getFirmwareForId("opentx-x9d+"));
|
Firmware::setDefaultVariant(Firmware::getFirmwareForId("opentx-x9d+"));
|
||||||
Firmware::setCurrentVariant(Firmware::getDefaultVariant());
|
Firmware::setCurrentVariant(Firmware::getDefaultVariant());
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,7 @@
|
||||||
|
|
||||||
float RawSourceRange::getValue(int value)
|
float RawSourceRange::getValue(int value)
|
||||||
{
|
{
|
||||||
if (IS_ARM(getCurrentBoard()))
|
return float(value) * step;
|
||||||
return float(value) * step;
|
|
||||||
else
|
|
||||||
return min + float(value) * step;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,11 +45,10 @@ RawSourceRange RawSource::getRange(const ModelData * model, const GeneralSetting
|
||||||
RawSourceRange result;
|
RawSourceRange result;
|
||||||
|
|
||||||
Firmware * firmware = Firmware::getCurrentVariant();
|
Firmware * firmware = Firmware::getCurrentVariant();
|
||||||
Board::Type board = firmware->getBoard();
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SOURCE_TYPE_TELEMETRY:
|
case SOURCE_TYPE_TELEMETRY:
|
||||||
if (IS_ARM(board)) {
|
{
|
||||||
div_t qr = div(index, 3);
|
div_t qr = div(index, 3);
|
||||||
const SensorData & sensor = model->sensorData[qr.quot];
|
const SensorData & sensor = model->sensorData[qr.quot];
|
||||||
if (sensor.prec == 2)
|
if (sensor.prec == 2)
|
||||||
|
@ -65,192 +61,8 @@ RawSourceRange RawSource::getRange(const ModelData * model, const GeneralSetting
|
||||||
result.max = +30000 * result.step;
|
result.max = +30000 * result.step;
|
||||||
result.decimals = sensor.prec;
|
result.decimals = sensor.prec;
|
||||||
result.unit = sensor.unitString();
|
result.unit = sensor.unitString();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
result.offset = -DBL_MAX;
|
|
||||||
|
|
||||||
switch (index) {
|
|
||||||
case TELEMETRY_SOURCE_TX_BATT:
|
|
||||||
result.step = 0.1;
|
|
||||||
result.decimals = 1;
|
|
||||||
result.max = 25.5;
|
|
||||||
result.unit = tr("V");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_TX_TIME:
|
|
||||||
result.step = 60;
|
|
||||||
result.max = 24 * 60 * result.step - 60; // 23:59:00 with 1-minute resolution
|
|
||||||
result.unit = tr("s");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_TIMER1:
|
|
||||||
case TELEMETRY_SOURCE_TIMER2:
|
|
||||||
case TELEMETRY_SOURCE_TIMER3:
|
|
||||||
result.step = 5;
|
|
||||||
result.max = 255 * result.step;
|
|
||||||
result.unit = tr("s");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_RSSI_TX:
|
|
||||||
case TELEMETRY_SOURCE_RSSI_RX:
|
|
||||||
result.max = 100;
|
|
||||||
result.offset = 128;
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_A1_MIN:
|
|
||||||
case TELEMETRY_SOURCE_A2_MIN:
|
|
||||||
case TELEMETRY_SOURCE_A3_MIN:
|
|
||||||
case TELEMETRY_SOURCE_A4_MIN:
|
|
||||||
if (model) result = model->frsky.channels[index-TELEMETRY_SOURCE_A1_MIN].getRange();
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_A1:
|
|
||||||
case TELEMETRY_SOURCE_A2:
|
|
||||||
case TELEMETRY_SOURCE_A3:
|
|
||||||
case TELEMETRY_SOURCE_A4:
|
|
||||||
if (model) result = model->frsky.channels[index-TELEMETRY_SOURCE_A1].getRange();
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_ALT:
|
|
||||||
case TELEMETRY_SOURCE_ALT_MIN:
|
|
||||||
case TELEMETRY_SOURCE_ALT_MAX:
|
|
||||||
case TELEMETRY_SOURCE_GPS_ALT:
|
|
||||||
result.step = 8;
|
|
||||||
result.min = -500;
|
|
||||||
result.max = 1540;
|
|
||||||
if (firmware->getCapability(Imperial) || settings.imperial) {
|
|
||||||
result.step = (result.step * 105) / 32;
|
|
||||||
result.min = (result.min * 105) / 32;
|
|
||||||
result.max = (result.max * 105) / 32;
|
|
||||||
result.unit = tr("ft");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result.unit = tr("m");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_T1:
|
|
||||||
case TELEMETRY_SOURCE_T1_MAX:
|
|
||||||
case TELEMETRY_SOURCE_T2:
|
|
||||||
case TELEMETRY_SOURCE_T2_MAX:
|
|
||||||
result.min = -30;
|
|
||||||
result.max = 225;
|
|
||||||
result.unit = tr("°C");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_HDG:
|
|
||||||
result.step = 2;
|
|
||||||
result.max = 360;
|
|
||||||
result.offset = 256;
|
|
||||||
result.unit = tr("°");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_RPM:
|
|
||||||
case TELEMETRY_SOURCE_RPM_MAX:
|
|
||||||
result.step = 50;
|
|
||||||
result.max = 12750;
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_FUEL:
|
|
||||||
result.max = 100;
|
|
||||||
result.unit = tr("%");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_ASPEED:
|
|
||||||
case TELEMETRY_SOURCE_ASPEED_MAX:
|
|
||||||
result.decimals = 1;
|
|
||||||
result.step = 2.0;
|
|
||||||
result.max = (2*255);
|
|
||||||
if (firmware->getCapability(Imperial) || settings.imperial) {
|
|
||||||
result.step *= 1.150779;
|
|
||||||
result.max *= 1.150779;
|
|
||||||
result.unit = tr("mph");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result.step *= 1.852;
|
|
||||||
result.max *= 1.852;
|
|
||||||
result.unit = tr("km/h");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_SPEED:
|
|
||||||
case TELEMETRY_SOURCE_SPEED_MAX:
|
|
||||||
result.step = 2;
|
|
||||||
result.max = (2*255);
|
|
||||||
if (firmware->getCapability(Imperial) || settings.imperial) {
|
|
||||||
result.step *= 1.150779;
|
|
||||||
result.max *= 1.150779;
|
|
||||||
result.unit = tr("mph");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result.step *= 1.852;
|
|
||||||
result.max *= 1.852;
|
|
||||||
result.unit = tr("km/h");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_VERTICAL_SPEED:
|
|
||||||
result.step = 0.1;
|
|
||||||
result.min = -12.5;
|
|
||||||
result.max = 13.0;
|
|
||||||
result.decimals = 1;
|
|
||||||
result.unit = tr("m/s");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_DTE:
|
|
||||||
result.max = 30000;
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_DIST:
|
|
||||||
case TELEMETRY_SOURCE_DIST_MAX:
|
|
||||||
result.step = 8;
|
|
||||||
result.max = 2040;
|
|
||||||
result.unit = tr("m");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_CELL:
|
|
||||||
case TELEMETRY_SOURCE_CELL_MIN:
|
|
||||||
result.step = 0.02;
|
|
||||||
result.max = 5.1;
|
|
||||||
result.decimals = 2;
|
|
||||||
result.unit = tr("V");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_CELLS_SUM:
|
|
||||||
case TELEMETRY_SOURCE_CELLS_MIN:
|
|
||||||
case TELEMETRY_SOURCE_VFAS:
|
|
||||||
case TELEMETRY_SOURCE_VFAS_MIN:
|
|
||||||
result.step = 0.1;
|
|
||||||
result.max = 25.5;
|
|
||||||
result.decimals = 1;
|
|
||||||
result.unit = tr("V");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_CURRENT:
|
|
||||||
case TELEMETRY_SOURCE_CURRENT_MAX:
|
|
||||||
result.step = 0.5;
|
|
||||||
result.max = 127.5;
|
|
||||||
result.decimals = 1;
|
|
||||||
result.unit = tr("A");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_CONSUMPTION:
|
|
||||||
result.step = 100;
|
|
||||||
result.max = 25500;
|
|
||||||
result.unit = tr("mAh");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_POWER:
|
|
||||||
case TELEMETRY_SOURCE_POWER_MAX:
|
|
||||||
result.step = 5;
|
|
||||||
result.max = 1275;
|
|
||||||
result.unit = tr("W");
|
|
||||||
break;
|
|
||||||
case TELEMETRY_SOURCE_ACCX:
|
|
||||||
case TELEMETRY_SOURCE_ACCY:
|
|
||||||
case TELEMETRY_SOURCE_ACCZ:
|
|
||||||
result.step = 0.01;
|
|
||||||
result.decimals = 2;
|
|
||||||
result.max = 2.55;
|
|
||||||
result.min = 0;
|
|
||||||
result.unit = tr("g");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
result.max = 125;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.offset == -DBL_MAX) {
|
|
||||||
result.offset = result.max - (127*result.step);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & (RANGE_DELTA_FUNCTION | RANGE_ABS_FUNCTION)) {
|
|
||||||
result.offset = 0;
|
|
||||||
result.min = result.step * -127;
|
|
||||||
result.max = result.step * 127;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOURCE_TYPE_LUA_OUTPUT:
|
case SOURCE_TYPE_LUA_OUTPUT:
|
||||||
result.max = 30000;
|
result.max = 30000;
|
||||||
|
@ -414,7 +226,7 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
|
||||||
return CHECK_IN_ARRAY(special, index);
|
return CHECK_IN_ARRAY(special, index);
|
||||||
|
|
||||||
case SOURCE_TYPE_TELEMETRY:
|
case SOURCE_TYPE_TELEMETRY:
|
||||||
if (IS_ARM(board)) {
|
{
|
||||||
div_t qr = div(index, 3);
|
div_t qr = div(index, 3);
|
||||||
if (model)
|
if (model)
|
||||||
result = model->sensorData[qr.quot].nameToString(qr.quot);
|
result = model->sensorData[qr.quot].nameToString(qr.quot);
|
||||||
|
@ -424,9 +236,6 @@ QString RawSource::toString(const ModelData * model, const GeneralSettings * con
|
||||||
result += (qr.rem == 1 ? "-" : "+");
|
result += (qr.rem == 1 ? "-" : "+");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
return CHECK_IN_ARRAY(telemetry, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
case SOURCE_TYPE_GVAR:
|
case SOURCE_TYPE_GVAR:
|
||||||
if (model)
|
if (model)
|
||||||
|
@ -486,13 +295,7 @@ bool RawSource::isSlider(int * sliderIndex, Board::Type board) const
|
||||||
|
|
||||||
bool RawSource::isTimeBased(Board::Type board) const
|
bool RawSource::isTimeBased(Board::Type board) const
|
||||||
{
|
{
|
||||||
if (board == Board::BOARD_UNKNOWN)
|
return (type == SOURCE_TYPE_SPECIAL && index > 0);
|
||||||
board = getCurrentBoard();
|
|
||||||
|
|
||||||
if (IS_ARM(board))
|
|
||||||
return (type == SOURCE_TYPE_SPECIAL && index > 0);
|
|
||||||
else
|
|
||||||
return (type==SOURCE_TYPE_TELEMETRY && (index==TELEMETRY_SOURCE_TX_TIME || index==TELEMETRY_SOURCE_TIMER1 || index==TELEMETRY_SOURCE_TIMER2 || index==TELEMETRY_SOURCE_TIMER3));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RawSource::isAvailable(const ModelData * const model, const GeneralSettings * const gs, Board::Type board) const
|
bool RawSource::isAvailable(const ModelData * const model, const GeneralSettings * const gs, Board::Type board) const
|
||||||
|
@ -516,20 +319,9 @@ bool RawSource::isAvailable(const ModelData * const model, const GeneralSettings
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (type == SOURCE_TYPE_TELEMETRY) {
|
if (type == SOURCE_TYPE_TELEMETRY) {
|
||||||
if (IS_ARM(board) && !model->sensorData[div(index, 3).quot].isAvailable()) {
|
if (!model->sensorData[div(index, 3).quot].isAvailable()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (!IS_ARM(board)) {
|
|
||||||
Firmware * fw = getCurrentFirmware();
|
|
||||||
if (type == (int)TELEMETRY_SOURCE_TX_TIME && !fw->getCapability(RtcTime))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (type == (int)TELEMETRY_SOURCE_RAS && !fw->getCapability(SportTelemetry))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (type == (int)TELEMETRY_SOURCE_TIMER3 && fw->getCapability(Timers) < 3)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,10 +159,6 @@ enum TelemetrySource {
|
||||||
TELEMETRY_SOURCE_RESERVE = -1
|
TELEMETRY_SOURCE_RESERVE = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TM_HASTELEMETRY 0x01
|
|
||||||
#define TM_HASOFFSET 0x02
|
|
||||||
#define TM_HASWSHH 0x04
|
|
||||||
|
|
||||||
enum RawSourceType {
|
enum RawSourceType {
|
||||||
SOURCE_TYPE_NONE,
|
SOURCE_TYPE_NONE,
|
||||||
SOURCE_TYPE_VIRTUAL_INPUT,
|
SOURCE_TYPE_VIRTUAL_INPUT,
|
||||||
|
|
|
@ -48,9 +48,6 @@ RawSourceRange FrSkyChannelData::getRange() const
|
||||||
void FrSkyScreenData::clear()
|
void FrSkyScreenData::clear()
|
||||||
{
|
{
|
||||||
memset(reinterpret_cast<void *>(this), 0, sizeof(FrSkyScreenData));
|
memset(reinterpret_cast<void *>(this), 0, sizeof(FrSkyScreenData));
|
||||||
if (!IS_ARM(getCurrentBoard())) {
|
|
||||||
type = TELEMETRY_SCREEN_NUMBERS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrSkyData::clear()
|
void FrSkyData::clear()
|
||||||
|
|
|
@ -56,9 +56,7 @@ GeneralEdit::GeneralEdit(QWidget * parent, RadioData & radioData, Firmware * fir
|
||||||
}
|
}
|
||||||
|
|
||||||
addTab(new GeneralSetupPanel(this, generalSettings, firmware), tr("Setup"));
|
addTab(new GeneralSetupPanel(this, generalSettings, firmware), tr("Setup"));
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
addTab(new CustomFunctionsPanel(this, NULL, generalSettings, firmware), tr("Global Functions"));
|
||||||
addTab(new CustomFunctionsPanel(this, NULL, generalSettings, firmware), tr("Global Functions"));
|
|
||||||
}
|
|
||||||
addTab(new TrainerPanel(this, generalSettings, firmware), tr("Trainer"));
|
addTab(new TrainerPanel(this, generalSettings, firmware), tr("Trainer"));
|
||||||
addTab(new HardwarePanel(this, generalSettings, firmware), tr("Hardware"));
|
addTab(new HardwarePanel(this, generalSettings, firmware), tr("Hardware"));
|
||||||
addTab(new CalibrationPanel(this, generalSettings, firmware), tr("Calibration"));
|
addTab(new CalibrationPanel(this, generalSettings, firmware), tr("Calibration"));
|
||||||
|
|
|
@ -234,12 +234,7 @@ ui(new Ui::GeneralSetup)
|
||||||
ui->memwarnChkB->setChecked(!generalSettings.disableMemoryWarning); // Default is zero=checked
|
ui->memwarnChkB->setChecked(!generalSettings.disableMemoryWarning); // Default is zero=checked
|
||||||
ui->alarmwarnChkB->setChecked(!generalSettings.disableAlarmWarning); // Default is zero=checked
|
ui->alarmwarnChkB->setChecked(!generalSettings.disableAlarmWarning); // Default is zero=checked
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
ui->rssiPowerOffWarnChkB->setChecked(!generalSettings.disableRssiPoweroffAlarm); // Default is zero=checked
|
||||||
ui->rssiPowerOffWarnChkB->setChecked(!generalSettings.disableRssiPoweroffAlarm); // Default is zero=checked
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->rssiPowerOffWarnChkB->hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_FAMILY_HORUS_OR_T16(firmware->getBoard())) {
|
if (IS_FAMILY_HORUS_OR_T16(firmware->getBoard())) {
|
||||||
ui->splashScreenChkB->hide();
|
ui->splashScreenChkB->hide();
|
||||||
|
@ -302,13 +297,7 @@ ui(new Ui::GeneralSetup)
|
||||||
ui->backlightColor2_label->hide();
|
ui->backlightColor2_label->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
ui->switchesDelay->setValue(10*(generalSettings.switchesDelay+15));
|
||||||
ui->switchesDelay->setValue(10*(generalSettings.switchesDelay+15));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->switchesDelay->hide();
|
|
||||||
ui->switchesDelayLabel->hide();
|
|
||||||
}
|
|
||||||
ui->blAlarm_ChkB->setChecked(generalSettings.flashBeep);
|
ui->blAlarm_ChkB->setChecked(generalSettings.flashBeep);
|
||||||
|
|
||||||
if (!firmware->getCapability(HasBatMeterRange)) {
|
if (!firmware->getCapability(HasBatMeterRange)) {
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include "apppreferencesdialog.h"
|
#include "apppreferencesdialog.h"
|
||||||
#include "fwpreferencesdialog.h"
|
#include "fwpreferencesdialog.h"
|
||||||
#include "firmwareinterface.h"
|
#include "firmwareinterface.h"
|
||||||
#include "fusesdialog.h"
|
|
||||||
#include "downloaddialog.h"
|
#include "downloaddialog.h"
|
||||||
#include "printdialog.h"
|
#include "printdialog.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
@ -939,10 +938,8 @@ void MainWindow::readEeprom()
|
||||||
QString tempFile;
|
QString tempFile;
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
tempFile = generateProcessUniqueTempFileName("temp.otx");
|
tempFile = generateProcessUniqueTempFileName("temp.otx");
|
||||||
else if (IS_ARM(board))
|
|
||||||
tempFile = generateProcessUniqueTempFileName("temp.bin");
|
|
||||||
else
|
else
|
||||||
tempFile = generateProcessUniqueTempFileName("temp.hex");
|
tempFile = generateProcessUniqueTempFileName("temp.bin");
|
||||||
|
|
||||||
qDebug() << "MainWindow::readEeprom(): using temp file: " << tempFile;
|
qDebug() << "MainWindow::readEeprom(): using temp file: " << tempFile;
|
||||||
|
|
||||||
|
@ -1029,14 +1026,6 @@ void MainWindow::burnConfig()
|
||||||
void MainWindow::burnList()
|
void MainWindow::burnList()
|
||||||
{
|
{
|
||||||
burnConfigDialog bcd(this);
|
burnConfigDialog bcd(this);
|
||||||
bcd.listAvrdudeProgrammers();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::burnFuses()
|
|
||||||
{
|
|
||||||
FusesDialog *fd = new FusesDialog(this);
|
|
||||||
fd->exec();
|
|
||||||
delete fd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::compare()
|
void MainWindow::compare()
|
||||||
|
@ -1232,8 +1221,6 @@ void MainWindow::retranslateUi(bool showMsg)
|
||||||
trAct(changelogAct, tr("Release notes..."), tr("Show release notes"));
|
trAct(changelogAct, tr("Release notes..."), tr("Show release notes"));
|
||||||
trAct(compareAct, tr("Compare Models..."), tr("Compare models"));
|
trAct(compareAct, tr("Compare Models..."), tr("Compare models"));
|
||||||
trAct(editSplashAct, tr("Edit Radio Splash Image..."), tr("Edit the splash image of your Radio"));
|
trAct(editSplashAct, tr("Edit Radio Splash Image..."), tr("Edit the splash image of your Radio"));
|
||||||
trAct(burnListAct, tr("List programmers..."), tr("List available programmers"));
|
|
||||||
trAct(burnFusesAct, tr("Fuses..."), tr("Show fuses dialog"));
|
|
||||||
trAct(readFlashAct, tr("Read Firmware from Radio"), tr("Read firmware from Radio"));
|
trAct(readFlashAct, tr("Read Firmware from Radio"), tr("Read firmware from Radio"));
|
||||||
trAct(writeFlashAct, tr("Write Firmware to Radio"), tr("Write firmware to Radio"));
|
trAct(writeFlashAct, tr("Write Firmware to Radio"), tr("Write firmware to Radio"));
|
||||||
trAct(sdsyncAct, tr("Synchronize SD"), tr("SD card synchronization"));
|
trAct(sdsyncAct, tr("Synchronize SD"), tr("SD card synchronization"));
|
||||||
|
@ -1295,7 +1282,6 @@ void MainWindow::createActions()
|
||||||
|
|
||||||
editSplashAct = addAct("paintbrush.png", SLOT(customizeSplash()));
|
editSplashAct = addAct("paintbrush.png", SLOT(customizeSplash()));
|
||||||
burnListAct = addAct("list.png", SLOT(burnList()));
|
burnListAct = addAct("list.png", SLOT(burnList()));
|
||||||
burnFusesAct = addAct("fuses.png", SLOT(burnFuses()));
|
|
||||||
readFlashAct = addAct("read_flash.png", SLOT(readFlash()));
|
readFlashAct = addAct("read_flash.png", SLOT(readFlash()));
|
||||||
writeFlashAct = addAct("write_flash.png", SLOT(writeFlash()));
|
writeFlashAct = addAct("write_flash.png", SLOT(writeFlash()));
|
||||||
writeEepromAct = addAct("write_eeprom.png", SLOT(writeEeprom()));
|
writeEepromAct = addAct("write_eeprom.png", SLOT(writeEeprom()));
|
||||||
|
@ -1400,10 +1386,6 @@ void MainWindow::createMenus()
|
||||||
burnMenu->addAction(readFlashAct);
|
burnMenu->addAction(readFlashAct);
|
||||||
burnMenu->addSeparator();
|
burnMenu->addSeparator();
|
||||||
burnMenu->addSeparator();
|
burnMenu->addSeparator();
|
||||||
if (!IS_ARM(getCurrentBoard())) {
|
|
||||||
burnMenu->addAction(burnFusesAct);
|
|
||||||
burnMenu->addAction(burnListAct);
|
|
||||||
}
|
|
||||||
|
|
||||||
windowMenu = menuBar()->addMenu("");
|
windowMenu = menuBar()->addMenu("");
|
||||||
windowMenu->addAction(actTabbedWindows);
|
windowMenu->addAction(actTabbedWindows);
|
||||||
|
|
|
@ -111,7 +111,6 @@ class MainWindow : public QMainWindow
|
||||||
void readBackup();
|
void readBackup();
|
||||||
void burnConfig();
|
void burnConfig();
|
||||||
void burnList();
|
void burnList();
|
||||||
void burnFuses();
|
|
||||||
void contributors();
|
void contributors();
|
||||||
void sdsync();
|
void sdsync();
|
||||||
void changelog();
|
void changelog();
|
||||||
|
@ -210,7 +209,6 @@ class MainWindow : public QMainWindow
|
||||||
QAction *readEepromAct;
|
QAction *readEepromAct;
|
||||||
QAction *burnConfigAct;
|
QAction *burnConfigAct;
|
||||||
QAction *burnListAct;
|
QAction *burnListAct;
|
||||||
QAction *burnFusesAct;
|
|
||||||
QAction *writeFlashAct;
|
QAction *writeFlashAct;
|
||||||
QAction *readFlashAct;
|
QAction *readFlashAct;
|
||||||
QAction *writeBUToRadioAct;
|
QAction *writeBUToRadioAct;
|
||||||
|
|
|
@ -42,7 +42,6 @@ set(modeledit_UIS
|
||||||
setup_timer.ui
|
setup_timer.ui
|
||||||
setup_module.ui
|
setup_module.ui
|
||||||
flightmode.ui
|
flightmode.ui
|
||||||
telemetry_analog.ui
|
|
||||||
telemetry_customscreen.ui
|
telemetry_customscreen.ui
|
||||||
telemetry_sensor.ui
|
telemetry_sensor.ui
|
||||||
)
|
)
|
||||||
|
|
|
@ -45,7 +45,7 @@ LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout * tableLayout, int row
|
||||||
spinbox->setSuffix("%");
|
spinbox->setSuffix("%");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(board) || deflt == 0 /*it's the offset*/) {
|
if (deflt == 0 /*it's the offset*/) {
|
||||||
spinbox->setDecimals(1);
|
spinbox->setDecimals(1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -29,7 +29,7 @@ RepeatComboBox::RepeatComboBox(QWidget *parent, int & repeatParam):
|
||||||
QComboBox(parent),
|
QComboBox(parent),
|
||||||
repeatParam(repeatParam)
|
repeatParam(repeatParam)
|
||||||
{
|
{
|
||||||
unsigned int step = IS_ARM(getCurrentBoard()) ? 1 : 10;
|
unsigned int step = 1;
|
||||||
int value = repeatParam/step;
|
int value = repeatParam/step;
|
||||||
|
|
||||||
setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
|
setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
|
||||||
|
@ -58,7 +58,7 @@ void RepeatComboBox::onIndexChanged(int index)
|
||||||
|
|
||||||
void RepeatComboBox::update()
|
void RepeatComboBox::update()
|
||||||
{
|
{
|
||||||
unsigned int step = IS_ARM(getCurrentBoard()) ? 1 : 10;
|
unsigned int step = 1;
|
||||||
int value = repeatParam/step;
|
int value = repeatParam/step;
|
||||||
if (step == 1) {
|
if (step == 1) {
|
||||||
value++;
|
value++;
|
||||||
|
@ -422,29 +422,20 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
|
||||||
if (cfn.adjustMode == FUNC_ADJUST_GVAR_CONSTANT || cfn.adjustMode == FUNC_ADJUST_GVAR_INCDEC) {
|
if (cfn.adjustMode == FUNC_ADJUST_GVAR_CONSTANT || cfn.adjustMode == FUNC_ADJUST_GVAR_INCDEC) {
|
||||||
if (modified)
|
if (modified)
|
||||||
cfn.param = fswtchParam[i]->value() * model->gvarData[gvidx].multiplierSet();
|
cfn.param = fswtchParam[i]->value() * model->gvarData[gvidx].multiplierSet();
|
||||||
if (IS_ARM(getCurrentBoard())) {
|
fswtchParam[i]->setDecimals(model->gvarData[gvidx].prec);
|
||||||
fswtchParam[i]->setDecimals(model->gvarData[gvidx].prec);
|
fswtchParam[i]->setSingleStep(model->gvarData[gvidx].multiplierGet());
|
||||||
fswtchParam[i]->setSingleStep(model->gvarData[gvidx].multiplierGet());
|
fswtchParam[i]->setSuffix(model->gvarData[gvidx].unitToString());
|
||||||
fswtchParam[i]->setSuffix(model->gvarData[gvidx].unitToString());
|
if (cfn.adjustMode==FUNC_ADJUST_GVAR_INCDEC) {
|
||||||
if (cfn.adjustMode==FUNC_ADJUST_GVAR_INCDEC) {
|
double rng = abs(model->gvarData[gvidx].getMax() - model->gvarData[gvidx].getMin());
|
||||||
double rng = abs(model->gvarData[gvidx].getMax() - model->gvarData[gvidx].getMin());
|
rng *= model->gvarData[gvidx].multiplierGet();
|
||||||
rng *= model->gvarData[gvidx].multiplierGet();
|
fswtchParam[i]->setMinimum(-rng);
|
||||||
fswtchParam[i]->setMinimum(-rng);
|
fswtchParam[i]->setMaximum(rng);
|
||||||
fswtchParam[i]->setMaximum(rng);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fswtchParam[i]->setMinimum(model->gvarData[gvidx].getMinPrec());
|
|
||||||
fswtchParam[i]->setMaximum(model->gvarData[gvidx].getMaxPrec());
|
|
||||||
}
|
|
||||||
fswtchParam[i]->setValue(cfn.param * model->gvarData[gvidx].multiplierGet());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fswtchParam[i]->setDecimals(0);
|
fswtchParam[i]->setMinimum(model->gvarData[gvidx].getMinPrec());
|
||||||
fswtchParam[i]->setSingleStep(1);
|
fswtchParam[i]->setMaximum(model->gvarData[gvidx].getMaxPrec());
|
||||||
fswtchParam[i]->setMinimum(-125);
|
|
||||||
fswtchParam[i]->setMaximum(125);
|
|
||||||
fswtchParam[i]->setValue(cfn.param);
|
|
||||||
}
|
}
|
||||||
|
fswtchParam[i]->setValue(cfn.param * model->gvarData[gvidx].multiplierGet());
|
||||||
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM;
|
widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -679,7 +670,6 @@ void CustomFunctionsPanel::populateFuncCB(QComboBox *b, unsigned int value)
|
||||||
((i==FuncPlayHaptic) && !firmware->getCapability(Haptic)) ||
|
((i==FuncPlayHaptic) && !firmware->getCapability(Haptic)) ||
|
||||||
((i==FuncPlayBoth) && !firmware->getCapability(HasBeeper)) ||
|
((i==FuncPlayBoth) && !firmware->getCapability(HasBeeper)) ||
|
||||||
((i==FuncLogs) && !firmware->getCapability(HasSDLogs)) ||
|
((i==FuncLogs) && !firmware->getCapability(HasSDLogs)) ||
|
||||||
((i==FuncSetTimer1 || i==FuncSetTimer2) && !IS_ARM(firmware->getBoard())) ||
|
|
||||||
((i==FuncSetTimer3) && firmware->getCapability(Timers) < 3) ||
|
((i==FuncSetTimer3) && firmware->getCapability(Timers) < 3) ||
|
||||||
((i==FuncScreenshot) && !IS_HORUS_OR_TARANIS(firmware->getBoard())) ||
|
((i==FuncScreenshot) && !IS_HORUS_OR_TARANIS(firmware->getBoard())) ||
|
||||||
((i>=FuncRangeCheckInternalModule && i<=FuncBindExternalModule) && (!model || !firmware->getCapability(DangerousFunctions))) ||
|
((i>=FuncRangeCheckInternalModule && i<=FuncBindExternalModule) && (!model || !firmware->getCapability(DangerousFunctions))) ||
|
||||||
|
|
|
@ -46,18 +46,8 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||||
setWindowTitle(tr("Edit %1").arg(RawSource(srcType, ed->chn).toString(&model, &generalSettings)));
|
setWindowTitle(tr("Edit %1").arg(RawSource(srcType, ed->chn).toString(&model, &generalSettings)));
|
||||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||||
|
|
||||||
if (IS_ARM(getCurrentBoard())) {
|
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
|
||||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
|
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
|
||||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, 0, 100);
|
|
||||||
gvOffsetGroup = NULL;
|
|
||||||
ui->offsetLabel->hide();
|
|
||||||
ui->offsetGV->hide();
|
|
||||||
ui->offsetSB->hide();
|
|
||||||
ui->offsetCB->hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve, model,
|
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve, model,
|
||||||
firmware->getCapability(HasInputDiff) ? 0 : (HIDE_DIFF | HIDE_NEGATIVE_CURVES));
|
firmware->getCapability(HasInputDiff) ? 0 : (HIDE_DIFF | HIDE_NEGATIVE_CURVES));
|
||||||
|
|
|
@ -479,10 +479,6 @@ void LogicalSwitchesPanel::populateFunctionCB(QComboBox *b)
|
||||||
int func = order[i];
|
int func = order[i];
|
||||||
if (func == LS_FN_NEQUAL || func == LS_FN_EGREATER || func == LS_FN_ELESS)
|
if (func == LS_FN_NEQUAL || func == LS_FN_EGREATER || func == LS_FN_ELESS)
|
||||||
continue;
|
continue;
|
||||||
if (!IS_ARM(firmware->getBoard())) {
|
|
||||||
if (func == LS_FN_VEQUAL || func == LS_FN_EDGE)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
b->addItem(LogicalSwitchData(func).funcToString(), func);
|
b->addItem(LogicalSwitchData(func).funcToString(), func);
|
||||||
}
|
}
|
||||||
b->setMaxVisibleItems(10);
|
b->setMaxVisibleItems(10);
|
||||||
|
@ -490,27 +486,7 @@ void LogicalSwitchesPanel::populateFunctionCB(QComboBox *b)
|
||||||
|
|
||||||
void LogicalSwitchesPanel::populateAndSwitchCB(QComboBox *b)
|
void LogicalSwitchesPanel::populateAndSwitchCB(QComboBox *b)
|
||||||
{
|
{
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
b->setModel(rawSwitchItemModel);
|
||||||
b->setModel(rawSwitchItemModel);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
RawSwitch item;
|
|
||||||
|
|
||||||
b->clear();
|
|
||||||
|
|
||||||
item = RawSwitch(SWITCH_TYPE_NONE);
|
|
||||||
b->addItem(item.toString(), item.toValue());
|
|
||||||
|
|
||||||
for (int i=1; i <= Boards::getCapability(firmware->getBoard(), Board::SwitchPositions); i++) {
|
|
||||||
item = RawSwitch(SWITCH_TYPE_SWITCH, i);
|
|
||||||
b->addItem(item.toString(), item.toValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=1; i<=6; i++) {
|
|
||||||
item = RawSwitch(SWITCH_TYPE_VIRTUAL, i);
|
|
||||||
b->addItem(item.toString(), item.toValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b->setVisible(true);
|
b->setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ ModelEdit::ModelEdit(QWidget * parent, RadioData & radioData, int modelId, Firmw
|
||||||
s1.report("LS");
|
s1.report("LS");
|
||||||
addTab(new CustomFunctionsPanel(this, &radioData.models[modelId], radioData.generalSettings, firmware), tr("Special Functions"));
|
addTab(new CustomFunctionsPanel(this, &radioData.models[modelId], radioData.generalSettings, firmware), tr("Special Functions"));
|
||||||
s1.report("CF");
|
s1.report("CF");
|
||||||
if (firmware->getCapability(Telemetry) & TM_HASTELEMETRY)
|
if (firmware->getCapability(Telemetry))
|
||||||
addTab(new TelemetryPanel(this, radioData.models[modelId], radioData.generalSettings, firmware), tr("Telemetry"));
|
addTab(new TelemetryPanel(this, radioData.models[modelId], radioData.generalSettings, firmware), tr("Telemetry"));
|
||||||
|
|
||||||
onTabIndexChanged(ui->tabWidget->currentIndex()); // make sure to trigger update on default tab panel
|
onTabIndexChanged(ui->tabWidget->currentIndex()); // make sure to trigger update on default tab panel
|
||||||
|
|
|
@ -36,7 +36,6 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
|
||||||
timer(timer),
|
timer(timer),
|
||||||
ui(new Ui::Timer)
|
ui(new Ui::Timer)
|
||||||
{
|
{
|
||||||
Board::Type board = firmware->getBoard();
|
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
@ -65,10 +64,8 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
|
||||||
ui->countdownBeep->setField(timer.countdownBeep, this);
|
ui->countdownBeep->setField(timer.countdownBeep, this);
|
||||||
ui->countdownBeep->addItem(tr("Silent"), TimerData::COUNTDOWN_SILENT);
|
ui->countdownBeep->addItem(tr("Silent"), TimerData::COUNTDOWN_SILENT);
|
||||||
ui->countdownBeep->addItem(tr("Beeps"), TimerData::COUNTDOWN_BEEPS);
|
ui->countdownBeep->addItem(tr("Beeps"), TimerData::COUNTDOWN_BEEPS);
|
||||||
if (IS_ARM(board) || IS_2560(board)) {
|
ui->countdownBeep->addItem(tr("Voice"), TimerData::COUNTDOWN_VOICE);
|
||||||
ui->countdownBeep->addItem(tr("Voice"), TimerData::COUNTDOWN_VOICE);
|
ui->countdownBeep->addItem(tr("Haptic"), TimerData::COUNTDOWN_HAPTIC);
|
||||||
ui->countdownBeep->addItem(tr("Haptic"), TimerData::COUNTDOWN_HAPTIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->value->setMaximumTime(firmware->getMaxTimerStart());
|
ui->value->setMaximumTime(firmware->getMaxTimerStart());
|
||||||
|
|
||||||
|
@ -1205,13 +1202,7 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge
|
||||||
ui->potWarningMode->hide();
|
ui->potWarningMode->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(board)) {
|
ui->trimsDisplay->setField(model.trimsDisplay, this);
|
||||||
ui->trimsDisplay->setField(model.trimsDisplay, this);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->labelTrimsDisplay->hide();
|
|
||||||
ui->trimsDisplay->hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = firmware->getCapability(NumFirstUsableModule); i < firmware->getCapability(NumModules); i++) {
|
for (int i = firmware->getCapability(NumFirstUsableModule); i < firmware->getCapability(NumModules); i++) {
|
||||||
modules[i] = new ModulePanel(this, model, model.moduleData[i], generalSettings, firmware, i);
|
modules[i] = new ModulePanel(this, model, model.moduleData[i], generalSettings, firmware, i);
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#include "telemetry.h"
|
#include "telemetry.h"
|
||||||
#include "ui_telemetry.h"
|
#include "ui_telemetry.h"
|
||||||
#include "ui_telemetry_analog.h"
|
|
||||||
#include "ui_telemetry_customscreen.h"
|
#include "ui_telemetry_customscreen.h"
|
||||||
#include "ui_telemetry_sensor.h"
|
#include "ui_telemetry_sensor.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
@ -29,291 +28,6 @@
|
||||||
|
|
||||||
#include <TimerEdit>
|
#include <TimerEdit>
|
||||||
|
|
||||||
TelemetryAnalog::TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware):
|
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
|
||||||
ui(new Ui::TelemetryAnalog),
|
|
||||||
analog(analog),
|
|
||||||
lock(false)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
|
|
||||||
if (analog.type==0 || analog.type==1 || analog.type==2) {
|
|
||||||
ui->RatioSB->setDecimals(1);
|
|
||||||
ui->RatioSB->setMaximum(25.5*firmware->getCapability(TelemetryMaxMultiplier));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->RatioSB->setDecimals(0);
|
|
||||||
ui->RatioSB->setMaximum(255*firmware->getCapability(TelemetryMaxMultiplier));
|
|
||||||
}
|
|
||||||
ui->RatioSB->setValue(ratio);
|
|
||||||
|
|
||||||
update();
|
|
||||||
|
|
||||||
ui->UnitCB->setCurrentIndex(analog.type);
|
|
||||||
ui->alarm1LevelCB->setCurrentIndex(analog.alarms[0].level);
|
|
||||||
ui->alarm1GreaterCB->setCurrentIndex(analog.alarms[0].greater);
|
|
||||||
ui->alarm2LevelCB->setCurrentIndex(analog.alarms[1].level);
|
|
||||||
ui->alarm2GreaterCB->setCurrentIndex(analog.alarms[1].greater);
|
|
||||||
|
|
||||||
if (!(firmware->getCapability(Telemetry) & TM_HASOFFSET)) {
|
|
||||||
ui->CalibSB->hide();
|
|
||||||
ui->CalibLabel->hide();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->label_Max->setText(tr("Range"));
|
|
||||||
}
|
|
||||||
|
|
||||||
disableMouseScrolling();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::update()
|
|
||||||
{
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
float step = ratio / 255;
|
|
||||||
float mini = (ratio * analog.offset) / 255;
|
|
||||||
float maxi = mini + ratio;
|
|
||||||
|
|
||||||
ui->alarm1ValueSB->setDecimals(2);
|
|
||||||
ui->alarm1ValueSB->setSingleStep(step);
|
|
||||||
ui->alarm1ValueSB->setMinimum(mini);
|
|
||||||
ui->alarm1ValueSB->setMaximum(maxi);
|
|
||||||
ui->alarm1ValueSB->setValue(mini + step*analog.alarms[0].value);
|
|
||||||
|
|
||||||
ui->alarm2ValueSB->setDecimals(2);
|
|
||||||
ui->alarm2ValueSB->setSingleStep(step);
|
|
||||||
ui->alarm2ValueSB->setMinimum(mini);
|
|
||||||
ui->alarm2ValueSB->setMaximum(maxi);
|
|
||||||
ui->alarm2ValueSB->setValue(mini + step*analog.alarms[1].value);
|
|
||||||
|
|
||||||
ui->CalibSB->setDecimals(2);
|
|
||||||
ui->CalibSB->setMaximum(step*127);
|
|
||||||
ui->CalibSB->setMinimum(-step*128);
|
|
||||||
ui->CalibSB->setSingleStep(step);
|
|
||||||
ui->CalibSB->setValue(mini);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int findmult(float value, float base)
|
|
||||||
{
|
|
||||||
int vvalue = value*10;
|
|
||||||
int vbase = base*10;
|
|
||||||
vvalue--;
|
|
||||||
|
|
||||||
int mult = 0;
|
|
||||||
for (int i=8; i>=0; i--) {
|
|
||||||
if (vvalue/vbase >= (1<<i)) {
|
|
||||||
mult = i+1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mult;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_UnitCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
analog.type = index;
|
|
||||||
switch (index) {
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
ui->RatioSB->setDecimals(1);
|
|
||||||
ui->RatioSB->setMaximum(25.5*firmware->getCapability(TelemetryMaxMultiplier));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ui->RatioSB->setDecimals(0);
|
|
||||||
ui->RatioSB->setMaximum(255*firmware->getCapability(TelemetryMaxMultiplier));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ui->RatioSB->setValue(ratio);
|
|
||||||
update();
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_RatioSB_valueChanged()
|
|
||||||
{
|
|
||||||
if (!lock) {
|
|
||||||
if (analog.type==0 || analog.type==1 || analog.type==2) {
|
|
||||||
analog.multiplier = findmult(ui->RatioSB->value(), 25.5);
|
|
||||||
float singlestep =(1<<analog.multiplier)/10.0;
|
|
||||||
lock=true;
|
|
||||||
ui->RatioSB->setSingleStep(singlestep);
|
|
||||||
ui->RatioSB->setValue(round(ui->RatioSB->value()/singlestep)*singlestep);
|
|
||||||
lock=false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.multiplier = findmult(ui->RatioSB->value(), 255);
|
|
||||||
float singlestep = (1<<analog.multiplier);
|
|
||||||
lock = true;
|
|
||||||
ui->RatioSB->setSingleStep(singlestep);
|
|
||||||
ui->RatioSB->setValue(round(ui->RatioSB->value()/singlestep)*singlestep);
|
|
||||||
lock = false;
|
|
||||||
}
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_RatioSB_editingFinished()
|
|
||||||
{
|
|
||||||
if (!lock) {
|
|
||||||
float ratio, calib, alarm1value,alarm2value;
|
|
||||||
|
|
||||||
if (analog.type==0 || analog.type==1 || analog.type==2) {
|
|
||||||
analog.multiplier = findmult(ui->RatioSB->value(), 25.5);
|
|
||||||
ui->CalibSB->setSingleStep((1<<analog.multiplier)/10.0);
|
|
||||||
ui->alarm1ValueSB->setSingleStep((1<<analog.multiplier)/10.0);
|
|
||||||
ui->alarm2ValueSB->setSingleStep((1<<analog.multiplier)/10.0);
|
|
||||||
analog.ratio = ((int)(round(ui->RatioSB->value()*10))/(1 <<analog.multiplier));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.multiplier = findmult(ui->RatioSB->value(), 255);
|
|
||||||
ui->CalibSB->setSingleStep(1<<analog.multiplier);
|
|
||||||
ui->alarm1ValueSB->setSingleStep(1<<analog.multiplier);
|
|
||||||
ui->alarm2ValueSB->setSingleStep(1<<analog.multiplier);
|
|
||||||
analog.ratio = (ui->RatioSB->value()/(1 << analog.multiplier));
|
|
||||||
}
|
|
||||||
ui->CalibSB->setMaximum((ui->RatioSB->value()*127)/255);
|
|
||||||
ui->CalibSB->setMinimum((ui->RatioSB->value()*-128)/255);
|
|
||||||
ui->alarm1ValueSB->setMaximum(ui->RatioSB->value());
|
|
||||||
ui->alarm2ValueSB->setMaximum(ui->RatioSB->value());
|
|
||||||
repaint();
|
|
||||||
ratio=analog.ratio * (1 << analog.multiplier);
|
|
||||||
calib=ui->CalibSB->value();
|
|
||||||
alarm1value=ui->alarm1ValueSB->value();
|
|
||||||
alarm2value=ui->alarm2ValueSB->value();
|
|
||||||
if (analog.type==0) {
|
|
||||||
calib*=10;
|
|
||||||
alarm1value*=10;
|
|
||||||
alarm2value*=10;
|
|
||||||
}
|
|
||||||
if (calib>0) {
|
|
||||||
if (calib>((ratio*127)/255)) {
|
|
||||||
analog.offset=127;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.offset=round(calib*255/ratio);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (calib<0) {
|
|
||||||
if (calib<((ratio*-128)/255)) {
|
|
||||||
analog.offset=-128;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.offset=round(calib*255/ratio);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
analog.alarms[0].value=round((alarm1value*255-analog.offset*(analog.ratio<<analog.multiplier))/(analog.ratio<<analog.multiplier));
|
|
||||||
analog.alarms[1].value=round((alarm2value*255-analog.offset*(analog.ratio<<analog.multiplier))/(analog.ratio<<analog.multiplier));
|
|
||||||
update();
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_CalibSB_editingFinished()
|
|
||||||
{
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
float calib,alarm1value,alarm2value;
|
|
||||||
|
|
||||||
if (ratio!=0) {
|
|
||||||
analog.offset = round((255*ui->CalibSB->value()/ratio));
|
|
||||||
calib=ratio*analog.offset/255.0;
|
|
||||||
alarm1value=ui->alarm1ValueSB->value();
|
|
||||||
alarm2value=ui->alarm2ValueSB->value();
|
|
||||||
if (alarm1value<calib) {
|
|
||||||
alarm1value=calib;
|
|
||||||
}
|
|
||||||
else if (alarm1value>(ratio+calib)) {
|
|
||||||
alarm1value=ratio+calib;
|
|
||||||
}
|
|
||||||
if (alarm2value<calib) {
|
|
||||||
alarm2value=calib;
|
|
||||||
}
|
|
||||||
else if (alarm2value>(ratio+calib)) {
|
|
||||||
alarm2value=ratio+calib;
|
|
||||||
}
|
|
||||||
analog.alarms[0].value=round(((alarm1value-calib)*255)/ratio);
|
|
||||||
analog.alarms[1].value=round(((alarm2value-calib)*255)/ratio);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.offset=0;
|
|
||||||
analog.alarms[0].value=0;
|
|
||||||
analog.alarms[1].value=0;
|
|
||||||
}
|
|
||||||
update();
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm1LevelCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
analog.alarms[0].level = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm1GreaterCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
analog.alarms[0].greater = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm1ValueSB_editingFinished()
|
|
||||||
{
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
float calib, alarm1value;
|
|
||||||
|
|
||||||
calib=analog.offset;
|
|
||||||
alarm1value=ui->alarm1ValueSB->value();
|
|
||||||
|
|
||||||
if (alarm1value<((calib*ratio)/255)) {
|
|
||||||
analog.alarms[0].value=0;
|
|
||||||
}
|
|
||||||
else if (alarm1value>(ratio+(calib*ratio)/255)) {
|
|
||||||
analog.alarms[0].value=255;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.alarms[0].value = round((alarm1value-((calib*ratio)/255))/ratio*255);
|
|
||||||
}
|
|
||||||
update();
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm2LevelCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
analog.alarms[1].level = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm2GreaterCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
analog.alarms[1].greater = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryAnalog::on_alarm2ValueSB_editingFinished()
|
|
||||||
{
|
|
||||||
float calib, alarm2value;
|
|
||||||
float ratio = analog.getRatio();
|
|
||||||
calib = analog.offset;
|
|
||||||
alarm2value = ui->alarm2ValueSB->value();
|
|
||||||
if (alarm2value<((calib*ratio)/255)) {
|
|
||||||
analog.alarms[1].value=0;
|
|
||||||
}
|
|
||||||
else if (alarm2value>(ratio+(calib*ratio)/255)) {
|
|
||||||
analog.alarms[1].value=255;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
analog.alarms[1].value = round((alarm2value-((calib*ratio)/255))/ratio*255);
|
|
||||||
}
|
|
||||||
update();
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
TelemetryAnalog::~TelemetryAnalog()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************/
|
/******************************************************/
|
||||||
|
|
||||||
|
@ -377,8 +91,7 @@ TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model,
|
||||||
disableMouseScrolling();
|
disableMouseScrolling();
|
||||||
|
|
||||||
lock = true;
|
lock = true;
|
||||||
if (IS_ARM(firmware->getBoard()))
|
ui->screenType->addItem(tr("None"), TELEMETRY_SCREEN_NONE);
|
||||||
ui->screenType->addItem(tr("None"), TELEMETRY_SCREEN_NONE);
|
|
||||||
ui->screenType->addItem(tr("Numbers"), TELEMETRY_SCREEN_NUMBERS);
|
ui->screenType->addItem(tr("Numbers"), TELEMETRY_SCREEN_NUMBERS);
|
||||||
ui->screenType->addItem(tr("Bars"), TELEMETRY_SCREEN_BARS);
|
ui->screenType->addItem(tr("Bars"), TELEMETRY_SCREEN_BARS);
|
||||||
if (IS_TARANIS(firmware->getBoard()))
|
if (IS_TARANIS(firmware->getBoard()))
|
||||||
|
@ -439,14 +152,8 @@ void TelemetryCustomScreen::updateBar(int line)
|
||||||
|
|
||||||
if (source.type != SOURCE_TYPE_NONE) {
|
if (source.type != SOURCE_TYPE_NONE) {
|
||||||
RawSourceRange range = source.getRange(model, generalSettings);
|
RawSourceRange range = source.getRange(model, generalSettings);
|
||||||
if (!IS_ARM(getCurrentBoard())) {
|
|
||||||
int max = round((range.max - range.min) / range.step);
|
|
||||||
if (int(255-screen.body.bars[line].barMax) > max) {
|
|
||||||
screen.body.bars[line].barMax = 255 - max;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
float minVal = range.getValue(screen.body.bars[line].barMin);
|
float minVal = range.getValue(screen.body.bars[line].barMin);
|
||||||
float maxVal = IS_ARM(getCurrentBoard()) ? screen.body.bars[line].barMax : 255 - screen.body.bars[line].barMax;
|
float maxVal = screen.body.bars[line].barMax;
|
||||||
maxVal = range.getValue(maxVal);
|
maxVal = range.getValue(maxVal);
|
||||||
|
|
||||||
if (source.isTimeBased()) {
|
if (source.isTimeBased()) {
|
||||||
|
@ -552,10 +259,7 @@ void TelemetryCustomScreen::barMinChanged(double value)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
int line = sender()->property("index").toInt();
|
int line = sender()->property("index").toInt();
|
||||||
if (IS_ARM(getCurrentBoard()))
|
screen.body.bars[line].barMin = round(value / minSB[line]->singleStep());
|
||||||
screen.body.bars[line].barMin = round(value / minSB[line]->singleStep());
|
|
||||||
else
|
|
||||||
screen.body.bars[line].barMin = round((value-minSB[line]->minimum()) / minSB[line]->singleStep());
|
|
||||||
// TODO set min (maxSB)
|
// TODO set min (maxSB)
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
@ -565,10 +269,7 @@ void TelemetryCustomScreen::barMaxChanged(double value)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
int line = sender()->property("index").toInt();
|
int line = sender()->property("index").toInt();
|
||||||
if (IS_ARM(getCurrentBoard()))
|
screen.body.bars[line].barMax = round((value) / maxSB[line]->singleStep());
|
||||||
screen.body.bars[line].barMax = round((value) / maxSB[line]->singleStep());
|
|
||||||
else
|
|
||||||
screen.body.bars[line].barMax = 255 - round((value-minSB[line]->minimum()) / maxSB[line]->singleStep());
|
|
||||||
// TODO set max (minSB)
|
// TODO set max (minSB)
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
@ -583,10 +284,7 @@ void TelemetryCustomScreen::barTimeChanged()
|
||||||
if (!te)
|
if (!te)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IS_ARM(getCurrentBoard()))
|
valRef = round(te->timeInSeconds() / te->singleStep());
|
||||||
valRef = round(te->timeInSeconds() / te->singleStep());
|
|
||||||
else
|
|
||||||
valRef = round((te->timeInSeconds() - te->minimumTime()) / te->singleStep());
|
|
||||||
|
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
@ -946,29 +644,17 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||||
model.frsky.usrProto = 1;
|
model.frsky.usrProto = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
ui->varioSource->setField(model.frsky.varioSource, this);
|
||||||
ui->varioSource->setField(model.frsky.varioSource, this);
|
ui->varioCenterSilent->setField(model.frsky.varioCenterSilent, this);
|
||||||
ui->varioCenterSilent->setField(model.frsky.varioCenterSilent, this);
|
ui->A1GB->hide();
|
||||||
ui->A1GB->hide();
|
ui->A2GB->hide();
|
||||||
ui->A2GB->hide();
|
for (unsigned i= 0; i < CPN_MAX_SENSORS; ++i) {
|
||||||
for (unsigned i= 0; i < CPN_MAX_SENSORS; ++i) {
|
TelemetrySensorPanel * panel = new TelemetrySensorPanel(this, model.sensorData[i], i, model, generalSettings, firmware);
|
||||||
TelemetrySensorPanel * panel = new TelemetrySensorPanel(this, model.sensorData[i], i, model, generalSettings, firmware);
|
ui->sensorsLayout->addWidget(panel);
|
||||||
ui->sensorsLayout->addWidget(panel);
|
sensorPanels[i] = panel;
|
||||||
sensorPanels[i] = panel;
|
connect(panel, SIGNAL(dataModified()), this, SLOT(update()));
|
||||||
connect(panel, SIGNAL(dataModified()), this, SLOT(update()));
|
connect(panel, SIGNAL(modified()), this, SLOT(onModified()));
|
||||||
connect(panel, SIGNAL(modified()), this, SLOT(onModified()));
|
connect(panel, SIGNAL(clearAllSensors()), this, SLOT(on_clearAllSensors()));
|
||||||
connect(panel, SIGNAL(clearAllSensors()), this, SLOT(on_clearAllSensors()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->sensorsGB->hide();
|
|
||||||
ui->altimetryGB->hide();
|
|
||||||
analogs[0] = new TelemetryAnalog(this, model.frsky.channels[0], model, generalSettings, firmware);
|
|
||||||
ui->A1Layout->addWidget(analogs[0]);
|
|
||||||
connect(analogs[0], SIGNAL(modified()), this, SLOT(onAnalogModified()));
|
|
||||||
analogs[1] = new TelemetryAnalog(this, model.frsky.channels[1], model, generalSettings, firmware);
|
|
||||||
ui->A2Layout->addWidget(analogs[1]);
|
|
||||||
connect(analogs[1], SIGNAL(modified()), this, SLOT(onModified()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_TARANIS_X9(firmware->getBoard())) {
|
if (IS_TARANIS_X9(firmware->getBoard())) {
|
||||||
|
@ -1017,10 +703,8 @@ void TelemetryPanel::update()
|
||||||
populateTelemetrySourcesComboBox(ui->varioSource, model, false);
|
populateTelemetrySourcesComboBox(ui->varioSource, model, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
for (unsigned i=0; i<CPN_MAX_SENSORS; ++i) {
|
||||||
for (unsigned i=0; i<CPN_MAX_SENSORS; ++i) {
|
sensorPanels[i]->update();
|
||||||
sensorPanels[i]->update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
emit updated();
|
emit updated();
|
||||||
|
@ -1032,52 +716,29 @@ void TelemetryPanel::setup()
|
||||||
|
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
|
||||||
ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
|
ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
|
||||||
ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
|
if (IS_9XRPRO(firmware->getBoard()) ||
|
||||||
if (IS_9XRPRO(firmware->getBoard()) ||
|
(IS_TARANIS(firmware->getBoard()) && generalSettings.auxSerialMode == 2)) {
|
||||||
(IS_TARANIS(firmware->getBoard()) && generalSettings.auxSerialMode == 2)) {
|
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
|
||||||
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
|
|
||||||
}
|
|
||||||
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
|
|
||||||
ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds, this);
|
|
||||||
ui->disableTelemetryAlarms->setField(model->rssiAlarms.disabled);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->telemetryProtocolLabel->hide();
|
|
||||||
ui->telemetryProtocol->hide();
|
|
||||||
ui->ignoreSensorIds->hide();
|
|
||||||
ui->disableTelemetryAlarms->hide();
|
|
||||||
}
|
}
|
||||||
|
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
|
||||||
|
ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds, this);
|
||||||
|
ui->disableTelemetryAlarms->setField(model->rssiAlarms.disabled);
|
||||||
|
|
||||||
ui->rssiAlarmWarningSB->setValue(model->rssiAlarms.warning);
|
ui->rssiAlarmWarningSB->setValue(model->rssiAlarms.warning);
|
||||||
ui->rssiAlarmCriticalSB->setValue(model->rssiAlarms.critical);
|
ui->rssiAlarmCriticalSB->setValue(model->rssiAlarms.critical);
|
||||||
if (!IS_ARM(firmware->getBoard())) {
|
|
||||||
ui->rssiSourceLabel->hide();
|
|
||||||
ui->rssiSourceCB->hide();
|
|
||||||
ui->rssiAlarmWarningCB->setCurrentIndex(model->rssiAlarms.level[0]);
|
|
||||||
ui->rssiAlarmCriticalCB->setCurrentIndex(model->rssiAlarms.level[1]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->rssiSourceLabel->show();
|
|
||||||
ui->rssiSourceLabel->setText(tr("Source"));
|
|
||||||
ui->rssiSourceCB->setField(model->rssiSource, this);
|
|
||||||
ui->rssiSourceCB->show();
|
|
||||||
populateTelemetrySourcesComboBox(ui->rssiSourceCB, model, false);
|
|
||||||
|
|
||||||
ui->rssiAlarmWarningCB->hide();
|
ui->rssiSourceLabel->show();
|
||||||
ui->rssiAlarmCriticalCB->hide();
|
ui->rssiSourceLabel->setText(tr("Source"));
|
||||||
ui->rssiAlarmWarningLabel->setText(tr("Low Alarm"));
|
ui->rssiSourceCB->setField(model->rssiSource, this);
|
||||||
ui->rssiAlarmCriticalLabel->setText(tr("Critical Alarm"));
|
ui->rssiSourceCB->show();
|
||||||
}
|
populateTelemetrySourcesComboBox(ui->rssiSourceCB, model, false);
|
||||||
|
|
||||||
/*if (IS_ARM(firmware->getBoard())) {
|
ui->rssiAlarmWarningCB->hide();
|
||||||
for (int i=0; i<CPN_MAX_SENSORS; ++i) {
|
ui->rssiAlarmCriticalCB->hide();
|
||||||
TelemetrySensorPanel * panel = new TelemetrySensorPanel(this, model->, model, generalSettings, firmware);
|
ui->rssiAlarmWarningLabel->setText(tr("Low Alarm"));
|
||||||
ui->sensorsLayout->addWidget(panel);
|
ui->rssiAlarmCriticalLabel->setText(tr("Critical Alarm"));
|
||||||
sensorPanels[i] = panel;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
int varioCap = firmware->getCapability(HasVario);
|
int varioCap = firmware->getCapability(HasVario);
|
||||||
if (!varioCap) {
|
if (!varioCap) {
|
||||||
|
@ -1109,7 +770,7 @@ void TelemetryPanel::setup()
|
||||||
ui->altimetryGB->setVisible(firmware->getCapability(HasVario)),
|
ui->altimetryGB->setVisible(firmware->getCapability(HasVario)),
|
||||||
ui->frskyProtoCB->setDisabled(firmware->getCapability(NoTelemetryProtocol));
|
ui->frskyProtoCB->setDisabled(firmware->getCapability(NoTelemetryProtocol));
|
||||||
|
|
||||||
if (firmware->getCapability(Telemetry) & TM_HASWSHH) {
|
if (firmware->getCapability(Telemetry)) {
|
||||||
ui->frskyProtoCB->addItem(tr("Winged Shadow How High"));
|
ui->frskyProtoCB->addItem(tr("Winged Shadow How High"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1117,38 +778,6 @@ void TelemetryPanel::setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->variousGB->hide();
|
ui->variousGB->hide();
|
||||||
if (!IS_ARM(firmware->getBoard())) {
|
|
||||||
if (!(firmware->getCapability(HasFasOffset)) && !(firmware_id.contains("fasoffset"))) {
|
|
||||||
ui->fasOffset_label->hide();
|
|
||||||
ui->fasOffset_DSB->hide();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->fasOffset_DSB->setValue(model->frsky.fasOffset/10.0);
|
|
||||||
ui->variousGB->show();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(firmware->getCapability(HasMahPersistent))) {
|
|
||||||
ui->mahCount_label->hide();
|
|
||||||
ui->mahCount_SB->hide();
|
|
||||||
ui->mahCount_ChkB->hide();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (model->frsky.mAhPersistent) {
|
|
||||||
ui->mahCount_ChkB->setChecked(true);
|
|
||||||
ui->mahCount_SB->setValue(model->frsky.storedMah);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui->mahCount_SB->setDisabled(true);
|
|
||||||
}
|
|
||||||
ui->variousGB->show();
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->frskyProtoCB->setCurrentIndex(model->frsky.usrProto);
|
|
||||||
ui->bladesCount->setValue(model->frsky.blades);
|
|
||||||
populateVarioSource();
|
|
||||||
populateVoltsSource();
|
|
||||||
populateCurrentSource();
|
|
||||||
}
|
|
||||||
|
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
@ -1170,10 +799,8 @@ void TelemetryPanel::populateVoltsSource()
|
||||||
cb->setField(model->frsky.voltsSource, this);
|
cb->setField(model->frsky.voltsSource, this);
|
||||||
cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1);
|
cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1);
|
||||||
cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2);
|
cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2);
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
cb->addItem(tr("A3"), TELEMETRY_VOLTS_SOURCE_A3);
|
||||||
cb->addItem(tr("A3"), TELEMETRY_VOLTS_SOURCE_A3);
|
cb->addItem(tr("A4"), TELEMETRY_VOLTS_SOURCE_A4);
|
||||||
cb->addItem(tr("A4"), TELEMETRY_VOLTS_SOURCE_A4);
|
|
||||||
}
|
|
||||||
cb->addItem(tr("FAS"), TELEMETRY_VOLTS_SOURCE_FAS);
|
cb->addItem(tr("FAS"), TELEMETRY_VOLTS_SOURCE_FAS);
|
||||||
cb->addItem(tr("Cells"), TELEMETRY_VOLTS_SOURCE_CELLS);
|
cb->addItem(tr("Cells"), TELEMETRY_VOLTS_SOURCE_CELLS);
|
||||||
}
|
}
|
||||||
|
@ -1185,10 +812,8 @@ void TelemetryPanel::populateCurrentSource()
|
||||||
cb->addItem(tr("---"), TELEMETRY_CURRENT_SOURCE_NONE);
|
cb->addItem(tr("---"), TELEMETRY_CURRENT_SOURCE_NONE);
|
||||||
cb->addItem(tr("A1"), TELEMETRY_CURRENT_SOURCE_A1);
|
cb->addItem(tr("A1"), TELEMETRY_CURRENT_SOURCE_A1);
|
||||||
cb->addItem(tr("A2"), TELEMETRY_CURRENT_SOURCE_A2);
|
cb->addItem(tr("A2"), TELEMETRY_CURRENT_SOURCE_A2);
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
cb->addItem(tr("A3"), TELEMETRY_CURRENT_SOURCE_A3);
|
||||||
cb->addItem(tr("A3"), TELEMETRY_CURRENT_SOURCE_A3);
|
cb->addItem(tr("A4"), TELEMETRY_CURRENT_SOURCE_A4);
|
||||||
cb->addItem(tr("A4"), TELEMETRY_CURRENT_SOURCE_A4);
|
|
||||||
}
|
|
||||||
cb->addItem(tr("FAS"), TELEMETRY_CURRENT_SOURCE_FAS);
|
cb->addItem(tr("FAS"), TELEMETRY_CURRENT_SOURCE_FAS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1223,18 +848,6 @@ void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TelemetryPanel::on_rssiAlarmWarningCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
model->rssiAlarms.level[0] = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryPanel::on_rssiAlarmCriticalCB_currentIndexChanged(int index)
|
|
||||||
{
|
|
||||||
model->rssiAlarms.level[1] = index;
|
|
||||||
emit modified();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TelemetryPanel::on_rssiAlarmWarningSB_editingFinished()
|
void TelemetryPanel::on_rssiAlarmWarningSB_editingFinished()
|
||||||
{
|
{
|
||||||
model->rssiAlarms.warning= ui->rssiAlarmWarningSB->value();
|
model->rssiAlarms.warning= ui->rssiAlarmWarningSB->value();
|
||||||
|
|
|
@ -31,45 +31,11 @@ class RawSourceFilterItemModel;
|
||||||
class TimerEdit;
|
class TimerEdit;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class TelemetryAnalog;
|
|
||||||
class TelemetryCustomScreen;
|
class TelemetryCustomScreen;
|
||||||
class TelemetrySensor;
|
class TelemetrySensor;
|
||||||
class Telemetry;
|
class Telemetry;
|
||||||
}
|
}
|
||||||
|
|
||||||
class TelemetryAnalog: public ModelPanel
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
friend class TelemetryPanel;
|
|
||||||
|
|
||||||
public:
|
|
||||||
TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware);
|
|
||||||
virtual ~TelemetryAnalog();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void modified();
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void on_UnitCB_currentIndexChanged(int index);
|
|
||||||
void on_RatioSB_editingFinished();
|
|
||||||
void on_RatioSB_valueChanged();
|
|
||||||
void on_CalibSB_editingFinished();
|
|
||||||
void on_alarm1LevelCB_currentIndexChanged(int index);
|
|
||||||
void on_alarm1GreaterCB_currentIndexChanged(int index);
|
|
||||||
void on_alarm1ValueSB_editingFinished();
|
|
||||||
void on_alarm2LevelCB_currentIndexChanged(int index);
|
|
||||||
void on_alarm2GreaterCB_currentIndexChanged(int index);
|
|
||||||
void on_alarm2ValueSB_editingFinished();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::TelemetryAnalog *ui;
|
|
||||||
FrSkyChannelData & analog;
|
|
||||||
bool lock;
|
|
||||||
|
|
||||||
void update();
|
|
||||||
};
|
|
||||||
|
|
||||||
class TelemetryCustomScreen: public ModelPanel
|
class TelemetryCustomScreen: public ModelPanel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -155,8 +121,6 @@ class TelemetryPanel : public ModelPanel
|
||||||
void onModified();
|
void onModified();
|
||||||
void on_frskyProtoCB_currentIndexChanged(int index);
|
void on_frskyProtoCB_currentIndexChanged(int index);
|
||||||
void on_bladesCount_editingFinished();
|
void on_bladesCount_editingFinished();
|
||||||
void on_rssiAlarmWarningCB_currentIndexChanged(int index);
|
|
||||||
void on_rssiAlarmCriticalCB_currentIndexChanged(int index);
|
|
||||||
void on_rssiAlarmWarningSB_editingFinished();
|
void on_rssiAlarmWarningSB_editingFinished();
|
||||||
void on_rssiAlarmCriticalSB_editingFinished();
|
void on_rssiAlarmCriticalSB_editingFinished();
|
||||||
void on_varioLimitMin_DSB_editingFinished();
|
void on_varioLimitMin_DSB_editingFinished();
|
||||||
|
@ -170,7 +134,6 @@ class TelemetryPanel : public ModelPanel
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Telemetry *ui;
|
Ui::Telemetry *ui;
|
||||||
TelemetryAnalog * analogs[4];
|
|
||||||
TelemetryCustomScreen * telemetryCustomScreens[4];
|
TelemetryCustomScreen * telemetryCustomScreens[4];
|
||||||
TelemetrySensorPanel * sensorPanels[CPN_MAX_SENSORS];
|
TelemetrySensorPanel * sensorPanels[CPN_MAX_SENSORS];
|
||||||
|
|
||||||
|
|
|
@ -973,8 +973,7 @@ QString ModelPrinter::printSettingsTrim()
|
||||||
{
|
{
|
||||||
QStringList str;
|
QStringList str;
|
||||||
str << printLabelValue(tr("Step"), printTrimIncrementMode());
|
str << printLabelValue(tr("Step"), printTrimIncrementMode());
|
||||||
if (IS_ARM(firmware->getBoard()))
|
str << printLabelValue(tr("Display"), printTrimsDisplayMode());
|
||||||
str << printLabelValue(tr("Display"), printTrimsDisplayMode());
|
|
||||||
str << printLabelValue(tr("Extended"), printBoolean(model.extendedTrims, BOOLEAN_YESNO));
|
str << printLabelValue(tr("Extended"), printBoolean(model.extendedTrims, BOOLEAN_YESNO));
|
||||||
return str.join(" ");
|
return str.join(" ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,7 +292,7 @@ QString MultiModelPrinter::print(QTextDocument * document)
|
||||||
if (firmware->getCapability(GlobalFunctions))
|
if (firmware->getCapability(GlobalFunctions))
|
||||||
str.append(printGlobalFunctions());
|
str.append(printGlobalFunctions());
|
||||||
str.append(printSpecialFunctions());
|
str.append(printSpecialFunctions());
|
||||||
if (firmware->getCapability(Telemetry) & TM_HASTELEMETRY) {
|
if (firmware->getCapability(Telemetry)) {
|
||||||
str.append(printTelemetry());
|
str.append(printTelemetry());
|
||||||
str.append(printSensors());
|
str.append(printSensors());
|
||||||
if (firmware->getCapability(TelemetryCustomScreens)) {
|
if (firmware->getCapability(TelemetryCustomScreens)) {
|
||||||
|
@ -751,32 +751,19 @@ QString MultiModelPrinter::printTelemetry()
|
||||||
MultiColumns columns(modelPrinterMap.size());
|
MultiColumns columns(modelPrinterMap.size());
|
||||||
columns.appendSectionTableStart();
|
columns.appendSectionTableStart();
|
||||||
|
|
||||||
// Analogs on non ARM boards
|
// Protocol
|
||||||
if (!IS_ARM(firmware->getBoard())) {
|
columns.appendRowStart(tr("Protocol"), 20);
|
||||||
columns.appendRowHeader(QStringList() << tr("Analogs") << tr("Unit") << tr("Scale") << tr("Offset"));
|
COMPARECELL(modelPrinter->printTelemetryProtocol(model->telemetryProtocol));
|
||||||
for (int i=0; i<2; i++) {
|
columns.appendRowEnd();
|
||||||
columns.appendRowStart(QString("A%1").arg(i+1), 20);
|
|
||||||
COMPARECELLWIDTH(FrSkyChannelData::unitString(model->frsky.channels[i].type), 20);
|
|
||||||
COMPARECELLWIDTH(QString::number((model->frsky.channels[i].ratio / (model->frsky.channels[i].type==0 ? 10.0 : 1)), 10, (model->frsky.channels[i].type==0 ? 1 : 0)), 20);
|
|
||||||
COMPARECELLWIDTH(QString::number((model->frsky.channels[i].offset*(model->frsky.channels[i].ratio / (model->frsky.channels[i].type==0 ?10.0 : 1)))/255, 10, (model->frsky.channels[i].type==0 ? 1 : 0)), 40);
|
|
||||||
columns.appendRowEnd();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Protocol
|
|
||||||
columns.appendRowStart(tr("Protocol"), 20);
|
|
||||||
COMPARECELL(modelPrinter->printTelemetryProtocol(model->telemetryProtocol));
|
|
||||||
columns.appendRowEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
// RSSI alarms
|
// RSSI alarms
|
||||||
{
|
{
|
||||||
columns.appendRowStart(tr("RSSI Alarms"), 20);
|
columns.appendRowStart(tr("RSSI Alarms"), 20);
|
||||||
columns.appendCellStart(80);
|
columns.appendCellStart(80);
|
||||||
COMPARESTRING("", (IS_ARM(getCurrentBoard()) ? tr("Low") : FrSkyAlarmData::alarmLevelName(model->rssiAlarms.level[0])), false);
|
COMPARESTRING("", tr("Low"), false);
|
||||||
columns.append(": ");
|
columns.append(": ");
|
||||||
COMPARESTRING("", QString("< %1").arg(QString::number(model->rssiAlarms.warning, 10)), true);
|
COMPARESTRING("", QString("< %1").arg(QString::number(model->rssiAlarms.warning, 10)), true);
|
||||||
COMPARESTRING("", (IS_ARM(getCurrentBoard()) ? tr("Critical") : FrSkyAlarmData::alarmLevelName(model->rssiAlarms.level[1])), false);
|
COMPARESTRING("", tr("Critical"), false);
|
||||||
columns.append(": ");
|
columns.append(": ");
|
||||||
COMPARESTRING("", QString("< %1").arg(QString::number(model->rssiAlarms.critical, 10)), true);
|
COMPARESTRING("", QString("< %1").arg(QString::number(model->rssiAlarms.critical, 10)), true);
|
||||||
COMPARESTRING(tr("Telemetry audio"), modelPrinter->printRssiAlarmsDisabled(model->rssiAlarms.disabled), false);
|
COMPARESTRING(tr("Telemetry audio"), modelPrinter->printRssiAlarmsDisabled(model->rssiAlarms.disabled), false);
|
||||||
|
@ -818,39 +805,9 @@ QString MultiModelPrinter::printTelemetry()
|
||||||
columns.appendRowEnd();
|
columns.appendRowEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(firmware->getBoard())) {
|
ROWLABELCOMPARECELL("Multi sensors", 0, modelPrinter->printIgnoreSensorIds(!model->frsky.ignoreSensorIds), 0);
|
||||||
ROWLABELCOMPARECELL("Multi sensors", 0, modelPrinter->printIgnoreSensorIds(!model->frsky.ignoreSensorIds), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Various
|
// Various
|
||||||
if (!IS_ARM(firmware->getBoard())) {
|
|
||||||
columns.appendRowHeader(QStringList() << tr("Various"));
|
|
||||||
if (!firmware->getCapability(NoTelemetryProtocol)) {
|
|
||||||
columns.appendRowStart("", 20);
|
|
||||||
LABELCOMPARECELL(tr("Serial protocol"), modelPrinter->printTelemetrySource(model->frsky.voltsSource), 80);
|
|
||||||
columns.appendRowEnd();
|
|
||||||
}
|
|
||||||
columns.appendRowStart("", 20);
|
|
||||||
columns.appendCellStart(80);
|
|
||||||
QString firmware_id = g.profile[g.id()].fwType();
|
|
||||||
if (firmware->getCapability(HasFasOffset) && firmware_id.contains("fasoffset")) {
|
|
||||||
COMPARESTRING(tr("FAS offset"), QString("%1 A").arg(model->frsky.fasOffset/10.0), true);
|
|
||||||
}
|
|
||||||
if (firmware->getCapability(HasMahPersistent)) {
|
|
||||||
COMPARESTRING(tr("mAh count"), QString("%1 mAh").arg(model->frsky.storedMah), true);
|
|
||||||
COMPARESTRING(tr("Persistent mAh"), modelPrinter->printMahPersistent(model->frsky.mAhPersistent), false);
|
|
||||||
}
|
|
||||||
columns.appendRowEnd();
|
|
||||||
columns.appendRowStart("", 20);
|
|
||||||
columns.appendCellStart(80);
|
|
||||||
COMPARESTRING(tr("Volts source"), modelPrinter->printVoltsSource(model->frsky.voltsSource), true);
|
|
||||||
COMPARESTRING(tr("Current source"), modelPrinter->printCurrentSource(model->frsky.currentSource), false);
|
|
||||||
columns.appendCellEnd();
|
|
||||||
columns.appendRowEnd();
|
|
||||||
columns.appendRowStart("", 20);
|
|
||||||
LABELCOMPARECELL(tr("Blades"), model->frsky.blades, 80);
|
|
||||||
columns.appendRowEnd();
|
|
||||||
}
|
|
||||||
columns.appendTableEnd();
|
columns.appendTableEnd();
|
||||||
str.append(columns.print());
|
str.append(columns.print());
|
||||||
return str;
|
return str;
|
||||||
|
|
|
@ -36,43 +36,8 @@ QString getRadioInterfaceCmd()
|
||||||
if (IS_STM32(board)) {
|
if (IS_STM32(board)) {
|
||||||
return bcd.getDFU();
|
return bcd.getDFU();
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(board)) {
|
else
|
||||||
return bcd.getSAMBA();
|
return bcd.getSAMBA();
|
||||||
}
|
|
||||||
else {
|
|
||||||
return bcd.getAVRDUDE();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList getAvrdudeArgs(const QString & cmd, const QString & filename)
|
|
||||||
{
|
|
||||||
QStringList args;
|
|
||||||
burnConfigDialog bcd;
|
|
||||||
QString programmer = bcd.getProgrammer();
|
|
||||||
QString mcu = bcd.getMCU();
|
|
||||||
Board::Type board = getCurrentBoard();
|
|
||||||
|
|
||||||
args << "-c" << programmer << "-p";
|
|
||||||
if (IS_2560(board))
|
|
||||||
args << "m2560";
|
|
||||||
else if (board == Board::BOARD_9X_M128)
|
|
||||||
args << "m128";
|
|
||||||
else
|
|
||||||
args << mcu;
|
|
||||||
|
|
||||||
args << bcd.getAvrdudeArgs();
|
|
||||||
|
|
||||||
QString fullcmd = cmd + filename;
|
|
||||||
if (QFileInfo(filename).suffix().toUpper() == "HEX")
|
|
||||||
fullcmd += ":i";
|
|
||||||
else if (QFileInfo(filename).suffix().toUpper()=="BIN")
|
|
||||||
fullcmd += ":r";
|
|
||||||
else
|
|
||||||
fullcmd += ":a";
|
|
||||||
|
|
||||||
args << "-U" << fullcmd;
|
|
||||||
|
|
||||||
return args;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList getDfuArgs(const QString & cmd, const QString & filename)
|
QStringList getDfuArgs(const QString & cmd, const QString & filename)
|
||||||
|
@ -119,11 +84,8 @@ QStringList getReadEEpromCmd(const QString & filename)
|
||||||
if (IS_STM32(eepromInterface->getBoard())) {
|
if (IS_STM32(eepromInterface->getBoard())) {
|
||||||
// impossible
|
// impossible
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(eepromInterface->getBoard())) {
|
|
||||||
result = getSambaArgs(QString("SERIALFLASH::Init 0\n") + "receive_file {SerialFlash AT25} \"" + filename + "\" 0x0 0x80000 0\n");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
result = getAvrdudeArgs("eeprom:r:", filename);
|
result = getSambaArgs(QString("SERIALFLASH::Init 0\n") + "receive_file {SerialFlash AT25} \"" + filename + "\" 0x0 0x80000 0\n");
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -135,11 +97,8 @@ QStringList getWriteEEpromCmd(const QString & filename)
|
||||||
// impossible
|
// impossible
|
||||||
return QStringList();
|
return QStringList();
|
||||||
}
|
}
|
||||||
else if (IS_SKY9X(board)) {
|
|
||||||
return getSambaArgs(QString("SERIALFLASH::Init 0\n") + "send_file {SerialFlash AT25} \"" + filename + "\" 0x0 0\n");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
return getAvrdudeArgs("eeprom:w:", filename);
|
return getSambaArgs(QString("SERIALFLASH::Init 0\n") + "send_file {SerialFlash AT25} \"" + filename + "\" 0x0 0\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,11 +111,8 @@ QStringList getWriteFirmwareArgs(const QString & filename)
|
||||||
else if (board == Board::BOARD_SKY9X) {
|
else if (board == Board::BOARD_SKY9X) {
|
||||||
return getSambaArgs(QString("send_file {Flash} \"") + filename + "\" 0x400000 0\n" + "FLASH::ScriptGPNMV 2\n");
|
return getSambaArgs(QString("send_file {Flash} \"") + filename + "\" 0x400000 0\n" + "FLASH::ScriptGPNMV 2\n");
|
||||||
}
|
}
|
||||||
else if (board == Board::BOARD_9XRPRO || board == Board::BOARD_AR9X) {
|
|
||||||
return getSambaArgs(QString("send_file {Flash} \"") + filename + "\" 0x400000 0\n" + "FLASH::ScriptGPNMV 2\n");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
return getAvrdudeArgs("flash:w:", filename);
|
return getSambaArgs(QString("send_file {Flash} \"") + filename + "\" 0x400000 0\n" + "FLASH::ScriptGPNMV 2\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,87 +125,8 @@ QStringList getReadFirmwareArgs(const QString & filename)
|
||||||
else if (board == Board::BOARD_SKY9X) {
|
else if (board == Board::BOARD_SKY9X) {
|
||||||
return getSambaArgs(QString("receive_file {Flash} \"") + filename + "\" 0x400000 0x40000 0\n");
|
return getSambaArgs(QString("receive_file {Flash} \"") + filename + "\" 0x400000 0x40000 0\n");
|
||||||
}
|
}
|
||||||
else if (board == Board::BOARD_9XRPRO) {
|
|
||||||
return getSambaArgs(QString("receive_file {Flash} \"") + filename + "\" 0x400000 0x80000 0\n");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
return getAvrdudeArgs("flash:r:", filename);
|
return getSambaArgs(QString("receive_file {Flash} \"") + filename + "\" 0x400000 0x80000 0\n");
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void readAvrdudeFuses(ProgressWidget * progress)
|
|
||||||
{
|
|
||||||
burnConfigDialog bcd;
|
|
||||||
QStringList args;
|
|
||||||
args << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << bcd.getAvrdudeArgs() << "-U" << "lfuse:r:-:i" << "-U" << "hfuse:r:-:i" << "-U" << "efuse:r:-:i";
|
|
||||||
FlashProcess flashProcess(bcd.getAVRDUDE(), args, progress);
|
|
||||||
flashProcess.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
void resetAvrdudeFuses(bool eepromProtect, ProgressWidget * progress)
|
|
||||||
{
|
|
||||||
//fuses
|
|
||||||
//avrdude -c usbasp -p m64 -U lfuse:w:<0x0E>:m
|
|
||||||
//avrdude -c usbasp -p m64 -U hfuse:w:<0x89>:m 0x81 for eeprom protection
|
|
||||||
//avrdude -c usbasp -p m64 -U efuse:w:<0xFF>:m
|
|
||||||
|
|
||||||
burnConfigDialog bcd;
|
|
||||||
QMessageBox::StandardButton ret = QMessageBox::No;
|
|
||||||
ret = QMessageBox::warning(NULL, CPN_STR_APP_NAME,
|
|
||||||
QCoreApplication::translate("RadioInterface",
|
|
||||||
"<b><u>WARNING!</u></b>" \
|
|
||||||
"<br>This will reset the fuses of %1 to the factory settings.<br>"
|
|
||||||
"Writing fuses can mess up your radio.<br>Do this only if you are sure they are wrong!<br>"
|
|
||||||
"Are you sure you want to continue?").arg(bcd.getMCU()),
|
|
||||||
QMessageBox::Yes | QMessageBox::No);
|
|
||||||
if (ret == QMessageBox::Yes) {
|
|
||||||
QStringList args = bcd.getAvrdudeArgs();
|
|
||||||
QStringList str;
|
|
||||||
if (bcd.getMCU() == "m2560") {
|
|
||||||
args << "-B8";
|
|
||||||
QString erStr = eepromProtect ? "hfuse:w:0x51:m" : "hfuse:w:0x59:m";
|
|
||||||
str << "-U" << "lfuse:w:0xD7:m" << "-U" << erStr << "-U" << "efuse:w:0xFC:m";
|
|
||||||
//use hfuse = 0x81 to prevent eeprom being erased with every flashing
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
QString lfuses;
|
|
||||||
QString tempFile = generateProcessUniqueTempFileName("ftemp.bin");
|
|
||||||
QStringList argread;
|
|
||||||
argread << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args <<"-U" << "lfuse:r:"+tempFile+":r";
|
|
||||||
FlashProcess flashProcess(bcd.getAVRDUDE(), argread, progress);
|
|
||||||
flashProcess.run();
|
|
||||||
QFile file(tempFile);
|
|
||||||
if (file.exists() && file.size()==1) {
|
|
||||||
file.open(QIODevice::ReadOnly);
|
|
||||||
char bin_flash[1];
|
|
||||||
file.read(bin_flash, 1);
|
|
||||||
if (bin_flash[0]==0x0E) {
|
|
||||||
lfuses = "lfuse:w:0x0E:m";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lfuses = "lfuse:w:0x3F:m";
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
qunlink(tempFile);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lfuses = "lfuse:w:0x3F:m";
|
|
||||||
}
|
|
||||||
|
|
||||||
QString erStr = eepromProtect ? "hfuse:w:0xC1:m" : "hfuse:w:0xC9:m";
|
|
||||||
str << "-U" << lfuses << "-U" << erStr << "-U" << "efuse:w:0xFF:m";
|
|
||||||
//use hfuse = 0x81 to prevent eeprom being erased with every flashing
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList arguments;
|
|
||||||
if (bcd.getMCU() == "m2560") {
|
|
||||||
arguments << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args << "-u" << str;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
arguments << "-c" << bcd.getProgrammer() << "-p" << bcd.getMCU() << args << "-B" << "100" << "-u" << str;
|
|
||||||
}
|
|
||||||
FlashProcess flashProcess(bcd.getAVRDUDE(), arguments, progress);
|
|
||||||
flashProcess.run();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,13 +141,11 @@ bool readFirmware(const QString & filename, ProgressWidget * progress)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(getCurrentBoard())) {
|
QString path = findMassstoragePath("FIRMWARE.BIN");
|
||||||
QString path = findMassstoragePath("FIRMWARE.BIN");
|
if (!path.isEmpty()) {
|
||||||
if (!path.isEmpty()) {
|
qDebug() << "readFirmware: reading" << path << "into" << filename;
|
||||||
qDebug() << "readFirmware: reading" << path << "into" << filename;
|
CopyProcess copyProcess(path, filename, progress);
|
||||||
CopyProcess copyProcess(path, filename, progress);
|
result = copyProcess.run();
|
||||||
result = copyProcess.run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
@ -288,13 +163,11 @@ bool readFirmware(const QString & filename, ProgressWidget * progress)
|
||||||
|
|
||||||
bool writeFirmware(const QString & filename, ProgressWidget * progress)
|
bool writeFirmware(const QString & filename, ProgressWidget * progress)
|
||||||
{
|
{
|
||||||
if (IS_ARM(getCurrentBoard())) {
|
QString path = findMassstoragePath("FIRMWARE.BIN");
|
||||||
QString path = findMassstoragePath("FIRMWARE.BIN");
|
if (!path.isEmpty()) {
|
||||||
if (!path.isEmpty()) {
|
qDebug() << "writeFirmware: writing" << path << "from" << filename;
|
||||||
qDebug() << "writeFirmware: writing" << path << "from" << filename;
|
CopyProcess copyProcess(filename, path, progress);
|
||||||
CopyProcess copyProcess(filename, path, progress);
|
return copyProcess.run();
|
||||||
return copyProcess.run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "writeFirmware: writing" << filename << "with" << getRadioInterfaceCmd() << getWriteFirmwareArgs(filename);
|
qDebug() << "writeFirmware: writing" << filename << "with" << getRadioInterfaceCmd() << getWriteFirmwareArgs(filename);
|
||||||
|
@ -339,26 +212,25 @@ bool readEeprom(const QString & filename, ProgressWidget * progress)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (IS_ARM(board)) {
|
QString path = findMassstoragePath("EEPROM.BIN");
|
||||||
QString path = findMassstoragePath("EEPROM.BIN");
|
if (path.isEmpty()) {
|
||||||
if (path.isEmpty()) {
|
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
||||||
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
path = findMassstoragePath("TARANIS.BIN");
|
||||||
path = findMassstoragePath("TARANIS.BIN");
|
|
||||||
}
|
|
||||||
if (path.isEmpty()) {
|
|
||||||
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
|
||||||
path = findMassstoragePath("ERSKY9X.BIN");
|
|
||||||
}
|
|
||||||
if (path.isEmpty()) {
|
|
||||||
RadioNotFoundDialog dialog(progress);
|
|
||||||
dialog.exec();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
CopyProcess copyProcess(path, filename, progress);
|
|
||||||
if (!copyProcess.run()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (path.isEmpty()) {
|
||||||
|
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
||||||
|
path = findMassstoragePath("ERSKY9X.BIN");
|
||||||
|
}
|
||||||
|
if (path.isEmpty()) {
|
||||||
|
RadioNotFoundDialog dialog(progress);
|
||||||
|
dialog.exec();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
CopyProcess copyProcess(path, filename, progress);
|
||||||
|
if (!copyProcess.run()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!IS_STM32(board)) {
|
if (!IS_STM32(board)) {
|
||||||
FlashProcess flashProcess(getRadioInterfaceCmd(), getReadEEpromCmd(filename), progress);
|
FlashProcess flashProcess(getRadioInterfaceCmd(), getReadEEpromCmd(filename), progress);
|
||||||
|
@ -375,20 +247,18 @@ bool writeEeprom(const QString & filename, ProgressWidget * progress)
|
||||||
{
|
{
|
||||||
Board::Type board = getCurrentBoard();
|
Board::Type board = getCurrentBoard();
|
||||||
|
|
||||||
if (IS_ARM(board)) {
|
QString path = findMassstoragePath("EEPROM.BIN");
|
||||||
QString path = findMassstoragePath("EEPROM.BIN");
|
if (path.isEmpty()) {
|
||||||
if (path.isEmpty()) {
|
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
||||||
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
path = findMassstoragePath("TARANIS.BIN");
|
||||||
path = findMassstoragePath("TARANIS.BIN");
|
}
|
||||||
}
|
if (path.isEmpty()) {
|
||||||
if (path.isEmpty()) {
|
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
||||||
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
path = findMassstoragePath("ERSKY9X.BIN");
|
||||||
path = findMassstoragePath("ERSKY9X.BIN");
|
}
|
||||||
}
|
if (!path.isEmpty()) {
|
||||||
if (!path.isEmpty()) {
|
CopyProcess copyProcess(filename, path, progress);
|
||||||
CopyProcess copyProcess(filename, path, progress);
|
return copyProcess.run();
|
||||||
return copyProcess.run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IS_TARANIS(board)) {
|
if (!IS_TARANIS(board)) {
|
||||||
|
@ -396,10 +266,8 @@ bool writeEeprom(const QString & filename, ProgressWidget * progress)
|
||||||
return flashProcess.run();
|
return flashProcess.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_ARM(board)) {
|
RadioNotFoundDialog dialog(progress);
|
||||||
RadioNotFoundDialog dialog(progress);
|
dialog.exec();
|
||||||
dialog.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,13 +30,9 @@ QString getRadioInterfaceCmd();
|
||||||
|
|
||||||
QString findMassstoragePath(const QString &filename, bool onlyPath = false);
|
QString findMassstoragePath(const QString &filename, bool onlyPath = false);
|
||||||
|
|
||||||
QStringList getAvrdudeArgs(const QString &cmd, const QString &filename);
|
|
||||||
QStringList getSambaArgs(const QString &tcl);
|
QStringList getSambaArgs(const QString &tcl);
|
||||||
QStringList getDfuArgs(const QString &cmd, const QString &filename);
|
QStringList getDfuArgs(const QString &cmd, const QString &filename);
|
||||||
|
|
||||||
void readAvrdudeFuses(ProgressWidget *progress);
|
|
||||||
void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress);
|
|
||||||
|
|
||||||
QStringList getReadEEpromCmd(const QString &filename);
|
QStringList getReadEEpromCmd(const QString &filename);
|
||||||
QStringList getWriteEEpromCmd(const QString &filename);
|
QStringList getWriteEEpromCmd(const QString &filename);
|
||||||
QStringList getReadFirmwareArgs(const QString &filename);
|
QStringList getReadFirmwareArgs(const QString &filename);
|
||||||
|
|
|
@ -64,7 +64,7 @@ void RleFile::EeFsCreate(uint8_t *eeprom, int size, Board::Type board, unsigned
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IS_TARANIS(board)) {
|
else {
|
||||||
eeFsArm = (EeFsArm *)eeprom;
|
eeFsArm = (EeFsArm *)eeprom;
|
||||||
eeFsVersion = 5;
|
eeFsVersion = 5;
|
||||||
eeFsSize = 8+4*62;
|
eeFsSize = 8+4*62;
|
||||||
|
@ -84,36 +84,6 @@ void RleFile::EeFsCreate(uint8_t *eeprom, int size, Board::Type board, unsigned
|
||||||
eeFsArm->freeList = eeFsFirstBlock;
|
eeFsArm->freeList = eeFsFirstBlock;
|
||||||
// EeFsFlush();
|
// EeFsFlush();
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
eeFs = (EeFs *)eeprom;
|
|
||||||
eeFsVersion = (IS_2560(board) || board==Board::BOARD_9X_M128) ? 5 : 4;
|
|
||||||
eeFsBlockSize = 16;
|
|
||||||
eeFsLinkSize = 1;
|
|
||||||
|
|
||||||
if (eeFsVersion == 5) {
|
|
||||||
eeFsSize = 4+3*36;
|
|
||||||
eeFsFirstBlock = 1;
|
|
||||||
eeFsBlocksOffset = 112 - 16;
|
|
||||||
eeFsBlocksMax = 1 + (4096-112)/16;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
eeFsSize = 4+3*20;
|
|
||||||
eeFsFirstBlock = 4;
|
|
||||||
eeFsBlocksOffset = 0;
|
|
||||||
eeFsBlocksMax = 2048/16;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(eeprom, 0, size);
|
|
||||||
eeFs->version = eeFsVersion;
|
|
||||||
eeFs->mySize = eeFsSize;
|
|
||||||
eeFs->freeList = 0;
|
|
||||||
eeFs->bs = eeFsBlockSize;
|
|
||||||
for (unsigned int i=eeFsFirstBlock; i<eeFsBlocksMax-1; i++)
|
|
||||||
EeFsSetLink(i, i+1);
|
|
||||||
EeFsSetLink(eeFsBlocksMax-1, 0);
|
|
||||||
eeFs->freeList = eeFsFirstBlock;
|
|
||||||
// EeFsFlush();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PACK(struct EepromFileHeader
|
PACK(struct EepromFileHeader
|
||||||
|
@ -146,7 +116,7 @@ bool RleFile::EeFsOpen(uint8_t *eeprom, int size, Board::Type board)
|
||||||
searchFat();
|
searchFat();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (IS_TARANIS(board)) {
|
else {
|
||||||
eeFsArm = (EeFsArm *)eeprom;
|
eeFsArm = (EeFsArm *)eeprom;
|
||||||
eeFsVersion = eeFsArm->version;
|
eeFsVersion = eeFsArm->version;
|
||||||
eeFsSize = 8+4*62;
|
eeFsSize = 8+4*62;
|
||||||
|
@ -157,29 +127,6 @@ bool RleFile::EeFsOpen(uint8_t *eeprom, int size, Board::Type board)
|
||||||
eeFsBlocksMax = 1 + (Boards::getEEpromSize(board)-eeFsSize) / eeFsBlockSize;
|
eeFsBlocksMax = 1 + (Boards::getEEpromSize(board)-eeFsSize) / eeFsBlockSize;
|
||||||
return eeFsArm->mySize == eeFsSize;
|
return eeFsArm->mySize == eeFsSize;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
eeFs = (EeFs *)eeprom;
|
|
||||||
eeFsVersion = eeFs->version;
|
|
||||||
eeFsBlockSize = 16;
|
|
||||||
eeFsLinkSize = 1;
|
|
||||||
if (eeFsVersion == 5) {
|
|
||||||
eeFsSize = 4+3*36;
|
|
||||||
eeFsFirstBlock = 1;
|
|
||||||
eeFsBlocksOffset = 112 - 16;
|
|
||||||
eeFsBlocksMax = 1 + (4096-112)/16;
|
|
||||||
}
|
|
||||||
else if (eeFsVersion == 4) {
|
|
||||||
eeFsSize = 4+3*20;
|
|
||||||
eeFsFirstBlock = 4;
|
|
||||||
eeFsBlocksOffset = 0;
|
|
||||||
eeFsBlocksMax = 2048/16;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return eeFs->mySize == eeFsSize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RleFile::eeprom_read_block (void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
void RleFile::eeprom_read_block (void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
||||||
|
@ -206,25 +153,16 @@ void RleFile::EeFsWrite(unsigned int blk, unsigned int ofs, uint8_t val)
|
||||||
|
|
||||||
unsigned int RleFile::EeFsGetLink(unsigned int blk)
|
unsigned int RleFile::EeFsGetLink(unsigned int blk)
|
||||||
{
|
{
|
||||||
if (IS_ARM(board)) {
|
int16_t ret;
|
||||||
int16_t ret;
|
eeprom_read_block((uint8_t *)&ret, blk*eeFsBlockSize+eeFsBlocksOffset, eeFsLinkSize);
|
||||||
eeprom_read_block((uint8_t *)&ret, blk*eeFsBlockSize+eeFsBlocksOffset, eeFsLinkSize);
|
return ret;
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return EeFsRead(blk, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RleFile::EeFsSetLink(unsigned int blk, unsigned int val)
|
void RleFile::EeFsSetLink(unsigned int blk, unsigned int val)
|
||||||
{
|
{
|
||||||
if (IS_ARM(board)) {
|
int16_t s_link = val;
|
||||||
int16_t s_link = val;
|
eeprom_write_block((uint8_t *)&s_link, (blk*eeFsBlockSize)+eeFsBlocksOffset, eeFsLinkSize);
|
||||||
eeprom_write_block((uint8_t *)&s_link, (blk*eeFsBlockSize)+eeFsBlocksOffset, eeFsLinkSize);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
EeFsWrite(blk, 0, val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t RleFile::EeFsGetDat(unsigned int blk, unsigned int ofs)
|
uint8_t RleFile::EeFsGetDat(unsigned int blk, unsigned int ofs)
|
||||||
|
@ -244,10 +182,7 @@ unsigned int RleFile::EeFsGetFree()
|
||||||
|
|
||||||
unsigned int ret = 0;
|
unsigned int ret = 0;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
if (IS_ARM(board))
|
i = eeFsArm->freeList;
|
||||||
i = eeFsArm->freeList;
|
|
||||||
else
|
|
||||||
i = eeFs->freeList;
|
|
||||||
|
|
||||||
while (i) {
|
while (i) {
|
||||||
ret += eeFsBlockSize-eeFsLinkSize;
|
ret += eeFsBlockSize-eeFsLinkSize;
|
||||||
|
@ -266,14 +201,8 @@ void RleFile::EeFsFree(unsigned int blk)
|
||||||
|
|
||||||
unsigned int i = blk;
|
unsigned int i = blk;
|
||||||
while (EeFsGetLink(i)) i = EeFsGetLink(i);
|
while (EeFsGetLink(i)) i = EeFsGetLink(i);
|
||||||
if (IS_ARM(board)) {
|
EeFsSetLink(i, eeFsArm->freeList);
|
||||||
EeFsSetLink(i, eeFsArm->freeList);
|
eeFsArm->freeList = blk; //chain in front
|
||||||
eeFsArm->freeList = blk; //chain in front
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
EeFsSetLink(i, eeFs->freeList);
|
|
||||||
eeFs->freeList = blk; //chain in front
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -283,12 +212,9 @@ unsigned int RleFile::EeFsAlloc()
|
||||||
{
|
{
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 0;
|
return 0;
|
||||||
unsigned int ret = (IS_ARM(board) ? eeFsArm->freeList : eeFs->freeList);
|
unsigned int ret = eeFsArm->freeList;
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (IS_ARM(board))
|
eeFsArm->freeList = EeFsGetLink(ret);
|
||||||
eeFsArm->freeList = EeFsGetLink(ret);
|
|
||||||
else
|
|
||||||
eeFs->freeList = EeFsGetLink(ret);
|
|
||||||
EeFsSetLink(ret, 0);
|
EeFsSetLink(ret, 0);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -299,7 +225,7 @@ unsigned int RleFile::size(unsigned int id)
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return IS_ARM(board) ? eeFsArm->files[id].size : eeFs->files[id].size;
|
return eeFsArm->files[id].size;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int RleFile::openRd(unsigned int i_fileId)
|
unsigned int RleFile::openRd(unsigned int i_fileId)
|
||||||
|
@ -327,15 +253,12 @@ unsigned int RleFile::openRd(unsigned int i_fileId)
|
||||||
else {
|
else {
|
||||||
m_fileId = i_fileId;
|
m_fileId = i_fileId;
|
||||||
m_pos = 0;
|
m_pos = 0;
|
||||||
m_currBlk = (IS_ARM(board) ? eeFsArm->files[m_fileId].startBlk : eeFs->files[m_fileId].startBlk);
|
m_currBlk = eeFsArm->files[m_fileId].startBlk;
|
||||||
m_ofs = 0;
|
m_ofs = 0;
|
||||||
m_zeroes = 0;
|
m_zeroes = 0;
|
||||||
m_bRlc = 0;
|
m_bRlc = 0;
|
||||||
m_err = ERR_NONE; //error reasons
|
m_err = ERR_NONE; //error reasons
|
||||||
if (IS_ARM(board))
|
return eeFsArm->files[m_fileId].typ;
|
||||||
return eeFsArm->files[m_fileId].typ;
|
|
||||||
else
|
|
||||||
return eeFs->files[m_fileId].typ;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,14 +267,14 @@ unsigned int RleFile::read(uint8_t *buf, unsigned int i_len)
|
||||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unsigned int len = IS_ARM(board) ? eeFsArm->files[m_fileId].size : eeFs->files[m_fileId].size;
|
unsigned int len = eeFsArm->files[m_fileId].size;
|
||||||
len -= m_pos;
|
len -= m_pos;
|
||||||
if (i_len > len) i_len = len;
|
if (i_len > len) i_len = len;
|
||||||
len = i_len;
|
len = i_len;
|
||||||
while(len) {
|
while(len) {
|
||||||
if (!m_currBlk) break;
|
if (!m_currBlk) break;
|
||||||
*buf++ = EeFsGetDat(m_currBlk, m_ofs++);
|
*buf++ = EeFsGetDat(m_currBlk, m_ofs++);
|
||||||
if (m_ofs >= (eeFsBlockSize-(IS_ARM(board)? 2 : 1))) {
|
if (m_ofs >= (eeFsBlockSize - 2)) {
|
||||||
m_ofs = 0;
|
m_ofs = 0;
|
||||||
m_currBlk = EeFsGetLink(m_currBlk);
|
m_currBlk = EeFsGetLink(m_currBlk);
|
||||||
}
|
}
|
||||||
|
@ -492,10 +415,7 @@ unsigned int RleFile::write(const uint8_t *buf, unsigned int i_len)
|
||||||
unsigned int len = i_len;
|
unsigned int len = i_len;
|
||||||
if (!m_currBlk && m_pos==0)
|
if (!m_currBlk && m_pos==0)
|
||||||
{
|
{
|
||||||
if (IS_ARM(board))
|
eeFsArm->files[m_fileId].startBlk = m_currBlk = EeFsAlloc();
|
||||||
eeFsArm->files[m_fileId].startBlk = m_currBlk = EeFsAlloc();
|
|
||||||
else
|
|
||||||
eeFs->files[m_fileId].startBlk = m_currBlk = EeFsAlloc();
|
|
||||||
}
|
}
|
||||||
while (len)
|
while (len)
|
||||||
{
|
{
|
||||||
|
@ -527,23 +447,15 @@ unsigned int RleFile::write(const uint8_t *buf, unsigned int i_len)
|
||||||
void RleFile::create(unsigned int i_fileId, unsigned int typ)
|
void RleFile::create(unsigned int i_fileId, unsigned int typ)
|
||||||
{
|
{
|
||||||
openRd(i_fileId); //internal use
|
openRd(i_fileId); //internal use
|
||||||
if (IS_ARM(board)) {
|
eeFsArm->files[i_fileId].typ = typ;
|
||||||
eeFsArm->files[i_fileId].typ = typ;
|
eeFsArm->files[i_fileId].size = 0;
|
||||||
eeFsArm->files[i_fileId].size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
eeFs->files[i_fileId].typ = typ;
|
|
||||||
eeFs->files[i_fileId].size = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RleFile::closeTrunc()
|
void RleFile::closeTrunc()
|
||||||
{
|
{
|
||||||
unsigned int fri=0;
|
unsigned int fri=0;
|
||||||
if (IS_ARM(board))
|
eeFsArm->files[m_fileId].size = m_pos;
|
||||||
eeFsArm->files[m_fileId].size = m_pos;
|
|
||||||
else
|
|
||||||
eeFs->files[m_fileId].size = m_pos;
|
|
||||||
if (m_currBlk && ( fri = EeFsGetLink(m_currBlk))) EeFsSetLink(m_currBlk, 0);
|
if (m_currBlk && ( fri = EeFsGetLink(m_currBlk))) EeFsSetLink(m_currBlk, 0);
|
||||||
if(fri) EeFsFree( fri ); //chain in
|
if(fri) EeFsFree( fri ); //chain in
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,27 +61,28 @@ void WizMix::maxMixSwitch(char *name, MixData &mix, int channel, int sw, int wei
|
||||||
void WizMix::addMix(ModelData &model, Input input, int weight, int channel, int & mixIndex)
|
void WizMix::addMix(ModelData &model, Input input, int weight, int channel, int & mixIndex)
|
||||||
{
|
{
|
||||||
if (input != NO_INPUT) {
|
if (input != NO_INPUT) {
|
||||||
bool isHorusOrTaranis = IS_ARM(getCurrentBoard());
|
|
||||||
if (input >= RUDDER_INPUT && input <= AILERONS_INPUT) {
|
if (input >= RUDDER_INPUT && input <= AILERONS_INPUT) {
|
||||||
MixData & mix = model.mixData[mixIndex++];
|
MixData & mix = model.mixData[mixIndex++];
|
||||||
mix.destCh = channel+1;
|
mix.destCh = channel+1;
|
||||||
if (isHorusOrTaranis){
|
if (IS_SKY9X(getCurrentBoard())) {
|
||||||
|
mix.srcRaw = RawSource(SOURCE_TYPE_STICK, input-1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
int channel = settings.getDefaultChannel(input-1);
|
int channel = settings.getDefaultChannel(input-1);
|
||||||
mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, channel);
|
mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, channel);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
mix.srcRaw = RawSource(SOURCE_TYPE_STICK, input-1);
|
|
||||||
mix.weight = weight;
|
mix.weight = weight;
|
||||||
}
|
}
|
||||||
else if (input==FLAPS_INPUT){
|
else if (input==FLAPS_INPUT){
|
||||||
// There ought to be some kind of constants for switches somewhere...
|
// There ought to be some kind of constants for switches somewhere...
|
||||||
maxMixSwitch((char *)"Flaps Up", model.mixData[mixIndex++], channel+1, isHorusOrTaranis ? SWITCH_SA0 :-SWITCH_ELE , weight); //Taranis-Horus SA-UP, 9X ELE-UP
|
maxMixSwitch((char *)"Flaps Up", model.mixData[mixIndex++], channel+1, IS_SKY9X(getCurrentBoard()) ? -SWITCH_ELE : SWITCH_SA0, weight); //Taranis-Horus SA-UP, 9X ELE-UP
|
||||||
maxMixSwitch((char *)"Flaps Dn", model.mixData[mixIndex++], channel+1, isHorusOrTaranis ? SWITCH_SA2 : SWITCH_ELE , -weight); //Taranis-Horus SA-DOWN, 9X ELE-DOWN
|
maxMixSwitch((char *)"Flaps Dn", model.mixData[mixIndex++], channel+1, IS_SKY9X(getCurrentBoard()) ? SWITCH_ELE : SWITCH_SA2, -weight); //Taranis-Horus SA-DOWN, 9X ELE-DOWN
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (input==AIRBRAKES_INPUT){
|
else if (input==AIRBRAKES_INPUT){
|
||||||
maxMixSwitch((char *)"AirbkOff", model.mixData[mixIndex++], channel+1, isHorusOrTaranis ? SWITCH_SE0 :-SWITCH_RUD , -weight); //Taranis-Horus SE-UP, 9X RUD-UP
|
maxMixSwitch((char *)"AirbkOff", model.mixData[mixIndex++], channel+1, IS_SKY9X(getCurrentBoard()) ? -SWITCH_RUD : SWITCH_SE0, -weight); //Taranis-Horus SE-UP, 9X RUD-UP
|
||||||
maxMixSwitch((char *)"AirbkOn", model.mixData[mixIndex++], channel+1, isHorusOrTaranis ? SWITCH_SE2 : SWITCH_RUD , weight); //Tatanis-Horus SE-DOWN, 9X RUD-DOWN
|
maxMixSwitch((char *)"AirbkOn", model.mixData[mixIndex++], channel+1, IS_SKY9X(getCurrentBoard()) ? SWITCH_RUD : SWITCH_SE2, weight); //Tatanis-Horus SE-DOWN, 9X RUD-DOWN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,7 +121,7 @@ WizMix::operator ModelData()
|
||||||
mix.srcRaw = SOURCE_TYPE_MAX;
|
mix.srcRaw = SOURCE_TYPE_MAX;
|
||||||
mix.weight = -100;
|
mix.weight = -100;
|
||||||
mix.swtch.type = SWITCH_TYPE_SWITCH;
|
mix.swtch.type = SWITCH_TYPE_SWITCH;
|
||||||
mix.swtch.index = IS_ARM(getCurrentBoard()) ? SWITCH_SF0 : SWITCH_THR;
|
mix.swtch.index = IS_SKY9X(getCurrentBoard()) ? SWITCH_THR : SWITCH_SF0;
|
||||||
mix.mltpx = MLTPX_REP;
|
mix.mltpx = MLTPX_REP;
|
||||||
memset(mix.name, 0, sizeof(mix.name));
|
memset(mix.name, 0, sizeof(mix.name));
|
||||||
strncpy(mix.name, "Cut", MIXDATA_NAME_LEN);
|
strncpy(mix.name, "Cut", MIXDATA_NAME_LEN);
|
||||||
|
|
|
@ -15,9 +15,6 @@ STM32_OPTIONS = -DLUA=YES
|
||||||
build:
|
build:
|
||||||
mkdir $(BUILDDIR);
|
mkdir $(BUILDDIR);
|
||||||
|
|
||||||
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=9X ../ ; make libsimulator
|
|
||||||
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=GRUVIN9X ../ ; make libsimulator
|
|
||||||
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=MEGA2560 ../ ; make libsimulator
|
|
||||||
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=SKY9X ../ ; make libsimulator
|
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=SKY9X ../ ; make libsimulator
|
||||||
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=9XRPRO ../ ; make libsimulator
|
cd $(BUILDDIR); cmake $(COMMON_OPTIONS) -DPCB=9XRPRO ../ ; make libsimulator
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ const uint8_t * FrskyDeviceFirmwareUpdate::readFullDuplexFrame(ModuleFifo & fifo
|
||||||
|
|
||||||
const uint8_t * FrskyDeviceFirmwareUpdate::readHalfDuplexFrame(uint32_t timeout)
|
const uint8_t * FrskyDeviceFirmwareUpdate::readHalfDuplexFrame(uint32_t timeout)
|
||||||
{
|
{
|
||||||
for (int i=timeout; i>=0; i--) {
|
for (int i = timeout; i >= 0; i--) {
|
||||||
uint8_t byte ;
|
uint8_t byte ;
|
||||||
while (telemetryGetByte(&byte)) {
|
while (telemetryGetByte(&byte)) {
|
||||||
if (pushFrskyTelemetryData(byte)) {
|
if (pushFrskyTelemetryData(byte)) {
|
||||||
|
|
|
@ -613,10 +613,8 @@ class OpenTxSimulatorFactory: public SimulatorFactory
|
||||||
return Board::BOARD_TARANIS_X9LITES;
|
return Board::BOARD_TARANIS_X9LITES;
|
||||||
#elif defined(PCBX9LITE)
|
#elif defined(PCBX9LITE)
|
||||||
return Board::BOARD_TARANIS_X9LITE;
|
return Board::BOARD_TARANIS_X9LITE;
|
||||||
#elif defined(PCBTARANIS)
|
|
||||||
return Board::BOARD_TARANIS_X9D;
|
|
||||||
#else
|
#else
|
||||||
return Board::BOARD_9X_M64;
|
return Board::BOARD_TARANIS_X9D;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue