CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
InfoView.h
Go to the documentation of this file.
1#pragma once
2
3#include "cdc_ui/IView.h"
4#include "cdc_core/Raii.h"
5#include <cstdint>
6
7namespace cdc::ui {
8
20class InfoView : public ViewBase {
21public:
22 static constexpr uint16_t MAX_TEXT_LEN = 2048;
23 static constexpr uint8_t VISIBLE_LINES = 6;
24 static constexpr uint8_t LINE_HEIGHT = 14;
25
31 void init(const char* title, const char* text);
32
36 void setHint(const char* hint) { customHint_ = hint; }
37
42 using YesNoCallback = void(*)(void* userData);
43 void setYesNoCallbacks(YesNoCallback onYes, YesNoCallback onNo, void* userData = nullptr) {
44 onYes_ = onYes;
45 onNo_ = onNo;
46 callbackUserData_ = userData;
47 }
48
53 using MenuCallback = void(*)(void* userData);
54 void setOnMenu(MenuCallback onMenu, void* userData = nullptr) {
55 onMenu_ = onMenu;
56 menuUserData_ = userData;
57 }
58
59 // IView implementation
60 void render(bool partial) override;
61 InputResult onKey(char key) override;
62 InputResult onLongPress(char key) override;
63 const char* getName() const override { return "InfoView"; }
64 const char* getFooterHint() const override;
65
66private:
67 static constexpr uint16_t MAX_TITLE_LEN = 64;
68
69 char titleBuf_[MAX_TITLE_LEN];
70 // Body text lives in PSRAM (allocated lazily on first init); the buffer is
71 // large and only touched from the main/UI task, so it must not sit in the
72 // scarce internal heap.
74 const char* customHint_ = nullptr;
75 uint16_t scrollLine_ = 0;
76 uint16_t totalLines_ = 0;
77 YesNoCallback onYes_ = nullptr;
78 YesNoCallback onNo_ = nullptr;
79 void* callbackUserData_ = nullptr;
80 MenuCallback onMenu_ = nullptr;
81 void* menuUserData_ = nullptr;
82
83 void scroll(bool down);
84 uint16_t countLines() const;
85};
86
87// ============================================================================
88// Convenience Functions
89// ============================================================================
90
103InfoView* showInfo(const char* title, const char* text, const char* hint = nullptr);
104
105} // namespace cdc::ui
Shared RAII wrappers for firmware resources.
void setOnMenu(MenuCallback onMenu, void *userData=nullptr)
Definition InfoView.h:54
static constexpr uint16_t MAX_TEXT_LEN
Definition InfoView.h:22
InputResult onKey(char key) override
Handles key input for scrolling and optional callbacks.
Definition InfoView.cpp:143
void(*)(void *userData) YesNoCallback
Definition InfoView.h:42
static constexpr uint8_t VISIBLE_LINES
Definition InfoView.h:23
InputResult onLongPress(char key) override
Long-press jumps to the first (KEY_UP) or last (KEY_DOWN) page.
Definition InfoView.cpp:181
static constexpr uint8_t LINE_HEIGHT
Definition InfoView.h:24
const char * getName() const override
Definition InfoView.h:63
void init(const char *title, const char *text)
Definition InfoView.cpp:66
const char * getFooterHint() const override
Returns the footer hint text.
Definition InfoView.cpp:194
void(*)(void *userData) MenuCallback
Definition InfoView.h:53
void setHint(const char *hint)
Definition InfoView.h:36
void setYesNoCallbacks(YesNoCallback onYes, YesNoCallback onNo, void *userData=nullptr)
Definition InfoView.h:43
std::unique_ptr< T[], CapsFreeDeleter > PsramUniquePtr
Definition Raii.h:44
Centralized key-code constants for cdc_views.
Definition IModule.h:8
InfoView * showInfo(const char *title, const char *text, const char *hint=nullptr)
Shows a shared info view instance and pushes it onto the view stack.
Definition InfoView.cpp:310
InputResult
Definition IView.h:10