1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 00:35:18 +03:00

Merge pull request #8412 from opentx/raphaelcoeffic/fix-model-select

2.4 fix model select
This commit is contained in:
Bertrand Songis 2021-04-03 10:37:32 +02:00 committed by GitHub
commit a3a375efc8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 73 additions and 35 deletions

View file

@ -63,6 +63,12 @@ set(FIRMWARE_C_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware targ
set(FIRMWARE_CXX_FLAGS "" CACHE STRING "Additional flags for firmware target c++ compiler (note: all CMAKE_CXX_FLAGS[_*] are ignored for firmware/bootloader).") set(FIRMWARE_CXX_FLAGS "" CACHE STRING "Additional flags for firmware target c++ compiler (note: all CMAKE_CXX_FLAGS[_*] are ignored for firmware/bootloader).")
set(FIRMWARE_CXX_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c++ compiler (note: CMAKE_CXX_FLAGS_DEBUG is ignored for firmware/bootloader).") set(FIRMWARE_CXX_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c++ compiler (note: CMAKE_CXX_FLAGS_DEBUG is ignored for firmware/bootloader).")
set(FIRMWARE_C_COMPILER "arm-none-eabi-gcc" CACHE STRING "Specific C compiler for firmware target.")
set(FIRMWARE_CXX_COMPILER "arm-none-eabi-g++" CACHE STRING "Specific C++ compiler for firmware target.")
set(FIRMWARE_ASM_COMPILER "arm-none-eabi-as" CACHE STRING "Specific assembler for firmware target.")
set(FIRMWARE_OBJCOPY "arm-none-eabi-objcopy" CACHE STRING "Specific objcopy for firmware target.")
set(FIRMWARE_SIZE "arm-none-eabi-size" CACHE STRING "Specific size for firmware target.")
set(THIRDPARTY_DIR thirdparty) set(THIRDPARTY_DIR thirdparty)
set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src) set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src)
set(COOS_DIR ${THIRDPARTY_DIR}/CoOS) set(COOS_DIR ${THIRDPARTY_DIR}/CoOS)
@ -497,9 +503,9 @@ if(NOT MSVC)
if(ARCH STREQUAL ARM) if(ARCH STREQUAL ARM)
enable_language(ASM) enable_language(ASM)
set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_C_COMPILER ${FIRMWARE_C_COMPILER})
set(CMAKE_CXX_COMPILER arm-none-eabi-g++) set(CMAKE_CXX_COMPILER ${FIRMWARE_CXX_COMPILER})
set(CMAKE_ASM_COMPILER arm-none-eabi-as) set(CMAKE_ASM_COMPILER ${FIRMWARE_ASM_COMPILER})
set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_VERSION 1)
@ -559,7 +565,7 @@ if(NOT MSVC)
add_custom_command( add_custom_command(
TARGET firmware POST_BUILD TARGET firmware POST_BUILD
COMMAND arm-none-eabi-objcopy -O binary firmware.elf firmware.bin COMMAND ${FIRMWARE_OBJCOPY} -O binary firmware.elf firmware.bin
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )
@ -572,7 +578,7 @@ if(NOT MSVC)
) )
else() else()
add_custom_target(firmware-size add_custom_target(firmware-size
COMMAND arm-none-eabi-size -A firmware.elf COMMAND ${FIRMWARE_SIZE} -A firmware.elf
DEPENDS firmware DEPENDS firmware
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )

View file

@ -51,9 +51,7 @@ uint8_t aux2SerialTracesEnabled();
#elif defined(DEBUG) #elif defined(DEBUG)
#define debugPrintf(...) do { serialPrintf(__VA_ARGS__); } while(0) #define debugPrintf(...) do { serialPrintf(__VA_ARGS__); } while(0)
#else #else
inline void debugPrintf(const char *, ...) #define debugPrintf(...)
{
}
#endif #endif
#define TRACE_TIME_FORMAT "%0.2f " #define TRACE_TIME_FORMAT "%0.2f "

View file

@ -37,7 +37,7 @@ void registerLayout(const LayoutFactory * factory)
const LayoutFactory * getLayoutFactory(const char * name) const LayoutFactory * getLayoutFactory(const char * name)
{ {
std::list<const LayoutFactory *>::const_iterator it = getRegisteredLayouts().cbegin(); auto it = getRegisteredLayouts().cbegin();
for (; it != getRegisteredLayouts().cend(); ++it) { for (; it != getRegisteredLayouts().cend(); ++it) {
if (!strcmp(name, (*it)->getId())) { if (!strcmp(name, (*it)->getId())) {
return (*it); return (*it);
@ -55,21 +55,48 @@ Layout * loadLayout(const char * name, Layout::PersistentData * persistentData)
return nullptr; return nullptr;
} }
void deleteCustomScreens()
{
for (unsigned int i = 0; i < MAX_CUSTOM_SCREENS; i++) {
auto& screen = customScreens[i];
if (screen) {
screen->detach();
delete screen;
screen = nullptr;
}
}
}
extern const LayoutFactory * defaultLayout;
void loadDefaultLayout()
{
auto& screen = customScreens[0];
auto& screenData = g_model.screenData[0];
if (screen == nullptr && defaultLayout != nullptr) {
strcpy(screenData.layoutName, defaultLayout->getName());
screen = defaultLayout->create(&screenData.layoutData);
if (screen) {
screen->attach(ViewMain::instance);
}
}
}
void loadCustomScreens() void loadCustomScreens()
{ {
for (unsigned int i = 0; i < MAX_CUSTOM_SCREENS; i++) { for (unsigned int i = 0; i < MAX_CUSTOM_SCREENS; i++) {
delete customScreens[i];
char name[LAYOUT_NAME_LEN + 1]; auto& screen = customScreens[i];
memset(name, 0, sizeof(name)); screen = loadLayout(g_model.screenData[i].layoutName,
strncpy(name, g_model.screenData[i].layoutName, LAYOUT_NAME_LEN); &g_model.screenData[i].layoutData);
customScreens[i] = loadLayout(name, &g_model.screenData[i].layoutData);
if (screen) {
screen->attach(ViewMain::instance);
}
} }
if (customScreens[0] == nullptr && getRegisteredLayouts().size()) { //customScreens[g_model.view]->attach(ViewMain::instance);
customScreens[0] = getRegisteredLayouts().front()->create(&g_model.screenData[0].layoutData);
}
customScreens[g_model.view]->attach(ViewMain::instance);
} }
void Layout::decorate(bool topbar, bool sliders, bool trims, bool flightMode) void Layout::decorate(bool topbar, bool sliders, bool trims, bool flightMode)

View file

@ -123,6 +123,11 @@ class BaseLayoutFactory: public LayoutFactory
}; };
Layout * loadLayout(const char * name, Layout::PersistentData * persistentData); Layout * loadLayout(const char * name, Layout::PersistentData * persistentData);
// intented for new models
void loadDefaultLayout();
// intended for existing models
void loadCustomScreens(); void loadCustomScreens();
void drawTrimsAndSliders(Layout::PersistentData * persistentData); void drawTrimsAndSliders(Layout::PersistentData * persistentData);

View file

@ -211,17 +211,23 @@ class ModelSelectFooter: public Window {
dc->drawSolidFilledRect(0, 0, width(), height(), DISABLE_COLOR); dc->drawSolidFilledRect(0, 0, width(), height(), DISABLE_COLOR);
uint32_t size = sdGetSize() / 100; uint32_t size = sdGetSize() / 100;
coord_t x = 7; coord_t x = 7;
dc->drawMask(7, 4, modelselSdFreeBitmap, DEFAULT_COLOR); if (modelselSdFreeBitmap) {
x += modelselSdFreeBitmap->width() + 3; dc->drawMask(7, 4, modelselSdFreeBitmap, DEFAULT_COLOR);
x += modelselSdFreeBitmap->width() + 3;
}
x = dc->drawNumber(x, 3, size, PREC1|FONT(XS), 0, nullptr, "GB"); x = dc->drawNumber(x, 3, size, PREC1|FONT(XS), 0, nullptr, "GB");
x += 20; x += 20;
dc->drawMask(x, 4, modelselModelQtyBitmap, DEFAULT_COLOR); if (modelselModelQtyBitmap) {
x += modelselModelQtyBitmap->width() + 3; dc->drawMask(x, 4, modelselModelQtyBitmap, DEFAULT_COLOR);
x += modelselModelQtyBitmap->width() + 3;
}
x = dc->drawNumber(x, 3, modelslist.getModelsCount(), FONT(XS)); x = dc->drawNumber(x, 3, modelslist.getModelsCount(), FONT(XS));
if (currentModel) { if (currentModel) {
x += 20; x += 20;
dc->drawMask(x, 4, modelselModelNameBitmap, DEFAULT_COLOR); if (modelselModelNameBitmap) {
x += modelselModelNameBitmap->width() + 3; dc->drawMask(x, 4, modelselModelNameBitmap, DEFAULT_COLOR);
x += modelselModelNameBitmap->width() + 3;
}
dc->drawText(x, 3, currentModel->modelFilename, FONT(XS) | DEFAULT_COLOR); dc->drawText(x, 3, currentModel->modelFilename, FONT(XS) | DEFAULT_COLOR);
} }
} }
@ -275,8 +281,7 @@ class ModelCategoryPageBody: public FormWindow {
loadModel(g_eeGeneral.currModelFilename, false); loadModel(g_eeGeneral.currModelFilename, false);
storageDirty(EE_GENERAL); storageDirty(EE_GENERAL);
storageCheck(true); storageCheck(true);
// chainMenu(menuMainView);
postModelLoad(true);
modelslist.setCurrentModel(model); modelslist.setCurrentModel(model);
update(); // modelslist.getModelIndex(modelCell)); update(); // modelslist.getModelIndex(modelCell));
}); });
@ -368,6 +373,7 @@ ModelSelectMenu::ModelSelectMenu():
{ {
modelslist.load(); modelslist.load();
TRACE("TabsGroup: %p", this);
for (auto category: modelslist.getCategories()) { for (auto category: modelslist.getCategories()) {
addTab(new ModelCategoryPage(category)); addTab(new ModelCategoryPage(category));
} }

View file

@ -139,7 +139,7 @@ void ViewMain::openMenu()
menu->addLine(STR_MONITOR_SCREENS, []() { menu->addLine(STR_MONITOR_SCREENS, []() {
new ChannelsViewMenu(); new ChannelsViewMenu();
}); });
menu->addLine(STR_RESET_SUBMENU, [menu, this]() { menu->addLine(STR_RESET_SUBMENU, [this]() {
Menu * resetMenu = new Menu(this); Menu * resetMenu = new Menu(this);
resetMenu->addLine(STR_RESET_FLIGHT, []() { resetMenu->addLine(STR_RESET_FLIGHT, []() {
flightReset(); flightReset();

View file

@ -511,12 +511,8 @@ void modelDefault(uint8_t id)
strAppendUnsigned(strAppend(g_model.header.name, STR_MODEL), id + 1, 2); strAppendUnsigned(strAppend(g_model.header.name, STR_MODEL), id + 1, 2);
#if defined(COLORLCD) #if defined(COLORLCD)
extern const LayoutFactory * defaultLayout; loadDefaultLayout();
delete customScreens[0];
customScreens[0] = defaultLayout->create(&g_model.screenData[0].layoutData);
strcpy(g_model.screenData[0].layoutName, "Layout2P1");
// extern const WidgetFactory * defaultWidget;
// customScreens[0]->createWidget(0, defaultWidget);
// enable switch warnings // enable switch warnings
for (int i = 0; i < NUM_SWITCHES; i++) { for (int i = 0; i < NUM_SWITCHES; i++) {
g_model.switchWarningState |= (1 << (3*i)); g_model.switchWarningState |= (1 << (3*i));

View file

@ -136,7 +136,7 @@ static inline bool isVBatBridgeEnabled()
extern "C" { extern "C" {
#endif #endif
inline uint32_t ticksNow() static inline uint32_t ticksNow()
{ {
#if defined(SIMU) #if defined(SIMU)
return 0; return 0;