API Documentation v0.0.1
Loading...
Searching...
No Matches
2A2A1A6_ECM.h
1/**********************************************************************************************************************
2 * ____ _ _ _
3 * / __ \ | | | | | |
4 * | | | |_ __ ___ _ __ | |__| | ___ _ __ _ __ ___| |_
5 * | | | | '_ \ / _ \ '_ \| __ |/ _ \| '__| '_ \ / _ \ __|
6 * | |__| | |_) | __/ | | | | | | (_) | | | | | | __/ |_
7 * \____/| .__/ \___|_| |_|_| |_|\___/|_| |_| |_|\___|\__|
8 * | |
9 * |_|
10 * ----------------------------------------------------------------------------------
11 *
12 * @file 2A2A1A6_ECM.h
13 * @author Ulukaii
14 * @date 24.05.2025
15 * @version t 0.3.2
16 * @copyright Copyright 2016-2025 OpenHornet. See 2A13-BACKLIGHT_CONTROLLER.ino for details.
17 * @brief Implements backlighting and indicators for the ECM panel.
18 * It consists of two parts:
19 * - An array with the LEDs and their roles (LED_INSTR_BL, LED_ECM_JETT_SEL)
20 * - A class that implements the panel's functionality
21 *********************************************************************************************************************/
22
23
24#ifndef __ECM_BL_H
25#define __ECM_BL_H
26
27#include "DcsBios.h"
28#include "../helpers/Panel.h"
29
30/********************************************************************************************************************
31 * @brief This table defines the panel's LEDs.
32 * @details "Role" in this context refers to the LED role enum in the LedRole.h file (enum used for memory efficiency).
33 * @remark This table is stored in PROGMEM for memory efficiency.
34 * @see LedRole.h for the list of LED roles and LedStruct.h for the Led structure.
35 ********************************************************************************************************************/
36const int ECM_LED_COUNT = 79; // Total number of LEDs in the panel
37const Led ecmLedTable[ECM_LED_COUNT] PROGMEM = {
38 // Backlight LEDs (0-73)
39 {0, LED_INSTR_BL}, {1, LED_INSTR_BL}, {2, LED_INSTR_BL}, {3, LED_INSTR_BL}, {4, LED_INSTR_BL},
40 {5, LED_INSTR_BL}, {6, LED_INSTR_BL}, {7, LED_INSTR_BL}, {8, LED_INSTR_BL}, {9, LED_INSTR_BL},
41 {10, LED_INSTR_BL}, {11, LED_INSTR_BL}, {12, LED_INSTR_BL}, {13, LED_INSTR_BL}, {14, LED_INSTR_BL},
42 {15, LED_INSTR_BL}, {16, LED_INSTR_BL}, {17, LED_INSTR_BL}, {18, LED_INSTR_BL}, {19, LED_INSTR_BL},
43 {20, LED_INSTR_BL}, {21, LED_INSTR_BL}, {22, LED_INSTR_BL}, {23, LED_INSTR_BL}, {24, LED_INSTR_BL},
44 {25, LED_INSTR_BL}, {26, LED_INSTR_BL}, {27, LED_INSTR_BL}, {28, LED_INSTR_BL}, {29, LED_INSTR_BL},
45 {30, LED_INSTR_BL}, {31, LED_INSTR_BL}, {32, LED_INSTR_BL}, {33, LED_INSTR_BL}, {34, LED_INSTR_BL},
46 {35, LED_INSTR_BL}, {36, LED_INSTR_BL}, {37, LED_INSTR_BL}, {38, LED_INSTR_BL}, {39, LED_INSTR_BL},
47 {40, LED_INSTR_BL}, {41, LED_INSTR_BL}, {42, LED_INSTR_BL}, {43, LED_INSTR_BL}, {44, LED_INSTR_BL},
48 {45, LED_INSTR_BL}, {46, LED_INSTR_BL}, {47, LED_INSTR_BL}, {48, LED_INSTR_BL}, {49, LED_INSTR_BL},
49 {50, LED_INSTR_BL}, {51, LED_INSTR_BL}, {52, LED_INSTR_BL}, {53, LED_INSTR_BL}, {54, LED_INSTR_BL},
50 {55, LED_INSTR_BL}, {56, LED_INSTR_BL}, {57, LED_INSTR_BL}, {58, LED_INSTR_BL}, {59, LED_INSTR_BL},
51 {60, LED_INSTR_BL}, {61, LED_INSTR_BL}, {62, LED_INSTR_BL}, {63, LED_INSTR_BL}, {64, LED_INSTR_BL},
52 {65, LED_INSTR_BL}, {66, LED_INSTR_BL}, {67, LED_INSTR_BL}, {68, LED_INSTR_BL}, {69, LED_INSTR_BL},
53 {70, LED_INSTR_BL}, {71, LED_INSTR_BL}, {72, LED_INSTR_BL}, {73, LED_INSTR_BL},
54 // ECM JETT SEL indicator (74 through 77)
55 {74, LED_ECM_JETT_SEL}, {75, LED_ECM_JETT_SEL}, {76, LED_ECM_JETT_SEL}, {77, LED_ECM_JETT_SEL}
56};
57
58/********************************************************************************************************************
59 * @brief ECM Panel class
60 * @details Backlighting and indicator controller for the ECM panel.
61 * Total LEDs: 78
62 * Backlight LEDs: 74 (indices 0-73)
63 * Indicator LEDs: 4 (ECM JETT SEL: 74-77)
64 * @remark This class inherits from the "basic" Panel class in panels/Panel.h
65 * It also enforces a singleton pattern; this is required to use DCS-BIOS callbacks in class methods.
66 * @see Panel.h for the base class implementation
67 ********************************************************************************************************************/
68class EcmPanel : public Panel {
69public:
77 static EcmPanel* getInstance(int startIndex = 0, CRGB* ledStrip = nullptr) {
78 if (!instance) {
79 instance = new EcmPanel(startIndex, ledStrip);
80 }
81 return instance;
82 }
83
84private:
91 EcmPanel(int startIndex, CRGB* ledStrip) {
92 panelStartIndex = startIndex;
93 this->ledStrip = ledStrip;
94 ledCount = ECM_LED_COUNT;
95 ledTable = ecmLedTable;
96 }
97
98 // Static callback functions for DCS-BIOS
99
100 static void onCmsdJetSelLChange(unsigned int newValue) {
101 if (instance) instance->setIndicatorColor(LED_ECM_JETT_SEL, newValue ? NVIS_YELLOW : NVIS_BLACK);
102 }
103 DcsBios::IntegerBuffer cmsdJetSelLBuffer{FA_18C_hornet_CMSD_JET_SEL_L, onCmsdJetSelLChange};
104
105 // Instance data
106 static EcmPanel* instance;
107};
108
109// Initialize static instance pointer
110EcmPanel* EcmPanel::instance = nullptr;
111
112#endif
static EcmPanel * getInstance(int startIndex=0, CRGB *ledStrip=nullptr)
Gets the singleton instance of the EcmPanel class.
Definition 2A2A1A6_ECM.h:77
Definition Panel.h:41
void setIndicatorColor(LedRole role, const CRGB &color)
Sets the color of LEDs with a specific role.
Definition Panel.h:156