rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
board_overrides.h
Go to the documentation of this file.
1/*
2 * @file board_overrides.h
3 * @brief Board-specific override mechanism
4 *
5 * This header provides a centralized way to define and manage board-specific overrides.
6 * Custom boards can implement their own specialized behavior by overriding these function pointers.
7 *
8 * Usage Example:
9 *
10 * 1. Define your custom function:
11 * void myBoardCustomHello() {
12 * // Your custom implementation
13 * }
14 *
15 * 2. Set up the override in your board_configuration.cpp:
16 * void setup_custom_board_overrides() {
17 * custom_board_boardSayHello = myBoardCustomHello;
18 * }
19 *
20 *
21 * @date: jul 09, 2025
22 * @author FDSoftware
23 */
24
25#pragma once
26#include <functional>
27#include <optional>
29
30// function with no parameters and returning void
32using setup_custom_board_config_type = void (*)(engine_configuration_s * /*previousConfiguration*/);
35
36// todo: migrate 'validateBoardConfig'
38
39using setup_custom_board_ts_command_override_type = void (*)(uint16_t /*subsystem*/, uint16_t /*index*/);
40extern std::optional<setup_custom_board_ts_command_override_type> custom_board_ts_command;
41
42#if EFI_CAN_SUPPORT
43#include "can_msg_tx.h"
44using board_can_rx_type = void (*)(const size_t, const CANRxFrame &, efitick_t);
45extern std::optional<board_can_rx_type> custom_board_can_rx;
46
47using board_can_update_dash_type = void (*)(CanCycle cycle);
48extern std::optional<board_can_update_dash_type> custom_board_update_dash;
49#endif // EFI_CAN_SUPPORT
50
51/**
52 * @brief Pre-HAL initialization override point
53 * Allows boards to perform custom initialization before HAL is initialized
54 */
55extern std::optional<setup_custom_board_overrides_type> custom_board_preHalInit;
56
57extern std::optional<setup_custom_board_overrides_type> custom_board_boardSayHello;
58
59// Called before configuration is loaded
60extern std::optional<setup_custom_board_overrides_type> custom_board_InitHardwareEarly;
61extern std::optional<setup_custom_board_overrides_type> custom_board_InitHardware;
62extern std::optional<setup_custom_board_overrides_type> custom_board_InitHardwareExtra;
63extern std::optional<setup_custom_board_config_type> custom_board_OnConfigurationChange;
64
65extern std::optional<setup_custom_board_overrides_type> custom_board_BeforeTuneDefaults;
66extern std::optional<setup_custom_board_engine_type_type> custom_board_AfterTuneDefaults;
67extern std::optional<setup_custom_board_engine_type_type> custom_board_applyUnknownType;
68
69extern std::optional<setup_custom_board_overrides_type> custom_board_periodicSlowCallback;
70extern std::optional<setup_custom_board_overrides_type> custom_board_periodicFastCallback;
71
72// Board hardware related:
73extern std::optional<setup_custom_board_output_type> custom_board_getMetaOutputsCount;
74extern std::optional<setup_custom_board_output_type> custom_board_getMetaLowSideOutputs;
75
76// LTFT to VE table custom apply algo
77extern std::optional<setup_custom_board_overrides_type> custom_board_LtftTrimToVeApply;
78
79// specific firmware builds are meant for specific hardware. In order to provide best user experience on well-known boards sometimes we reduce user flexibility.
80extern std::optional<setup_custom_board_overrides_type> custom_board_DefaultConfiguration;
81extern std::optional<setup_custom_board_overrides_type> custom_board_ConfigOverrides;
82
83/**
84 * This function checks if an override is present and calls it if available.
85 * Return true if override is present and was called
86 */
87template<typename FuncType, typename... Args>
88static inline bool call_board_override(std::optional<FuncType> board_override, Args&&... args){
89 if (board_override.has_value()) {
90 std::invoke(board_override.value(), std::forward<Args>(args)...);
91 return true;
92 }
93 return false;
94}
std::optional< board_can_rx_type > custom_board_can_rx
Definition can_rx.cpp:201
std::optional< setup_custom_board_engine_type_type > custom_board_AfterTuneDefaults
Definition hardware.cpp:81
std::optional< setup_custom_board_overrides_type > custom_board_periodicSlowCallback
Definition engine.cpp:148
bool(*)() custom_validate_config_type
void(*)(const size_t, const CANRxFrame &, efitick_t) board_can_rx_type
std::optional< board_can_update_dash_type > custom_board_update_dash
Definition can_dash.cpp:612
void(*)(uint16_t, uint16_t) setup_custom_board_ts_command_override_type
std::optional< setup_custom_board_overrides_type > custom_board_InitHardware
Definition hardware.cpp:77
std::optional< setup_custom_board_overrides_type > custom_board_ConfigOverrides
void(*)() setup_custom_board_overrides_type
std::optional< setup_custom_board_ts_command_override_type > custom_board_ts_command
static bool call_board_override(std::optional< FuncType > board_override, Args &&... args)
std::optional< setup_custom_board_overrides_type > custom_board_boardSayHello
void(*)(CanCycle cycle) board_can_update_dash_type
std::optional< setup_custom_board_overrides_type > custom_board_preHalInit
Pre-HAL initialization override point Allows boards to perform custom initialization before HAL is in...
Definition main.cpp:24
std::optional< setup_custom_board_overrides_type > custom_board_LtftTrimToVeApply
std::optional< setup_custom_board_overrides_type > custom_board_DefaultConfiguration
void(*)(engine_type_e) setup_custom_board_engine_type_type
int(*)() setup_custom_board_output_type
std::optional< setup_custom_board_config_type > custom_board_OnConfigurationChange
void(*)(engine_configuration_s *) setup_custom_board_config_type
std::optional< setup_custom_board_overrides_type > custom_board_InitHardwareExtra
Definition hardware.cpp:78
std::optional< setup_custom_board_output_type > custom_board_getMetaLowSideOutputs
std::optional< setup_custom_board_overrides_type > custom_board_periodicFastCallback
Definition engine.cpp:149
std::optional< setup_custom_board_overrides_type > custom_board_InitHardwareEarly
Definition hardware.cpp:76
std::optional< setup_custom_board_engine_type_type > custom_board_applyUnknownType
Definition hardware.cpp:82
std::optional< setup_custom_board_overrides_type > custom_board_BeforeTuneDefaults
Definition hardware.cpp:79
std::optional< setup_custom_board_output_type > custom_board_getMetaOutputsCount
Definition can.h:83
Main engine configuration data structure.
engine_type_e