diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index 9e03d737..a2288e00 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -230,6 +230,7 @@ set(CPPSRC apps/ui_nrf_rx.cpp apps/ui_aprs_tx.cpp apps/ui_bht_tx.cpp + apps/ui_dfu_menu.cpp apps/ui_coasterp.cpp apps/ui_debug.cpp apps/ui_encoders.cpp diff --git a/firmware/application/apps/ui_dfu_menu.cpp b/firmware/application/apps/ui_dfu_menu.cpp new file mode 100644 index 00000000..69abe02d --- /dev/null +++ b/firmware/application/apps/ui_dfu_menu.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2023 Bernd Herzog + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui_dfu_menu.hpp" +#include "portapack_shared_memory.hpp" + +namespace ui { + +DfuMenu::DfuMenu(NavigationView& nav) : nav_ (nav) { + add_children({ + &text_info, + &progress, + &dummy, + }); +} + +void DfuMenu::focus() { + dummy.focus(); +} + +void DfuMenu::paint(Painter& painter) { + painter.fill_rectangle( + {{50,50} , {50 , 50}}, + ui::Color::blue() + ); +} + +} /* namespace ui */ diff --git a/firmware/application/apps/ui_dfu_menu.hpp b/firmware/application/apps/ui_dfu_menu.hpp new file mode 100644 index 00000000..d184d2cd --- /dev/null +++ b/firmware/application/apps/ui_dfu_menu.hpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2023 Bernd Herzog + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __UI_DFU_MENU_H__ +#define __UI_DFU_MENU_H__ + +#include + +#include "ui_widget.hpp" +#include "event_m0.hpp" + +namespace ui { +class NavigationView; + +class DfuMenu : public View { +public: + DfuMenu(NavigationView& nav); + ~DfuMenu() = default; + + void focus() override; + void paint(Painter& painter) override; + + std::string title() const override { return "DFU Menu"; }; + +private: + NavigationView& nav_; + + Text text_info { + { 10 * 8, 16 * 8, 10 * 8, 16 }, + "Working..." + }; + + ProgressBar progress { + { 2 * 8, 19 * 8, 26 * 8, 24 } + }; + + Button dummy { + { 240, 0, 0, 0 }, + "" + }; +}; + +} /* namespace ui */ + +#endif/*__UI_DFU_MENU_H__*/ diff --git a/firmware/application/event_m0.cpp b/firmware/application/event_m0.cpp index 583c4004..146492b9 100644 --- a/firmware/application/event_m0.cpp +++ b/firmware/application/event_m0.cpp @@ -43,6 +43,7 @@ using namespace lpc43xx; #include #include "ui_font_fixed_8x16.hpp" +#include "ui_navigation.hpp" extern "C" { @@ -262,6 +263,8 @@ void EventDispatcher::on_touch_event(ui::TouchEvent event) { void EventDispatcher::handle_lcd_frame_sync() { DisplayFrameSyncMessage message; message_map.send(&message); + + static_cast(top_widget)->paint_overlay(); painter.paint_widget_tree(top_widget); portapack::backlight()->on(); @@ -304,7 +307,12 @@ void EventDispatcher::handle_switches() { if( switches_state[i] ) { const auto event = static_cast(i); if( !event_bubble_key(event) ) { - context.focus_manager().update(top_widget, event); + if (switches_state[(size_t)ui::KeyEvent::Dfu]) { + static_cast(top_widget)->toggle_overlay(); + } + else { + context.focus_manager().update(top_widget, event); + } } in_key_event = true; diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 179e734f..a68e02fe 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -748,6 +748,24 @@ Context& SystemView::context() const { return context_; } +void SystemView::toggle_overlay() { + if (overlay_active){ + this->remove_child(&this->overlay); + this->set_dirty(); + } + else{ + this->add_child(&this->overlay); + this->set_dirty(); + } + overlay_active = !overlay_active; +} + +void SystemView::paint_overlay() { + if (overlay_active){ + this->overlay.set_dirty(); + } +} + /* ***********************************************************************/ void BMPView::focus() { diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index a1a0b5d0..a0ebe4fc 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -33,6 +33,7 @@ #include "ui_channel.hpp" #include "ui_audio.hpp" #include "ui_sd_card_status_view.hpp" +#include "ui_dfu_menu.hpp" #include "bitmap.hpp" #include "ff.h" @@ -290,10 +291,15 @@ namespace ui const Rect parent_rect); Context &context() const override; + void toggle_overlay(); + void paint_overlay(); private: + bool overlay_active {false}; + SystemStatusView status_view{navigation_view}; InformationView info_view{navigation_view}; + DfuMenu overlay{navigation_view}; NavigationView navigation_view{}; Context &context_; };