From 01dec9b423032a85d1153897cffc23c7c16d1f29 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Fri, 1 May 2026 16:45:06 +0200 Subject: [PATCH] [Build] Add Build description (continuation of #3263) --- .../net/DataTypes/NetworkDriverIndex.cpp | 2 +- .../net/DataTypes/NetworkDriverIndex.h | 4 +- src/ESPEasy/net/Helpers/_NWPlugin_init.cpp | 1125 ++++++++++++++++ src/ESPEasy/net/Helpers/_NWPlugin_init.h | 7 + src/src/CustomBuild/ESPEasyLimits.h | 4 +- src/src/CustomBuild/define_plugin_sets.h | 8 + src/src/DataTypes/ProtocolIndex.cpp | 2 +- src/src/DataTypes/ProtocolIndex.h | 2 +- src/src/Helpers/ESPEasy_Build_Description.cpp | 158 +++ src/src/Helpers/ESPEasy_Build_Description.h | 26 + src/src/Helpers/StringProvider.cpp | 9 + src/src/Helpers/StringProvider.h | 3 + src/src/Helpers/_BitmapArray_Helper.cpp | 48 + src/src/Helpers/_BitmapArray_Helper.h | 13 + src/src/Helpers/_CPlugin_init.cpp | 1105 +++++++++++++++- src/src/Helpers/_CPlugin_init.h | 7 + src/src/Helpers/_Feature_init.cpp | 797 ++++++++++++ src/src/Helpers/_Feature_init.h | 10 + src/src/Helpers/_NPlugin_init.cpp | 787 +++++++++++ src/src/Helpers/_NPlugin_init.h | 3 + src/src/Helpers/_Plugin_init.cpp | 1147 +++++++++++++++++ src/src/Helpers/_Plugin_init.h | 6 + src/src/WebServer/SysInfoPage.cpp | 6 + 23 files changed, 5271 insertions(+), 8 deletions(-) create mode 100644 src/src/Helpers/ESPEasy_Build_Description.cpp create mode 100644 src/src/Helpers/ESPEasy_Build_Description.h create mode 100644 src/src/Helpers/_BitmapArray_Helper.cpp create mode 100644 src/src/Helpers/_BitmapArray_Helper.h create mode 100644 src/src/Helpers/_Feature_init.cpp create mode 100644 src/src/Helpers/_Feature_init.h diff --git a/src/ESPEasy/net/DataTypes/NetworkDriverIndex.cpp b/src/ESPEasy/net/DataTypes/NetworkDriverIndex.cpp index 3d432b69b8..4c1cbc6d98 100644 --- a/src/ESPEasy/net/DataTypes/NetworkDriverIndex.cpp +++ b/src/ESPEasy/net/DataTypes/NetworkDriverIndex.cpp @@ -5,7 +5,7 @@ namespace ESPEasy { namespace net { -networkDriverIndex_t INVALID_NETWORKDRIVER_INDEX = networkDriverIndex_t::toNetworkDriverIndex(NETWORKDRIVER_INDEX_MAX); +const networkDriverIndex_t INVALID_NETWORKDRIVER_INDEX = networkDriverIndex_t::toNetworkDriverIndex(NETWORKDRIVER_INDEX_MAX + 1); } // namespace net } // namespace ESPEasy diff --git a/src/ESPEasy/net/DataTypes/NetworkDriverIndex.h b/src/ESPEasy/net/DataTypes/NetworkDriverIndex.h index 1fd608ff26..90f9875142 100644 --- a/src/ESPEasy/net/DataTypes/NetworkDriverIndex.h +++ b/src/ESPEasy/net/DataTypes/NetworkDriverIndex.h @@ -28,7 +28,7 @@ struct networkDriverIndex_t { networkDriverIndex_t& operator=(unsigned other) { - value = (other < NETWORKDRIVER_INDEX_MAX) ? other : NETWORKDRIVER_INDEX_MAX; + value = (other < (NETWORKDRIVER_INDEX_MAX + 1)) ? other : (NETWORKDRIVER_INDEX_MAX + 1); return *this; } @@ -67,7 +67,7 @@ struct networkDriverIndex_t { }; -extern networkDriverIndex_t INVALID_NETWORKDRIVER_INDEX; +extern const networkDriverIndex_t INVALID_NETWORKDRIVER_INDEX; } // namespace net } // namespace ESPEasy diff --git a/src/ESPEasy/net/Helpers/_NWPlugin_init.cpp b/src/ESPEasy/net/Helpers/_NWPlugin_init.cpp index b62012e540..a71b90a3ae 100644 --- a/src/ESPEasy/net/Helpers/_NWPlugin_init.cpp +++ b/src/ESPEasy/net/Helpers/_NWPlugin_init.cpp @@ -7,6 +7,7 @@ //#include "../../../src/Helpers/Misc.h" #include "../../../src/Helpers/StringConverter.h" #include "../Globals/NWPlugins.h" +#include namespace ESPEasy { namespace net { @@ -16,6 +17,1032 @@ namespace net { // and initialize the function call pointer into the NWPlugin array // ******************************************************************************** +#if FEATURE_BUILD_DESCRIPTION +const uint16_t networksBitmap[] = { + 0u // n=1 : m=0 +#ifdef USES_NW001 + | 1 << 15 +#endif // ifdef USES_NW001 + +#ifdef USES_NW002 + | 1 << 14 +#endif // ifdef USES_NW002 + +#ifdef USES_NW003 + | 1 << 13 +#endif // ifdef USES_NW003 + +#ifdef USES_NW004 + | 1 << 12 +#endif // ifdef USES_NW004 + +#ifdef USES_NW005 + | 1 << 11 +#endif // ifdef USES_NW005 + +#ifdef USES_NW006 + | 1 << 10 +#endif // ifdef USES_NW006 + +#ifdef USES_NW007 + | 1 << 9 +#endif // ifdef USES_NW007 + +#ifdef USES_NW008 + | 1 << 8 +#endif // ifdef USES_NW008 + +#ifdef USES_NW009 + | 1 << 7 +#endif // ifdef USES_NW009 + +#ifdef USES_NW010 + | 1 << 6 +#endif // ifdef USES_NW010 + +#ifdef USES_NW011 + | 1 << 5 +#endif // ifdef USES_NW011 + +#ifdef USES_NW012 + | 1 << 4 +#endif // ifdef USES_NW012 + +#ifdef USES_NW013 + | 1 << 3 +#endif // ifdef USES_NW013 + +#ifdef USES_NW014 + | 1 << 2 +#endif // ifdef USES_NW014 + +#ifdef USES_NW015 + | 1 << 1 +#endif // ifdef USES_NW015 + +#ifdef USES_NW016 + | 1 << 0 +#endif // ifdef USES_NW016 + , 0u // n=17 : m=0 +#ifdef USES_NW017 + | 1 << 15 +#endif // ifdef USES_NW017 + +#ifdef USES_NW018 + | 1 << 14 +#endif // ifdef USES_NW018 + +#ifdef USES_NW019 + | 1 << 13 +#endif // ifdef USES_NW019 + +#ifdef USES_NW020 + | 1 << 12 +#endif // ifdef USES_NW020 + +#ifdef USES_NW021 + | 1 << 11 +#endif // ifdef USES_NW021 + +#ifdef USES_NW022 + | 1 << 10 +#endif // ifdef USES_NW022 + +#ifdef USES_NW023 + | 1 << 9 +#endif // ifdef USES_NW023 + +#ifdef USES_NW024 + | 1 << 8 +#endif // ifdef USES_NW024 + +#ifdef USES_NW025 + | 1 << 7 +#endif // ifdef USES_NW025 + +#ifdef USES_NW026 + | 1 << 6 +#endif // ifdef USES_NW026 + +#ifdef USES_NW027 + | 1 << 5 +#endif // ifdef USES_NW027 + +#ifdef USES_NW028 + | 1 << 4 +#endif // ifdef USES_NW028 + +#ifdef USES_NW029 + | 1 << 3 +#endif // ifdef USES_NW029 + +#ifdef USES_NW030 + | 1 << 2 +#endif // ifdef USES_NW030 + +#ifdef USES_NW031 + | 1 << 1 +#endif // ifdef USES_NW031 + +#ifdef USES_NW032 + | 1 << 0 +#endif // ifdef USES_NW032 + , 0u // n=33 : m=0 +#ifdef USES_NW033 + | 1 << 15 +#endif // ifdef USES_NW033 + +#ifdef USES_NW034 + | 1 << 14 +#endif // ifdef USES_NW034 + +#ifdef USES_NW035 + | 1 << 13 +#endif // ifdef USES_NW035 + +#ifdef USES_NW036 + | 1 << 12 +#endif // ifdef USES_NW036 + +#ifdef USES_NW037 + | 1 << 11 +#endif // ifdef USES_NW037 + +#ifdef USES_NW038 + | 1 << 10 +#endif // ifdef USES_NW038 + +#ifdef USES_NW039 + | 1 << 9 +#endif // ifdef USES_NW039 + +#ifdef USES_NW040 + | 1 << 8 +#endif // ifdef USES_NW040 + +#ifdef USES_NW041 + | 1 << 7 +#endif // ifdef USES_NW041 + +#ifdef USES_NW042 + | 1 << 6 +#endif // ifdef USES_NW042 + +#ifdef USES_NW043 + | 1 << 5 +#endif // ifdef USES_NW043 + +#ifdef USES_NW044 + | 1 << 4 +#endif // ifdef USES_NW044 + +#ifdef USES_NW045 + | 1 << 3 +#endif // ifdef USES_NW045 + +#ifdef USES_NW046 + | 1 << 2 +#endif // ifdef USES_NW046 + +#ifdef USES_NW047 + | 1 << 1 +#endif // ifdef USES_NW047 + +#ifdef USES_NW048 + | 1 << 0 +#endif // ifdef USES_NW048 + , 0u // n=49 : m=0 +#ifdef USES_NW049 + | 1 << 15 +#endif // ifdef USES_NW049 + +#ifdef USES_NW050 + | 1 << 14 +#endif // ifdef USES_NW050 + +#ifdef USES_NW051 + | 1 << 13 +#endif // ifdef USES_NW051 + +#ifdef USES_NW052 + | 1 << 12 +#endif // ifdef USES_NW052 + +#ifdef USES_NW053 + | 1 << 11 +#endif // ifdef USES_NW053 + +#ifdef USES_NW054 + | 1 << 10 +#endif // ifdef USES_NW054 + +#ifdef USES_NW055 + | 1 << 9 +#endif // ifdef USES_NW055 + +#ifdef USES_NW056 + | 1 << 8 +#endif // ifdef USES_NW056 + +#ifdef USES_NW057 + | 1 << 7 +#endif // ifdef USES_NW057 + +#ifdef USES_NW058 + | 1 << 6 +#endif // ifdef USES_NW058 + +#ifdef USES_NW059 + | 1 << 5 +#endif // ifdef USES_NW059 + +#ifdef USES_NW060 + | 1 << 4 +#endif // ifdef USES_NW060 + +#ifdef USES_NW061 + | 1 << 3 +#endif // ifdef USES_NW061 + +#ifdef USES_NW062 + | 1 << 2 +#endif // ifdef USES_NW062 + +#ifdef USES_NW063 + | 1 << 1 +#endif // ifdef USES_NW063 + +#ifdef USES_NW064 + | 1 << 0 +#endif // ifdef USES_NW064 + , 0u // n=65 : m=0 +#ifdef USES_NW065 + | 1 << 15 +#endif // ifdef USES_NW065 + +#ifdef USES_NW066 + | 1 << 14 +#endif // ifdef USES_NW066 + +#ifdef USES_NW067 + | 1 << 13 +#endif // ifdef USES_NW067 + +#ifdef USES_NW068 + | 1 << 12 +#endif // ifdef USES_NW068 + +#ifdef USES_NW069 + | 1 << 11 +#endif // ifdef USES_NW069 + +#ifdef USES_NW070 + | 1 << 10 +#endif // ifdef USES_NW070 + +#ifdef USES_NW071 + | 1 << 9 +#endif // ifdef USES_NW071 + +#ifdef USES_NW072 + | 1 << 8 +#endif // ifdef USES_NW072 + +#ifdef USES_NW073 + | 1 << 7 +#endif // ifdef USES_NW073 + +#ifdef USES_NW074 + | 1 << 6 +#endif // ifdef USES_NW074 + +#ifdef USES_NW075 + | 1 << 5 +#endif // ifdef USES_NW075 + +#ifdef USES_NW076 + | 1 << 4 +#endif // ifdef USES_NW076 + +#ifdef USES_NW077 + | 1 << 3 +#endif // ifdef USES_NW077 + +#ifdef USES_NW078 + | 1 << 2 +#endif // ifdef USES_NW078 + +#ifdef USES_NW079 + | 1 << 1 +#endif // ifdef USES_NW079 + +#ifdef USES_NW080 + | 1 << 0 +#endif // ifdef USES_NW080 + , 0u // n=81 : m=0 +#ifdef USES_NW081 + | 1 << 15 +#endif // ifdef USES_NW081 + +#ifdef USES_NW082 + | 1 << 14 +#endif // ifdef USES_NW082 + +#ifdef USES_NW083 + | 1 << 13 +#endif // ifdef USES_NW083 + +#ifdef USES_NW084 + | 1 << 12 +#endif // ifdef USES_NW084 + +#ifdef USES_NW085 + | 1 << 11 +#endif // ifdef USES_NW085 + +#ifdef USES_NW086 + | 1 << 10 +#endif // ifdef USES_NW086 + +#ifdef USES_NW087 + | 1 << 9 +#endif // ifdef USES_NW087 + +#ifdef USES_NW088 + | 1 << 8 +#endif // ifdef USES_NW088 + +#ifdef USES_NW089 + | 1 << 7 +#endif // ifdef USES_NW089 + +#ifdef USES_NW090 + | 1 << 6 +#endif // ifdef USES_NW090 + +#ifdef USES_NW091 + | 1 << 5 +#endif // ifdef USES_NW091 + +#ifdef USES_NW092 + | 1 << 4 +#endif // ifdef USES_NW092 + +#ifdef USES_NW093 + | 1 << 3 +#endif // ifdef USES_NW093 + +#ifdef USES_NW094 + | 1 << 2 +#endif // ifdef USES_NW094 + +#ifdef USES_NW095 + | 1 << 1 +#endif // ifdef USES_NW095 + +#ifdef USES_NW096 + | 1 << 0 +#endif // ifdef USES_NW096 + , 0u // n=97 : m=0 +#ifdef USES_NW097 + | 1 << 15 +#endif // ifdef USES_NW097 + +#ifdef USES_NW098 + | 1 << 14 +#endif // ifdef USES_NW098 + +#ifdef USES_NW099 + | 1 << 13 +#endif // ifdef USES_NW099 + +#ifdef USES_NW100 + | 1 << 12 +#endif // ifdef USES_NW100 + +#ifdef USES_NW101 + | 1 << 11 +#endif // ifdef USES_NW101 + +#ifdef USES_NW102 + | 1 << 10 +#endif // ifdef USES_NW102 + +#ifdef USES_NW103 + | 1 << 9 +#endif // ifdef USES_NW103 + +#ifdef USES_NW104 + | 1 << 8 +#endif // ifdef USES_NW104 + +#ifdef USES_NW105 + | 1 << 7 +#endif // ifdef USES_NW105 + +#ifdef USES_NW106 + | 1 << 6 +#endif // ifdef USES_NW106 + +#ifdef USES_NW107 + | 1 << 5 +#endif // ifdef USES_NW107 + +#ifdef USES_NW108 + | 1 << 4 +#endif // ifdef USES_NW108 + +#ifdef USES_NW109 + | 1 << 3 +#endif // ifdef USES_NW109 + +#ifdef USES_NW110 + | 1 << 2 +#endif // ifdef USES_NW110 + +#ifdef USES_NW111 + | 1 << 1 +#endif // ifdef USES_NW111 + +#ifdef USES_NW112 + | 1 << 0 +#endif // ifdef USES_NW112 + , 0u // n=113 : m=0 +#ifdef USES_NW113 + | 1 << 15 +#endif // ifdef USES_NW113 + +#ifdef USES_NW114 + | 1 << 14 +#endif // ifdef USES_NW114 + +#ifdef USES_NW115 + | 1 << 13 +#endif // ifdef USES_NW115 + +#ifdef USES_NW116 + | 1 << 12 +#endif // ifdef USES_NW116 + +#ifdef USES_NW117 + | 1 << 11 +#endif // ifdef USES_NW117 + +#ifdef USES_NW118 + | 1 << 10 +#endif // ifdef USES_NW118 + +#ifdef USES_NW119 + | 1 << 9 +#endif // ifdef USES_NW119 + +#ifdef USES_NW120 + | 1 << 8 +#endif // ifdef USES_NW120 + +#ifdef USES_NW121 + | 1 << 7 +#endif // ifdef USES_NW121 + +#ifdef USES_NW122 + | 1 << 6 +#endif // ifdef USES_NW122 + +#ifdef USES_NW123 + | 1 << 5 +#endif // ifdef USES_NW123 + +#ifdef USES_NW124 + | 1 << 4 +#endif // ifdef USES_NW124 + +#ifdef USES_NW125 + | 1 << 3 +#endif // ifdef USES_NW125 + +#ifdef USES_NW126 + | 1 << 2 +#endif // ifdef USES_NW126 + +#ifdef USES_NW127 + | 1 << 1 +#endif // ifdef USES_NW127 + +#ifdef USES_NW128 + | 1 << 0 +#endif // ifdef USES_NW128 + , 0u // n=129 : m=0 +#ifdef USES_NW129 + | 1 << 15 +#endif // ifdef USES_NW129 + +#ifdef USES_NW130 + | 1 << 14 +#endif // ifdef USES_NW130 + +#ifdef USES_NW131 + | 1 << 13 +#endif // ifdef USES_NW131 + +#ifdef USES_NW132 + | 1 << 12 +#endif // ifdef USES_NW132 + +#ifdef USES_NW133 + | 1 << 11 +#endif // ifdef USES_NW133 + +#ifdef USES_NW134 + | 1 << 10 +#endif // ifdef USES_NW134 + +#ifdef USES_NW135 + | 1 << 9 +#endif // ifdef USES_NW135 + +#ifdef USES_NW136 + | 1 << 8 +#endif // ifdef USES_NW136 + +#ifdef USES_NW137 + | 1 << 7 +#endif // ifdef USES_NW137 + +#ifdef USES_NW138 + | 1 << 6 +#endif // ifdef USES_NW138 + +#ifdef USES_NW139 + | 1 << 5 +#endif // ifdef USES_NW139 + +#ifdef USES_NW140 + | 1 << 4 +#endif // ifdef USES_NW140 + +#ifdef USES_NW141 + | 1 << 3 +#endif // ifdef USES_NW141 + +#ifdef USES_NW142 + | 1 << 2 +#endif // ifdef USES_NW142 + +#ifdef USES_NW143 + | 1 << 1 +#endif // ifdef USES_NW143 + +#ifdef USES_NW144 + | 1 << 0 +#endif // ifdef USES_NW144 + , 0u // n=145 : m=0 +#ifdef USES_NW145 + | 1 << 15 +#endif // ifdef USES_NW145 + +#ifdef USES_NW146 + | 1 << 14 +#endif // ifdef USES_NW146 + +#ifdef USES_NW147 + | 1 << 13 +#endif // ifdef USES_NW147 + +#ifdef USES_NW148 + | 1 << 12 +#endif // ifdef USES_NW148 + +#ifdef USES_NW149 + | 1 << 11 +#endif // ifdef USES_NW149 + +#ifdef USES_NW150 + | 1 << 10 +#endif // ifdef USES_NW150 + +#ifdef USES_NW151 + | 1 << 9 +#endif // ifdef USES_NW151 + +#ifdef USES_NW152 + | 1 << 8 +#endif // ifdef USES_NW152 + +#ifdef USES_NW153 + | 1 << 7 +#endif // ifdef USES_NW153 + +#ifdef USES_NW154 + | 1 << 6 +#endif // ifdef USES_NW154 + +#ifdef USES_NW155 + | 1 << 5 +#endif // ifdef USES_NW155 + +#ifdef USES_NW156 + | 1 << 4 +#endif // ifdef USES_NW156 + +#ifdef USES_NW157 + | 1 << 3 +#endif // ifdef USES_NW157 + +#ifdef USES_NW158 + | 1 << 2 +#endif // ifdef USES_NW158 + +#ifdef USES_NW159 + | 1 << 1 +#endif // ifdef USES_NW159 + +#ifdef USES_NW160 + | 1 << 0 +#endif // ifdef USES_NW160 + , 0u // n=161 : m=0 +#ifdef USES_NW161 + | 1 << 15 +#endif // ifdef USES_NW161 + +#ifdef USES_NW162 + | 1 << 14 +#endif // ifdef USES_NW162 + +#ifdef USES_NW163 + | 1 << 13 +#endif // ifdef USES_NW163 + +#ifdef USES_NW164 + | 1 << 12 +#endif // ifdef USES_NW164 + +#ifdef USES_NW165 + | 1 << 11 +#endif // ifdef USES_NW165 + +#ifdef USES_NW166 + | 1 << 10 +#endif // ifdef USES_NW166 + +#ifdef USES_NW167 + | 1 << 9 +#endif // ifdef USES_NW167 + +#ifdef USES_NW168 + | 1 << 8 +#endif // ifdef USES_NW168 + +#ifdef USES_NW169 + | 1 << 7 +#endif // ifdef USES_NW169 + +#ifdef USES_NW170 + | 1 << 6 +#endif // ifdef USES_NW170 + +#ifdef USES_NW171 + | 1 << 5 +#endif // ifdef USES_NW171 + +#ifdef USES_NW172 + | 1 << 4 +#endif // ifdef USES_NW172 + +#ifdef USES_NW173 + | 1 << 3 +#endif // ifdef USES_NW173 + +#ifdef USES_NW174 + | 1 << 2 +#endif // ifdef USES_NW174 + +#ifdef USES_NW175 + | 1 << 1 +#endif // ifdef USES_NW175 + +#ifdef USES_NW176 + | 1 << 0 +#endif // ifdef USES_NW176 + , 0u // n=177 : m=0 +#ifdef USES_NW177 + | 1 << 15 +#endif // ifdef USES_NW177 + +#ifdef USES_NW178 + | 1 << 14 +#endif // ifdef USES_NW178 + +#ifdef USES_NW179 + | 1 << 13 +#endif // ifdef USES_NW179 + +#ifdef USES_NW180 + | 1 << 12 +#endif // ifdef USES_NW180 + +#ifdef USES_NW181 + | 1 << 11 +#endif // ifdef USES_NW181 + +#ifdef USES_NW182 + | 1 << 10 +#endif // ifdef USES_NW182 + +#ifdef USES_NW183 + | 1 << 9 +#endif // ifdef USES_NW183 + +#ifdef USES_NW184 + | 1 << 8 +#endif // ifdef USES_NW184 + +#ifdef USES_NW185 + | 1 << 7 +#endif // ifdef USES_NW185 + +#ifdef USES_NW186 + | 1 << 6 +#endif // ifdef USES_NW186 + +#ifdef USES_NW187 + | 1 << 5 +#endif // ifdef USES_NW187 + +#ifdef USES_NW188 + | 1 << 4 +#endif // ifdef USES_NW188 + +#ifdef USES_NW189 + | 1 << 3 +#endif // ifdef USES_NW189 + +#ifdef USES_NW190 + | 1 << 2 +#endif // ifdef USES_NW190 + +#ifdef USES_NW191 + | 1 << 1 +#endif // ifdef USES_NW191 + +#ifdef USES_NW192 + | 1 << 0 +#endif // ifdef USES_NW192 + , 0u // n=193 : m=0 +#ifdef USES_NW193 + | 1 << 15 +#endif // ifdef USES_NW193 + +#ifdef USES_NW194 + | 1 << 14 +#endif // ifdef USES_NW194 + +#ifdef USES_NW195 + | 1 << 13 +#endif // ifdef USES_NW195 + +#ifdef USES_NW196 + | 1 << 12 +#endif // ifdef USES_NW196 + +#ifdef USES_NW197 + | 1 << 11 +#endif // ifdef USES_NW197 + +#ifdef USES_NW198 + | 1 << 10 +#endif // ifdef USES_NW198 + +#ifdef USES_NW199 + | 1 << 9 +#endif // ifdef USES_NW199 + +#ifdef USES_NW200 + | 1 << 8 +#endif // ifdef USES_NW200 + +#ifdef USES_NW201 + | 1 << 7 +#endif // ifdef USES_NW201 + +#ifdef USES_NW202 + | 1 << 6 +#endif // ifdef USES_NW202 + +#ifdef USES_NW203 + | 1 << 5 +#endif // ifdef USES_NW203 + +#ifdef USES_NW204 + | 1 << 4 +#endif // ifdef USES_NW204 + +#ifdef USES_NW205 + | 1 << 3 +#endif // ifdef USES_NW205 + +#ifdef USES_NW206 + | 1 << 2 +#endif // ifdef USES_NW206 + +#ifdef USES_NW207 + | 1 << 1 +#endif // ifdef USES_NW207 + +#ifdef USES_NW208 + | 1 << 0 +#endif // ifdef USES_NW208 + , 0u // n=209 : m=0 +#ifdef USES_NW209 + | 1 << 15 +#endif // ifdef USES_NW209 + +#ifdef USES_NW210 + | 1 << 14 +#endif // ifdef USES_NW210 + +#ifdef USES_NW211 + | 1 << 13 +#endif // ifdef USES_NW211 + +#ifdef USES_NW212 + | 1 << 12 +#endif // ifdef USES_NW212 + +#ifdef USES_NW213 + | 1 << 11 +#endif // ifdef USES_NW213 + +#ifdef USES_NW214 + | 1 << 10 +#endif // ifdef USES_NW214 + +#ifdef USES_NW215 + | 1 << 9 +#endif // ifdef USES_NW215 + +#ifdef USES_NW216 + | 1 << 8 +#endif // ifdef USES_NW216 + +#ifdef USES_NW217 + | 1 << 7 +#endif // ifdef USES_NW217 + +#ifdef USES_NW218 + | 1 << 6 +#endif // ifdef USES_NW218 + +#ifdef USES_NW219 + | 1 << 5 +#endif // ifdef USES_NW219 + +#ifdef USES_NW220 + | 1 << 4 +#endif // ifdef USES_NW220 + +#ifdef USES_NW221 + | 1 << 3 +#endif // ifdef USES_NW221 + +#ifdef USES_NW222 + | 1 << 2 +#endif // ifdef USES_NW222 + +#ifdef USES_NW223 + | 1 << 1 +#endif // ifdef USES_NW223 + +#ifdef USES_NW224 + | 1 << 0 +#endif // ifdef USES_NW224 + , 0u // n=225 : m=0 +#ifdef USES_NW225 + | 1 << 15 +#endif // ifdef USES_NW225 + +#ifdef USES_NW226 + | 1 << 14 +#endif // ifdef USES_NW226 + +#ifdef USES_NW227 + | 1 << 13 +#endif // ifdef USES_NW227 + +#ifdef USES_NW228 + | 1 << 12 +#endif // ifdef USES_NW228 + +#ifdef USES_NW229 + | 1 << 11 +#endif // ifdef USES_NW229 + +#ifdef USES_NW230 + | 1 << 10 +#endif // ifdef USES_NW230 + +#ifdef USES_NW231 + | 1 << 9 +#endif // ifdef USES_NW231 + +#ifdef USES_NW232 + | 1 << 8 +#endif // ifdef USES_NW232 + +#ifdef USES_NW233 + | 1 << 7 +#endif // ifdef USES_NW233 + +#ifdef USES_NW234 + | 1 << 6 +#endif // ifdef USES_NW234 + +#ifdef USES_NW235 + | 1 << 5 +#endif // ifdef USES_NW235 + +#ifdef USES_NW236 + | 1 << 4 +#endif // ifdef USES_NW236 + +#ifdef USES_NW237 + | 1 << 3 +#endif // ifdef USES_NW237 + +#ifdef USES_NW238 + | 1 << 2 +#endif // ifdef USES_NW238 + +#ifdef USES_NW239 + | 1 << 1 +#endif // ifdef USES_NW239 + +#ifdef USES_NW240 + | 1 << 0 +#endif // ifdef USES_NW240 + , 0u // n=241 : m=0 +#ifdef USES_NW241 + | 1 << 15 +#endif // ifdef USES_NW241 + +#ifdef USES_NW242 + | 1 << 14 +#endif // ifdef USES_NW242 + +#ifdef USES_NW243 + | 1 << 13 +#endif // ifdef USES_NW243 + +#ifdef USES_NW244 + | 1 << 12 +#endif // ifdef USES_NW244 + +#ifdef USES_NW245 + | 1 << 11 +#endif // ifdef USES_NW245 + +#ifdef USES_NW246 + | 1 << 10 +#endif // ifdef USES_NW246 + +#ifdef USES_NW247 + | 1 << 9 +#endif // ifdef USES_NW247 + +#ifdef USES_NW248 + | 1 << 8 +#endif // ifdef USES_NW248 + +#ifdef USES_NW249 + | 1 << 7 +#endif // ifdef USES_NW249 + +#ifdef USES_NW250 + | 1 << 6 +#endif // ifdef USES_NW250 + +#ifdef USES_NW251 + | 1 << 5 +#endif // ifdef USES_NW251 + +#ifdef USES_NW252 + | 1 << 4 +#endif // ifdef USES_NW252 + +#ifdef USES_NW253 + | 1 << 3 +#endif // ifdef USES_NW253 + +#ifdef USES_NW254 + | 1 << 2 +#endif // ifdef USES_NW254 + +#ifdef USES_NW255 + | 1 << 1 +#endif // ifdef USES_NW255 +}; + +#else // if FEATURE_BUILD_DESCRIPTION + constexpr /*nwpluginID_t*/ uint8_t NetworkDriverIndex_to_NWPlugin_id[] PROGMEM = { #ifdef USES_NW001 @@ -1039,6 +2066,7 @@ constexpr /*nwpluginID_t*/ uint8_t NetworkDriverIndex_to_NWPlugin_id[] PROGMEM = #endif // ifdef USES_NW255 }; +#endif // if FEATURE_BUILD_DESCRIPTION typedef bool (*NWPlugin_ptr_t)(NWPlugin::Function, EventStruct *, @@ -2068,6 +3096,33 @@ const NWPlugin_ptr_t PROGMEM NWPlugin_ptr[] = }; +#if FEATURE_BUILD_DESCRIPTION +size_t NetworkDriverIndex_to_NWPlugin_id_size = 0; // sizeof(NetworkDriverIndex_to_NWPlugin_id); + +// Highest NWPlugin ID included in the build +size_t Highest_NWPlugin_id = 0; // NetworkDriverIndex_to_NWPlugin_id_size == + // 0 ? 0 : NetworkDriverIndex_to_NWPlugin_id[NetworkDriverIndex_to_NWPlugin_id_size - 1]; + +size_t NWPlugin_id_to_NetworkDriverIndex_size = 0; // Highest_NWPlugin_id + 1; + +// Array filled during init. +// Valid index: 1 ... Highest_NWPlugin_id +// Returns index to the NetworkDriverIndex_to_NWPlugin_id array +// networkDriverIndex_t NWPlugin_id_to_NetworkDriverIndex[NWPlugin_id_to_NetworkDriverIndex_size]{}; + + +bool isNWPluginIncluded_(nwpluginID_t nwpluginID) { + if (nwpluginID == INVALID_NW_PLUGIN_ID) { return false; } + const uint16_t wordIndex = (nwpluginID.value - 1) / 16; + const uint16_t bitIndex = 15 - ((nwpluginID.value - 1) % 16); + + // Driver available? + return bitRead(networksBitmap[wordIndex], bitIndex); +} + +std::vector NetworkDriverArray; // [NetworkDriverIndex_to_NWPlugin_id_size + 1]{}; +#else // if FEATURE_BUILD_DESCRIPTION + constexpr size_t NetworkDriverIndex_to_NWPlugin_id_size = sizeof(NetworkDriverIndex_to_NWPlugin_id); // Highest NWPlugin ID included in the build @@ -2084,14 +3139,42 @@ networkDriverIndex_t NWPlugin_id_to_NetworkDriverIndex[NWPlugin_id_to_NetworkDri NetworkDriverStruct NetworkDriverArray[NetworkDriverIndex_to_NWPlugin_id_size + 1]{}; +#endif // if FEATURE_BUILD_DESCRIPTION + NetworkDriverStruct& getNetworkDriverStruct(networkDriverIndex_t networkDriverIndex) { if (networkDriverIndex.value >= NetworkDriverIndex_to_NWPlugin_id_size) { networkDriverIndex = NetworkDriverIndex_to_NWPlugin_id_size; } + #if FEATURE_BUILD_DESCRIPTION + if (NetworkDriverArray.size() <= static_cast(networkDriverIndex.value)) { + NetworkDriverArray.resize(networkDriverIndex.value + 1); + } + #endif // if FEATURE_BUILD_DESCRIPTION return NetworkDriverArray[networkDriverIndex.value]; } +#if FEATURE_BUILD_DESCRIPTION + +networkDriverIndex_t do_getNetworkDriverIndex_from_NWPluginID(nwpluginID_t nwpluginID) +{ + if (!isNWPluginIncluded_(nwpluginID)) { return INVALID_NETWORKDRIVER_INDEX; } + + size_t _highest; // ignored + const uint8_t networkDriverIndex = getIndexFromBitmap(networksBitmap, nwpluginID.value, nwpluginID.value, _highest); + + return networkDriverIndex_t::toNetworkDriverIndex(networkDriverIndex); +} + +nwpluginID_t do_getNWPluginID_from_NetworkDriverIndex(networkDriverIndex_t networkDriverIndex) +{ + nwpluginID_t pluginID = nwpluginID_t::toPluginID(getIdFromBitmap(networksBitmap, networkDriverIndex.value + 1, CPLUGIN_MAX + 1, INVALID_NW_PLUGIN_ID.value)); // Protocol is 0-based, bitmap is 1-based + + return pluginID; +} + +#else // if FEATURE_BUILD_DESCRIPTION + networkDriverIndex_t do_getNetworkDriverIndex_from_NWPluginID(nwpluginID_t nwpluginID) { if (nwpluginID.value < NWPlugin_id_to_NetworkDriverIndex_size) @@ -2111,6 +3194,8 @@ nwpluginID_t do_getNWPluginID_from_NetworkDriverIndex(networkDriverIndex_t netwo return INVALID_NW_PLUGIN_ID; } +#endif // if FEATURE_BUILD_DESCRIPTION + bool do_check_validNetworkDriverIndex(networkDriverIndex_t networkDriverIndex) { return networkDriverIndex.value < NetworkDriverIndex_to_NWPlugin_id_size; @@ -2150,6 +3235,44 @@ bool do_NWPluginCall(networkDriverIndex_t networkDriverIndex, NWPlugin:: return false; } +#if FEATURE_BUILD_DESCRIPTION + +void NWPluginSetup() +{ + static bool setupDone = false; + + if (setupDone) { return; } + + if (NetworkDriverIndex_to_NWPlugin_id_size == 0) + { + // CPlugin_id_to_ProtocolIndex[id] = INVALID_PROTOCOL_INDEX; + // Determine Controller count + // size_t _highest; + NetworkDriverIndex_to_NWPlugin_id_size = getIndexFromBitmap(networksBitmap, + NETWORKDRIVER_INDEX_MAX + 1, + NETWORKDRIVER_INDEX_MAX + 1, + Highest_NWPlugin_id); + } + + networkDriverIndex_t networkDriverIndex{}; + + for (; networkDriverIndex.value < NetworkDriverIndex_to_NWPlugin_id_size; ++networkDriverIndex) + { + const nwpluginID_t nwpluginID = do_getNWPluginID_from_NetworkDriverIndex(networkDriverIndex); + + if (INVALID_NW_PLUGIN_ID != nwpluginID) { + // CPlugin_id_to_ProtocolIndex[cpluginID] = protocolIndex; + struct EventStruct TempEvent; + TempEvent.idx = networkDriverIndex.value; + String dummy; + do_NWPluginCall(networkDriverIndex, NWPlugin::Function::NWPLUGIN_DRIVER_ADD, &TempEvent, dummy); + } + } + setupDone = true; +} + +#else // if FEATURE_BUILD_DESCRIPTION + void NWPluginSetup() { static bool setupDone = false; @@ -2178,6 +3301,8 @@ void NWPluginSetup() setupDone = true; } +#endif // if FEATURE_BUILD_DESCRIPTION + void NWPluginInit() { // Set all not supported nwplugins to disabled. diff --git a/src/ESPEasy/net/Helpers/_NWPlugin_init.h b/src/ESPEasy/net/Helpers/_NWPlugin_init.h index 3683220e1f..f96b0b678a 100644 --- a/src/ESPEasy/net/Helpers/_NWPlugin_init.h +++ b/src/ESPEasy/net/Helpers/_NWPlugin_init.h @@ -1,6 +1,9 @@ #pragma once #include "../../../ESPEasy_common.h" +#if FEATURE_BUILD_DESCRIPTION +#include "../../src/src/Helpers/_BitmapArray_Helper.h" +#endif // if FEATURE_BUILD_DESCRIPTION #include "../../../src/DataStructs/ESPEasy_EventStruct.h" #include "../DataStructs/NetworkDriverStruct.h" @@ -12,6 +15,10 @@ namespace ESPEasy { namespace net { +#if FEATURE_BUILD_DESCRIPTION +extern const uint16_t networksBitmap[]; +#endif // if FEATURE_BUILD_DESCRIPTION + networkDriverIndex_t do_getNetworkDriverIndex_from_NWPluginID(nwpluginID_t pluginID); nwpluginID_t do_getNWPluginID_from_NetworkDriverIndex(networkDriverIndex_t networkDriverIndex); bool do_check_validNetworkDriverIndex(networkDriverIndex_t networkDriverIndex); diff --git a/src/src/CustomBuild/ESPEasyLimits.h b/src/src/CustomBuild/ESPEasyLimits.h index b1b0ca2e83..62f2267425 100644 --- a/src/src/CustomBuild/ESPEasyLimits.h +++ b/src/src/CustomBuild/ESPEasyLimits.h @@ -93,10 +93,10 @@ #define PLUGIN_MAX 255 #endif #ifndef CPLUGIN_MAX - #define CPLUGIN_MAX 255 + #define CPLUGIN_MAX 254 // Don't set to 255, as CPLUGIN_MAX + 1 is used #endif #ifndef NETWORKDRIVER_INDEX_MAX - #define NETWORKDRIVER_INDEX_MAX 255 + #define NETWORKDRIVER_INDEX_MAX 254 // Don't set to 255, as NETWORKDRIVER_INDEX_MAX + 1 is used #endif #ifndef NWPLUGIN_MAX #define NWPLUGIN_MAX 255 diff --git a/src/src/CustomBuild/define_plugin_sets.h b/src/src/CustomBuild/define_plugin_sets.h index 2328cd9f1c..5b892f3adf 100644 --- a/src/src/CustomBuild/define_plugin_sets.h +++ b/src/src/CustomBuild/define_plugin_sets.h @@ -4552,6 +4552,14 @@ To create/register a plugin, you have to : #endif #endif +#ifndef FEATURE_BUILD_DESCRIPTION +#if (defined(ESP32) || defined(PLUGIN_BUILD_CUSTOM)) && !defined(PLUGIN_BUILD_MINIMAL_OTA) +# define FEATURE_BUILD_DESCRIPTION 1 +#else +# define FEATURE_BUILD_DESCRIPTION 0 // Won't fit in most ESP8266 builds, but very useful in Custom builds +#endif // if (defined(ESP32) || defined(PLUGIN_BUILD_CUSTOM)) && !defined(PLUGIN_BUILD_MINIMAL_OTA) +#endif // ifndef FEATURE_BUILD_DESCRIPTION + #if !FEATURE_SPI && !FEATURE_I2C && !FEATURE_MODBUS && !FEATURE_CAN && !FEATURE_WRMBUS && !FEATURE_WIMBUS #ifdef WEBSERVER_INTERFACES diff --git a/src/src/DataTypes/ProtocolIndex.cpp b/src/src/DataTypes/ProtocolIndex.cpp index 45ec8c3728..be25873c3d 100644 --- a/src/src/DataTypes/ProtocolIndex.cpp +++ b/src/src/DataTypes/ProtocolIndex.cpp @@ -2,4 +2,4 @@ #include "../CustomBuild/ESPEasyLimits.h" -protocolIndex_t INVALID_PROTOCOL_INDEX = CPLUGIN_MAX; \ No newline at end of file +const protocolIndex_t INVALID_PROTOCOL_INDEX = CPLUGIN_MAX + 1; \ No newline at end of file diff --git a/src/src/DataTypes/ProtocolIndex.h b/src/src/DataTypes/ProtocolIndex.h index d660d59509..ac5a2b6698 100644 --- a/src/src/DataTypes/ProtocolIndex.h +++ b/src/src/DataTypes/ProtocolIndex.h @@ -5,7 +5,7 @@ typedef uint8_t protocolIndex_t; -extern protocolIndex_t INVALID_PROTOCOL_INDEX; +extern const protocolIndex_t INVALID_PROTOCOL_INDEX; #endif \ No newline at end of file diff --git a/src/src/Helpers/ESPEasy_Build_Description.cpp b/src/src/Helpers/ESPEasy_Build_Description.cpp new file mode 100644 index 0000000000..52c3d0c9a1 --- /dev/null +++ b/src/src/Helpers/ESPEasy_Build_Description.cpp @@ -0,0 +1,158 @@ +#include "../Helpers/ESPEasy_Build_Description.h" + +#if FEATURE_BUILD_DESCRIPTION +# include "../Helpers/_Plugin_init.h" +# include "../Helpers/_CPlugin_init.h" +# include "../Helpers/_NPlugin_init.h" +# include "../../ESPEasy/net/Helpers/_NWPlugin_init.h" +# include "../Helpers/_Feature_init.h" +# include "../Helpers/StringConverter.h" + +# include "../Globals/CPlugins.h" +# include "../Globals/NPlugins.h" +# include "../Globals/Plugins.h" +# include "../../ESPEasy/net/Globals/NWPlugins.h" + +xPluginEnumerator::xPluginEnumerator() {} + +bool xPluginEnumerator::isEmpty() { + bool result = true; + + for (size_t i = 0; i < _bitmap.size() && result; ++i) { + result = result && _bitmap[i] == 0; + } + return result; +} + +void xPluginEnumerator::fill(const uint16_t arr[]) { + _bitmap.resize(8, 0u); + + for (uint8_t i = 0; i < 8; i++) { + _bitmap[i] = arr[i]; + } +} + +String xPluginEnumerator::getString(char separator) const { + String result; + + result.reserve(_bitmap.size() * 5); // 4 HEX characters per 16 bit value + separator + size_t zeroCount = 0; + bool haveZeroes = false; // Did we already handle multiple 0-words? (Use IPv6-style bitmap compression) + + for (size_t i = 0; i < _bitmap.size(); ++i) { + if ((_bitmap[i] == 0) && !haveZeroes) { + ++zeroCount; + } else if (zeroCount > 1) { // At least 2 succeeding words must be 0 to be compressed into :: + result += separator; + zeroCount = 0; + haveZeroes = true; + } else if (zeroCount == 1) { // Only one word is 0 + result += separator; + zeroCount = 0; + } + + if (zeroCount == 0) { + if (_bitmap[i] != 0) { + result += String(_bitmap[i], HEX); + } + result += separator; + } + } + + if (zeroCount > 1) { + result += separator; // Add closing separator if last 2 or more words are 0 + } + return result; +} + +String CreateBuildDescription(char separator) { + String result; + + // Plugins part 1, 1..128 + xPluginEnumerator statusMap; + + statusMap.fill(pluginsBitmap); + + if (!statusMap.isEmpty()) { + result += F("P1="); + result += statusMap.getString(separator); + result += ','; + } + + // Plugins part 2, 129..255 + statusMap.fill(&pluginsBitmap[8]); + + if (!statusMap.isEmpty()) { + result += F("P2="); + result += statusMap.getString(separator); + result += ','; + } + + // Controllers part 1, 1..128 + statusMap.fill(controllersBitmap); + + if (!statusMap.isEmpty()) { + result += F("T1="); + result += statusMap.getString(separator); + result += ','; + } + + // Controllers part 2, 129..255 + statusMap.fill(&controllersBitmap[8]); + + if (!statusMap.isEmpty()) { + result += F("T2="); + result += statusMap.getString(separator); + result += ','; + } + + # if FEATURE_NOTIFIER && !defined(NOTIFIER_SET_NONE) + statusMap.fill(notifierBitmaps); + + if (!statusMap.isEmpty()) { + result += F("N1="); + result += statusMap.getString(separator); + result += ','; + } + # endif // if FEATURE_NOTIFIER && !defined(NOTIFIER_SET_NONE) + + statusMap.fill(ESPEasy::net::networksBitmap); + + if (!statusMap.isEmpty()) { + result += F("W1="); + result += statusMap.getString(separator); + result += ','; + } + + statusMap.fill(&ESPEasy::net::networksBitmap[8]); + + if (!statusMap.isEmpty()) { + result += F("W2="); + result += statusMap.getString(separator); + result += ','; + } + + statusMap.fill(featuresBitmap); + + if (!statusMap.isEmpty()) { + result += F("U1="); + result += statusMap.getString(separator); + result += ','; + } + + statusMap.fill(&featuresBitmap[8]); + + if (!statusMap.isEmpty()) { + result += F("U2="); + result += statusMap.getString(separator); + result += ','; + } + + if (result.endsWith(F(","))) { + result = result.substring(0, result.length() - 1); + } + + return result; +} + +#endif // if FEATURE_BUILD_DESCRIPTION diff --git a/src/src/Helpers/ESPEasy_Build_Description.h b/src/src/Helpers/ESPEasy_Build_Description.h new file mode 100644 index 0000000000..0a090025e3 --- /dev/null +++ b/src/src/Helpers/ESPEasy_Build_Description.h @@ -0,0 +1,26 @@ +#pragma once + +#include "../../ESPEasy_common.h" + +#if FEATURE_BUILD_DESCRIPTION +# include + +struct xPluginEnumerator { +public: + + xPluginEnumerator(); + + bool isEmpty(); + + void fill(const uint16_t arr[]); + + String getString(char separator) const; + +private: + + std::vector_bitmap; + +}; + +String CreateBuildDescription(char separator); +#endif // if FEATURE_BUILD_DESCRIPTION diff --git a/src/src/Helpers/StringProvider.cpp b/src/src/Helpers/StringProvider.cpp index a934ef7e8c..c4a3231f55 100644 --- a/src/src/Helpers/StringProvider.cpp +++ b/src/src/Helpers/StringProvider.cpp @@ -26,6 +26,9 @@ #include "../Globals/Settings.h" #include "../Helpers/Convert.h" +#if FEATURE_BUILD_DESCRIPTION +#include "../Helpers/ESPEasy_Build_Description.h" +#endif // if FEATURE_BUILD_DESCRIPTION #include "../Helpers/ESPEasy_Storage.h" # if FEATURE_TASKVALUE_UNIT_OF_MEASURE #include "../Helpers/ESPEasy_UnitOfMeasure.h" @@ -853,6 +856,12 @@ KeyValueStruct getKeyValue(LabelType::Enum label, bool extendedValue) { return KeyValueStruct(F("Build Platform"), get_build_platform()); } + #if FEATURE_BUILD_DESCRIPTION + case LabelType::BUILD_DESCRIPTION: + { + return KeyValueStruct(F("Build Description"), (const String)CreateBuildDescription(':')); + } + #endif // if FEATURE_BUILD_DESCRIPTION case LabelType::GIT_HEAD: { return KeyValueStruct(F("Git HEAD"), get_git_head()); diff --git a/src/src/Helpers/StringProvider.h b/src/src/Helpers/StringProvider.h index 4ab9a6894b..1f8b0f5bf9 100644 --- a/src/src/Helpers/StringProvider.h +++ b/src/src/Helpers/StringProvider.h @@ -190,6 +190,9 @@ struct LabelType { BUILD_TIME, BINARY_FILENAME, BUILD_PLATFORM, + #if FEATURE_BUILD_DESCRIPTION + BUILD_DESCRIPTION, + #endif // if FEATURE_BUILD_DESCRIPTION GIT_HEAD, #ifdef CONFIGURATION_CODE CONFIGURATION_CODE_LBL, diff --git a/src/src/Helpers/_BitmapArray_Helper.cpp b/src/src/Helpers/_BitmapArray_Helper.cpp new file mode 100644 index 0000000000..f3bf087bfa --- /dev/null +++ b/src/src/Helpers/_BitmapArray_Helper.cpp @@ -0,0 +1,48 @@ +#include "../Helpers/_BitmapArray_Helper.h" + +/** + * Gather the Index or Count for the _id by skipping inbetween 0-bits, no validity checks here. + * Also determines the highest available ID + 1 for sizing an array + * Will return the Count if _id == _max! + * Using uint8_t for _id and return value as that's the basetype for pluginID_t and cpluginID_t, + * and also because the max. usable value is 8 bits (without major surgery on ESPEasy core) + */ +uint8_t getIndexFromBitmap(const uint16_t _bitmap[], uint8_t _id, uint8_t _max, size_t& _highest) { + uint8_t count = 0; + uint8_t index = 0; + + // Account for IDs to be 1-based + for (uint8_t n = 1; n < _max && count < _id + 1; n++) { + const uint16_t wordIndex = (n - 1) / 16; + const uint16_t bitIndex = 15 - ((n - 1) % 16); + + if (bitRead(_bitmap[wordIndex], bitIndex)) { + count++; // Count + index = n; + _highest = n + 1; // Highest ID + 1 + } + } + return _id == _max ? count : index; +} + +/** + * Gather the ID for the _index by skipping inbetween 0-bits, no validity checks here. + * Using uint8_t for _index and return value as that's the basetype for pluginID_t and cpluginID_t, + * and also because the max. usable value is 8 bits (without major surgery on ESPEasy core) + */ +uint8_t getIdFromBitmap(const uint16_t _bitmap[], uint8_t _index, uint8_t _max, uint8_t _invalid) { + uint8_t result = 0; + uint8_t id = _invalid; + + // Account for IDs to be 1-based + for (uint8_t n = 1; n < _max && result < _index; n++) { + const uint16_t wordIndex = (n - 1) / 16; + const uint16_t bitIndex = 15 - ((n - 1) % 16); + + if (bitRead(_bitmap[wordIndex], bitIndex)) { + result++; // Count + id = n; // ID + } + } + return id; +} diff --git a/src/src/Helpers/_BitmapArray_Helper.h b/src/src/Helpers/_BitmapArray_Helper.h new file mode 100644 index 0000000000..3e04795798 --- /dev/null +++ b/src/src/Helpers/_BitmapArray_Helper.h @@ -0,0 +1,13 @@ +#pragma once + +#include "ESPEasy_common.h" + +uint8_t getIndexFromBitmap(const uint16_t _bitmap[], + uint8_t _index, + uint8_t _max, + size_t & _highest); + +uint8_t getIdFromBitmap(const uint16_t _bitmap[], + uint8_t _index, + uint8_t _max, + uint8_t _invalid = 255u); diff --git a/src/src/Helpers/_CPlugin_init.cpp b/src/src/Helpers/_CPlugin_init.cpp index 6fde51e149..3879bd6cfb 100644 --- a/src/src/Helpers/_CPlugin_init.cpp +++ b/src/src/Helpers/_CPlugin_init.cpp @@ -10,12 +10,1037 @@ #include "../Helpers/Misc.h" #include "../Helpers/StringConverter.h" +#include // ******************************************************************************** // Initialize all Controller CPlugins that where defined earlier // and initialize the function call pointer into the CCPlugin array // ******************************************************************************** +#if FEATURE_BUILD_DESCRIPTION +const uint16_t controllersBitmap[] = { + 0u // n=1 : m=0 +#ifdef USES_C001 + | 1 << 15 +#endif // ifdef USES_C001 + +#ifdef USES_C002 + | 1 << 14 +#endif // ifdef USES_C002 + +#ifdef USES_C003 + | 1 << 13 +#endif // ifdef USES_C003 + +#ifdef USES_C004 + | 1 << 12 +#endif // ifdef USES_C004 + +#ifdef USES_C005 + | 1 << 11 +#endif // ifdef USES_C005 + +#ifdef USES_C006 + | 1 << 10 +#endif // ifdef USES_C006 + +#ifdef USES_C007 + | 1 << 9 +#endif // ifdef USES_C007 + +#ifdef USES_C008 + | 1 << 8 +#endif // ifdef USES_C008 + +#ifdef USES_C009 + | 1 << 7 +#endif // ifdef USES_C009 + +#ifdef USES_C010 + | 1 << 6 +#endif // ifdef USES_C010 + +#ifdef USES_C011 + | 1 << 5 +#endif // ifdef USES_C011 + +#ifdef USES_C012 + | 1 << 4 +#endif // ifdef USES_C012 + +#ifdef USES_C013 + | 1 << 3 +#endif // ifdef USES_C013 + +#ifdef USES_C014 + | 1 << 2 +#endif // ifdef USES_C014 + +#ifdef USES_C015 + | 1 << 1 +#endif // ifdef USES_C015 + +#ifdef USES_C016 + | 1 << 0 +#endif // ifdef USES_C016 + , 0u // n=17 : m=0 +#ifdef USES_C017 + | 1 << 15 +#endif // ifdef USES_C017 + +#ifdef USES_C018 + | 1 << 14 +#endif // ifdef USES_C018 + +#ifdef USES_C019 + | 1 << 13 +#endif // ifdef USES_C019 + +#ifdef USES_C020 + | 1 << 12 +#endif // ifdef USES_C020 + +#ifdef USES_C021 + | 1 << 11 +#endif // ifdef USES_C021 + +#ifdef USES_C022 + | 1 << 10 +#endif // ifdef USES_C022 + +#ifdef USES_C023 + | 1 << 9 +#endif // ifdef USES_C023 + +#ifdef USES_C024 + | 1 << 8 +#endif // ifdef USES_C024 + +#ifdef USES_C025 + | 1 << 7 +#endif // ifdef USES_C025 + +#ifdef USES_C026 + | 1 << 6 +#endif // ifdef USES_C026 + +#ifdef USES_C027 + | 1 << 5 +#endif // ifdef USES_C027 + +#ifdef USES_C028 + | 1 << 4 +#endif // ifdef USES_C028 + +#ifdef USES_C029 + | 1 << 3 +#endif // ifdef USES_C029 + +#ifdef USES_C030 + | 1 << 2 +#endif // ifdef USES_C030 + +#ifdef USES_C031 + | 1 << 1 +#endif // ifdef USES_C031 + +#ifdef USES_C032 + | 1 << 0 +#endif // ifdef USES_C032 + , 0u // n=33 : m=0 +#ifdef USES_C033 + | 1 << 15 +#endif // ifdef USES_C033 + +#ifdef USES_C034 + | 1 << 14 +#endif // ifdef USES_C034 + +#ifdef USES_C035 + | 1 << 13 +#endif // ifdef USES_C035 + +#ifdef USES_C036 + | 1 << 12 +#endif // ifdef USES_C036 + +#ifdef USES_C037 + | 1 << 11 +#endif // ifdef USES_C037 + +#ifdef USES_C038 + | 1 << 10 +#endif // ifdef USES_C038 + +#ifdef USES_C039 + | 1 << 9 +#endif // ifdef USES_C039 + +#ifdef USES_C040 + | 1 << 8 +#endif // ifdef USES_C040 + +#ifdef USES_C041 + | 1 << 7 +#endif // ifdef USES_C041 + +#ifdef USES_C042 + | 1 << 6 +#endif // ifdef USES_C042 + +#ifdef USES_C043 + | 1 << 5 +#endif // ifdef USES_C043 + +#ifdef USES_C044 + | 1 << 4 +#endif // ifdef USES_C044 + +#ifdef USES_C045 + | 1 << 3 +#endif // ifdef USES_C045 + +#ifdef USES_C046 + | 1 << 2 +#endif // ifdef USES_C046 + +#ifdef USES_C047 + | 1 << 1 +#endif // ifdef USES_C047 + +#ifdef USES_C048 + | 1 << 0 +#endif // ifdef USES_C048 + , 0u // n=49 : m=0 +#ifdef USES_C049 + | 1 << 15 +#endif // ifdef USES_C049 + +#ifdef USES_C050 + | 1 << 14 +#endif // ifdef USES_C050 + +#ifdef USES_C051 + | 1 << 13 +#endif // ifdef USES_C051 + +#ifdef USES_C052 + | 1 << 12 +#endif // ifdef USES_C052 + +#ifdef USES_C053 + | 1 << 11 +#endif // ifdef USES_C053 + +#ifdef USES_C054 + | 1 << 10 +#endif // ifdef USES_C054 + +#ifdef USES_C055 + | 1 << 9 +#endif // ifdef USES_C055 + +#ifdef USES_C056 + | 1 << 8 +#endif // ifdef USES_C056 + +#ifdef USES_C057 + | 1 << 7 +#endif // ifdef USES_C057 + +#ifdef USES_C058 + | 1 << 6 +#endif // ifdef USES_C058 + +#ifdef USES_C059 + | 1 << 5 +#endif // ifdef USES_C059 + +#ifdef USES_C060 + | 1 << 4 +#endif // ifdef USES_C060 + +#ifdef USES_C061 + | 1 << 3 +#endif // ifdef USES_C061 + +#ifdef USES_C062 + | 1 << 2 +#endif // ifdef USES_C062 + +#ifdef USES_C063 + | 1 << 1 +#endif // ifdef USES_C063 + +#ifdef USES_C064 + | 1 << 0 +#endif // ifdef USES_C064 + , 0u // n=65 : m=0 +#ifdef USES_C065 + | 1 << 15 +#endif // ifdef USES_C065 + +#ifdef USES_C066 + | 1 << 14 +#endif // ifdef USES_C066 + +#ifdef USES_C067 + | 1 << 13 +#endif // ifdef USES_C067 + +#ifdef USES_C068 + | 1 << 12 +#endif // ifdef USES_C068 + +#ifdef USES_C069 + | 1 << 11 +#endif // ifdef USES_C069 + +#ifdef USES_C070 + | 1 << 10 +#endif // ifdef USES_C070 + +#ifdef USES_C071 + | 1 << 9 +#endif // ifdef USES_C071 + +#ifdef USES_C072 + | 1 << 8 +#endif // ifdef USES_C072 + +#ifdef USES_C073 + | 1 << 7 +#endif // ifdef USES_C073 + +#ifdef USES_C074 + | 1 << 6 +#endif // ifdef USES_C074 + +#ifdef USES_C075 + | 1 << 5 +#endif // ifdef USES_C075 + +#ifdef USES_C076 + | 1 << 4 +#endif // ifdef USES_C076 + +#ifdef USES_C077 + | 1 << 3 +#endif // ifdef USES_C077 + +#ifdef USES_C078 + | 1 << 2 +#endif // ifdef USES_C078 + +#ifdef USES_C079 + | 1 << 1 +#endif // ifdef USES_C079 + +#ifdef USES_C080 + | 1 << 0 +#endif // ifdef USES_C080 + , 0u // n=81 : m=0 +#ifdef USES_C081 + | 1 << 15 +#endif // ifdef USES_C081 + +#ifdef USES_C082 + | 1 << 14 +#endif // ifdef USES_C082 + +#ifdef USES_C083 + | 1 << 13 +#endif // ifdef USES_C083 + +#ifdef USES_C084 + | 1 << 12 +#endif // ifdef USES_C084 + +#ifdef USES_C085 + | 1 << 11 +#endif // ifdef USES_C085 + +#ifdef USES_C086 + | 1 << 10 +#endif // ifdef USES_C086 + +#ifdef USES_C087 + | 1 << 9 +#endif // ifdef USES_C087 + +#ifdef USES_C088 + | 1 << 8 +#endif // ifdef USES_C088 + +#ifdef USES_C089 + | 1 << 7 +#endif // ifdef USES_C089 + +#ifdef USES_C090 + | 1 << 6 +#endif // ifdef USES_C090 + +#ifdef USES_C091 + | 1 << 5 +#endif // ifdef USES_C091 + +#ifdef USES_C092 + | 1 << 4 +#endif // ifdef USES_C092 + +#ifdef USES_C093 + | 1 << 3 +#endif // ifdef USES_C093 + +#ifdef USES_C094 + | 1 << 2 +#endif // ifdef USES_C094 + +#ifdef USES_C095 + | 1 << 1 +#endif // ifdef USES_C095 + +#ifdef USES_C096 + | 1 << 0 +#endif // ifdef USES_C096 + , 0u // n=97 : m=0 +#ifdef USES_C097 + | 1 << 15 +#endif // ifdef USES_C097 + +#ifdef USES_C098 + | 1 << 14 +#endif // ifdef USES_C098 + +#ifdef USES_C099 + | 1 << 13 +#endif // ifdef USES_C099 + +#ifdef USES_C100 + | 1 << 12 +#endif // ifdef USES_C100 + +#ifdef USES_C101 + | 1 << 11 +#endif // ifdef USES_C101 + +#ifdef USES_C102 + | 1 << 10 +#endif // ifdef USES_C102 + +#ifdef USES_C103 + | 1 << 9 +#endif // ifdef USES_C103 + +#ifdef USES_C104 + | 1 << 8 +#endif // ifdef USES_C104 + +#ifdef USES_C105 + | 1 << 7 +#endif // ifdef USES_C105 + +#ifdef USES_C106 + | 1 << 6 +#endif // ifdef USES_C106 + +#ifdef USES_C107 + | 1 << 5 +#endif // ifdef USES_C107 + +#ifdef USES_C108 + | 1 << 4 +#endif // ifdef USES_C108 + +#ifdef USES_C109 + | 1 << 3 +#endif // ifdef USES_C109 + +#ifdef USES_C110 + | 1 << 2 +#endif // ifdef USES_C110 + +#ifdef USES_C111 + | 1 << 1 +#endif // ifdef USES_C111 + +#ifdef USES_C112 + | 1 << 0 +#endif // ifdef USES_C112 + , 0u // n=113 : m=0 +#ifdef USES_C113 + | 1 << 15 +#endif // ifdef USES_C113 + +#ifdef USES_C114 + | 1 << 14 +#endif // ifdef USES_C114 + +#ifdef USES_C115 + | 1 << 13 +#endif // ifdef USES_C115 + +#ifdef USES_C116 + | 1 << 12 +#endif // ifdef USES_C116 + +#ifdef USES_C117 + | 1 << 11 +#endif // ifdef USES_C117 + +#ifdef USES_C118 + | 1 << 10 +#endif // ifdef USES_C118 + +#ifdef USES_C119 + | 1 << 9 +#endif // ifdef USES_C119 + +#ifdef USES_C120 + | 1 << 8 +#endif // ifdef USES_C120 + +#ifdef USES_C121 + | 1 << 7 +#endif // ifdef USES_C121 + +#ifdef USES_C122 + | 1 << 6 +#endif // ifdef USES_C122 + +#ifdef USES_C123 + | 1 << 5 +#endif // ifdef USES_C123 + +#ifdef USES_C124 + | 1 << 4 +#endif // ifdef USES_C124 + +#ifdef USES_C125 + | 1 << 3 +#endif // ifdef USES_C125 + +#ifdef USES_C126 + | 1 << 2 +#endif // ifdef USES_C126 + +#ifdef USES_C127 + | 1 << 1 +#endif // ifdef USES_C127 + +#ifdef USES_C128 + | 1 << 0 +#endif // ifdef USES_C128 + , 0u // n=129 : m=0 +#ifdef USES_C129 + | 1 << 15 +#endif // ifdef USES_C129 + +#ifdef USES_C130 + | 1 << 14 +#endif // ifdef USES_C130 + +#ifdef USES_C131 + | 1 << 13 +#endif // ifdef USES_C131 + +#ifdef USES_C132 + | 1 << 12 +#endif // ifdef USES_C132 + +#ifdef USES_C133 + | 1 << 11 +#endif // ifdef USES_C133 + +#ifdef USES_C134 + | 1 << 10 +#endif // ifdef USES_C134 + +#ifdef USES_C135 + | 1 << 9 +#endif // ifdef USES_C135 + +#ifdef USES_C136 + | 1 << 8 +#endif // ifdef USES_C136 + +#ifdef USES_C137 + | 1 << 7 +#endif // ifdef USES_C137 + +#ifdef USES_C138 + | 1 << 6 +#endif // ifdef USES_C138 + +#ifdef USES_C139 + | 1 << 5 +#endif // ifdef USES_C139 + +#ifdef USES_C140 + | 1 << 4 +#endif // ifdef USES_C140 + +#ifdef USES_C141 + | 1 << 3 +#endif // ifdef USES_C141 + +#ifdef USES_C142 + | 1 << 2 +#endif // ifdef USES_C142 + +#ifdef USES_C143 + | 1 << 1 +#endif // ifdef USES_C143 + +#ifdef USES_C144 + | 1 << 0 +#endif // ifdef USES_C144 + , 0u // n=145 : m=0 +#ifdef USES_C145 + | 1 << 15 +#endif // ifdef USES_C145 + +#ifdef USES_C146 + | 1 << 14 +#endif // ifdef USES_C146 + +#ifdef USES_C147 + | 1 << 13 +#endif // ifdef USES_C147 + +#ifdef USES_C148 + | 1 << 12 +#endif // ifdef USES_C148 + +#ifdef USES_C149 + | 1 << 11 +#endif // ifdef USES_C149 + +#ifdef USES_C150 + | 1 << 10 +#endif // ifdef USES_C150 + +#ifdef USES_C151 + | 1 << 9 +#endif // ifdef USES_C151 + +#ifdef USES_C152 + | 1 << 8 +#endif // ifdef USES_C152 + +#ifdef USES_C153 + | 1 << 7 +#endif // ifdef USES_C153 + +#ifdef USES_C154 + | 1 << 6 +#endif // ifdef USES_C154 + +#ifdef USES_C155 + | 1 << 5 +#endif // ifdef USES_C155 + +#ifdef USES_C156 + | 1 << 4 +#endif // ifdef USES_C156 + +#ifdef USES_C157 + | 1 << 3 +#endif // ifdef USES_C157 + +#ifdef USES_C158 + | 1 << 2 +#endif // ifdef USES_C158 + +#ifdef USES_C159 + | 1 << 1 +#endif // ifdef USES_C159 + +#ifdef USES_C160 + | 1 << 0 +#endif // ifdef USES_C160 + , 0u // n=161 : m=0 +#ifdef USES_C161 + | 1 << 15 +#endif // ifdef USES_C161 + +#ifdef USES_C162 + | 1 << 14 +#endif // ifdef USES_C162 + +#ifdef USES_C163 + | 1 << 13 +#endif // ifdef USES_C163 + +#ifdef USES_C164 + | 1 << 12 +#endif // ifdef USES_C164 + +#ifdef USES_C165 + | 1 << 11 +#endif // ifdef USES_C165 + +#ifdef USES_C166 + | 1 << 10 +#endif // ifdef USES_C166 + +#ifdef USES_C167 + | 1 << 9 +#endif // ifdef USES_C167 + +#ifdef USES_C168 + | 1 << 8 +#endif // ifdef USES_C168 + +#ifdef USES_C169 + | 1 << 7 +#endif // ifdef USES_C169 + +#ifdef USES_C170 + | 1 << 6 +#endif // ifdef USES_C170 + +#ifdef USES_C171 + | 1 << 5 +#endif // ifdef USES_C171 + +#ifdef USES_C172 + | 1 << 4 +#endif // ifdef USES_C172 + +#ifdef USES_C173 + | 1 << 3 +#endif // ifdef USES_C173 + +#ifdef USES_C174 + | 1 << 2 +#endif // ifdef USES_C174 + +#ifdef USES_C175 + | 1 << 1 +#endif // ifdef USES_C175 + +#ifdef USES_C176 + | 1 << 0 +#endif // ifdef USES_C176 + , 0u // n=177 : m=0 +#ifdef USES_C177 + | 1 << 15 +#endif // ifdef USES_C177 + +#ifdef USES_C178 + | 1 << 14 +#endif // ifdef USES_C178 + +#ifdef USES_C179 + | 1 << 13 +#endif // ifdef USES_C179 + +#ifdef USES_C180 + | 1 << 12 +#endif // ifdef USES_C180 + +#ifdef USES_C181 + | 1 << 11 +#endif // ifdef USES_C181 + +#ifdef USES_C182 + | 1 << 10 +#endif // ifdef USES_C182 + +#ifdef USES_C183 + | 1 << 9 +#endif // ifdef USES_C183 + +#ifdef USES_C184 + | 1 << 8 +#endif // ifdef USES_C184 + +#ifdef USES_C185 + | 1 << 7 +#endif // ifdef USES_C185 + +#ifdef USES_C186 + | 1 << 6 +#endif // ifdef USES_C186 + +#ifdef USES_C187 + | 1 << 5 +#endif // ifdef USES_C187 + +#ifdef USES_C188 + | 1 << 4 +#endif // ifdef USES_C188 + +#ifdef USES_C189 + | 1 << 3 +#endif // ifdef USES_C189 + +#ifdef USES_C190 + | 1 << 2 +#endif // ifdef USES_C190 + +#ifdef USES_C191 + | 1 << 1 +#endif // ifdef USES_C191 + +#ifdef USES_C192 + | 1 << 0 +#endif // ifdef USES_C192 + , 0u // n=193 : m=0 +#ifdef USES_C193 + | 1 << 15 +#endif // ifdef USES_C193 + +#ifdef USES_C194 + | 1 << 14 +#endif // ifdef USES_C194 + +#ifdef USES_C195 + | 1 << 13 +#endif // ifdef USES_C195 + +#ifdef USES_C196 + | 1 << 12 +#endif // ifdef USES_C196 + +#ifdef USES_C197 + | 1 << 11 +#endif // ifdef USES_C197 + +#ifdef USES_C198 + | 1 << 10 +#endif // ifdef USES_C198 + +#ifdef USES_C199 + | 1 << 9 +#endif // ifdef USES_C199 + +#ifdef USES_C200 + | 1 << 8 +#endif // ifdef USES_C200 + +#ifdef USES_C201 + | 1 << 7 +#endif // ifdef USES_C201 + +#ifdef USES_C202 + | 1 << 6 +#endif // ifdef USES_C202 + +#ifdef USES_C203 + | 1 << 5 +#endif // ifdef USES_C203 + +#ifdef USES_C204 + | 1 << 4 +#endif // ifdef USES_C204 + +#ifdef USES_C205 + | 1 << 3 +#endif // ifdef USES_C205 + +#ifdef USES_C206 + | 1 << 2 +#endif // ifdef USES_C206 + +#ifdef USES_C207 + | 1 << 1 +#endif // ifdef USES_C207 + +#ifdef USES_C208 + | 1 << 0 +#endif // ifdef USES_C208 + , 0u // n=209 : m=0 +#ifdef USES_C209 + | 1 << 15 +#endif // ifdef USES_C209 + +#ifdef USES_C210 + | 1 << 14 +#endif // ifdef USES_C210 + +#ifdef USES_C211 + | 1 << 13 +#endif // ifdef USES_C211 + +#ifdef USES_C212 + | 1 << 12 +#endif // ifdef USES_C212 + +#ifdef USES_C213 + | 1 << 11 +#endif // ifdef USES_C213 + +#ifdef USES_C214 + | 1 << 10 +#endif // ifdef USES_C214 + +#ifdef USES_C215 + | 1 << 9 +#endif // ifdef USES_C215 + +#ifdef USES_C216 + | 1 << 8 +#endif // ifdef USES_C216 + +#ifdef USES_C217 + | 1 << 7 +#endif // ifdef USES_C217 + +#ifdef USES_C218 + | 1 << 6 +#endif // ifdef USES_C218 + +#ifdef USES_C219 + | 1 << 5 +#endif // ifdef USES_C219 + +#ifdef USES_C220 + | 1 << 4 +#endif // ifdef USES_C220 + +#ifdef USES_C221 + | 1 << 3 +#endif // ifdef USES_C221 + +#ifdef USES_C222 + | 1 << 2 +#endif // ifdef USES_C222 + +#ifdef USES_C223 + | 1 << 1 +#endif // ifdef USES_C223 + +#ifdef USES_C224 + | 1 << 0 +#endif // ifdef USES_C224 + , 0u // n=225 : m=0 +#ifdef USES_C225 + | 1 << 15 +#endif // ifdef USES_C225 + +#ifdef USES_C226 + | 1 << 14 +#endif // ifdef USES_C226 + +#ifdef USES_C227 + | 1 << 13 +#endif // ifdef USES_C227 + +#ifdef USES_C228 + | 1 << 12 +#endif // ifdef USES_C228 + +#ifdef USES_C229 + | 1 << 11 +#endif // ifdef USES_C229 + +#ifdef USES_C230 + | 1 << 10 +#endif // ifdef USES_C230 + +#ifdef USES_C231 + | 1 << 9 +#endif // ifdef USES_C231 + +#ifdef USES_C232 + | 1 << 8 +#endif // ifdef USES_C232 + +#ifdef USES_C233 + | 1 << 7 +#endif // ifdef USES_C233 + +#ifdef USES_C234 + | 1 << 6 +#endif // ifdef USES_C234 + +#ifdef USES_C235 + | 1 << 5 +#endif // ifdef USES_C235 + +#ifdef USES_C236 + | 1 << 4 +#endif // ifdef USES_C236 + +#ifdef USES_C237 + | 1 << 3 +#endif // ifdef USES_C237 + +#ifdef USES_C238 + | 1 << 2 +#endif // ifdef USES_C238 + +#ifdef USES_C239 + | 1 << 1 +#endif // ifdef USES_C239 + +#ifdef USES_C240 + | 1 << 0 +#endif // ifdef USES_C240 + , 0u // n=241 : m=0 +#ifdef USES_C241 + | 1 << 15 +#endif // ifdef USES_C241 + +#ifdef USES_C242 + | 1 << 14 +#endif // ifdef USES_C242 + +#ifdef USES_C243 + | 1 << 13 +#endif // ifdef USES_C243 + +#ifdef USES_C244 + | 1 << 12 +#endif // ifdef USES_C244 + +#ifdef USES_C245 + | 1 << 11 +#endif // ifdef USES_C245 + +#ifdef USES_C246 + | 1 << 10 +#endif // ifdef USES_C246 + +#ifdef USES_C247 + | 1 << 9 +#endif // ifdef USES_C247 + +#ifdef USES_C248 + | 1 << 8 +#endif // ifdef USES_C248 + +#ifdef USES_C249 + | 1 << 7 +#endif // ifdef USES_C249 + +#ifdef USES_C250 + | 1 << 6 +#endif // ifdef USES_C250 + +#ifdef USES_C251 + | 1 << 5 +#endif // ifdef USES_C251 + +#ifdef USES_C252 + | 1 << 4 +#endif // ifdef USES_C252 + +#ifdef USES_C253 + | 1 << 3 +#endif // ifdef USES_C253 + +#ifdef USES_C254 + | 1 << 2 +#endif // ifdef USES_C254 + +#ifdef USES_C255 + | 1 << 1 +#endif // ifdef USES_C255 +}; +#else // if FEATURE_BUILD_DESCRIPTION constexpr cpluginID_t ProtocolIndex_to_CPlugin_id[] PROGMEM = { #ifdef USES_C001 @@ -1038,6 +2063,7 @@ constexpr cpluginID_t ProtocolIndex_to_CPlugin_id[] PROGMEM = 255, #endif // ifdef USES_C255 }; +#endif // if FEATURE_BUILD_DESCRIPTION typedef bool (*CPlugin_ptr_t)(CPlugin::Function, @@ -2068,6 +3094,25 @@ const CPlugin_ptr_t PROGMEM CPlugin_ptr[] = }; +#if FEATURE_BUILD_DESCRIPTION +size_t ProtocolIndex_to_CPlugin_id_size{}; + +// Highest CPlugin ID included in the build +size_t Highest_CPlugin_id{}; + +bool isCPluginIncluded_(cpluginID_t cpluginID) { + if (cpluginID == INVALID_C_PLUGIN_ID) { return false; } + const uint16_t wordIndex = (cpluginID - 1) / 16; + const uint16_t bitIndex = 15 - ((cpluginID - 1) % 16); + + // Controller available? + return bitRead(controllersBitmap[wordIndex], bitIndex); +} + +std::vector ProtocolArray; + +#else // if FEATURE_BUILD_DESCRIPTION + constexpr size_t ProtocolIndex_to_CPlugin_id_size = sizeof(ProtocolIndex_to_CPlugin_id); // Highest CPlugin ID included in the build @@ -2082,15 +3127,39 @@ protocolIndex_t CPlugin_id_to_ProtocolIndex[CPlugin_id_to_ProtocolIndex_size]{}; ProtocolStruct ProtocolArray[ProtocolIndex_to_CPlugin_id_size + 1]{}; +#endif // if FEATURE_BUILD_DESCRIPTION ProtocolStruct& getProtocolStruct(protocolIndex_t protocolIndex) { if (protocolIndex >= ProtocolIndex_to_CPlugin_id_size) { protocolIndex = ProtocolIndex_to_CPlugin_id_size; } + #if FEATURE_BUILD_DESCRIPTION + if (ProtocolArray.size() <= static_cast(protocolIndex)) { + ProtocolArray.resize(static_cast(protocolIndex) + 1); + } + #endif // if FEATURE_BUILD_DESCRIPTION return ProtocolArray[protocolIndex]; } +#if FEATURE_BUILD_DESCRIPTION +protocolIndex_t do_getProtocolIndex_from_CPluginID(cpluginID_t cpluginID) { + if (!isCPluginIncluded_(cpluginID)) { return INVALID_PROTOCOL_INDEX; } + + size_t _highest; // ignored + const uint8_t protocolIndex = getIndexFromBitmap(controllersBitmap, cpluginID, cpluginID, _highest); + + return static_cast(protocolIndex); +} + +cpluginID_t do_getCPluginID_from_ProtocolIndex(protocolIndex_t protocolIndex) { + cpluginID_t pluginID = static_cast(getIdFromBitmap(controllersBitmap, protocolIndex + 1, CPLUGIN_MAX + 1, static_cast(INVALID_C_PLUGIN_ID))); // Protocol is 0-based, bitmap is 1-based + + return pluginID; +} + +#else // if FEATURE_BUILD_DESCRIPTION + protocolIndex_t do_getProtocolIndex_from_CPluginID(cpluginID_t cpluginID) { if (cpluginID < CPlugin_id_to_ProtocolIndex_size) @@ -2109,6 +3178,7 @@ cpluginID_t do_getCPluginID_from_ProtocolIndex(protocolIndex_t protocolIndex) } return INVALID_C_PLUGIN_ID; } +#endif // if FEATURE_BUILD_DESCRIPTION bool do_check_validProtocolIndex(protocolIndex_t protocolIndex) { @@ -2151,6 +3221,38 @@ bool do_CPluginCall(protocolIndex_t protocolIndex, CPlugin::Function Function, s return false; } +#if FEATURE_BUILD_DESCRIPTION +void CPluginSetup() +{ + static bool setupDone = false; + + if (setupDone) { return; } + + if (ProtocolIndex_to_CPlugin_id_size == 0) + { + // Determine Controller count + ProtocolIndex_to_CPlugin_id_size = getIndexFromBitmap(controllersBitmap, + CPLUGIN_MAX + 1, + CPLUGIN_MAX + 1, + Highest_CPlugin_id); + } + + for (protocolIndex_t protocolIndex = 0; protocolIndex < ProtocolIndex_to_CPlugin_id_size; ++protocolIndex) + { + const cpluginID_t cpluginID = do_getCPluginID_from_ProtocolIndex(protocolIndex); + + if (INVALID_C_PLUGIN_ID != cpluginID) { + struct EventStruct TempEvent; + TempEvent.idx = protocolIndex; + String dummy; + do_CPluginCall(protocolIndex, CPlugin::Function::CPLUGIN_PROTOCOL_ADD, &TempEvent, dummy); + } + } + setupDone = true; +} + +#else // if FEATURE_BUILD_DESCRIPTION + void CPluginSetup() { static bool setupDone = false; @@ -2176,6 +3278,7 @@ void CPluginSetup() } setupDone = true; } +#endif // if FEATURE_BUILD_DESCRIPTION void CPluginInit() { @@ -2205,4 +3308,4 @@ void CPlugin_Exit_Init(controllerIndex_t controllerIndex) CPluginCall(CPlugin::Function::CPLUGIN_INIT, &TempEvent, dummy); } } -} \ No newline at end of file +} diff --git a/src/src/Helpers/_CPlugin_init.h b/src/src/Helpers/_CPlugin_init.h index 17470757d0..45d8b1b6ca 100644 --- a/src/src/Helpers/_CPlugin_init.h +++ b/src/src/Helpers/_CPlugin_init.h @@ -2,6 +2,9 @@ #define HELPERS__CPLUGIN_INIT_H #include "../../ESPEasy_common.h" +#if FEATURE_BUILD_DESCRIPTION +#include "../Helpers/_BitmapArray_Helper.h" +#endif // if FEATURE_BUILD_DESCRIPTION #include "../DataTypes/ESPEasy_plugin_functions.h" @@ -10,6 +13,10 @@ #include "../DataTypes/ProtocolIndex.h" #include "../DataStructs/ProtocolStruct.h" +#if FEATURE_BUILD_DESCRIPTION +extern const uint16_t controllersBitmap[]; +#endif // if FEATURE_BUILD_DESCRIPTION + struct EventStruct; protocolIndex_t do_getProtocolIndex_from_CPluginID(cpluginID_t pluginID); diff --git a/src/src/Helpers/_Feature_init.cpp b/src/src/Helpers/_Feature_init.cpp new file mode 100644 index 0000000000..24ec9067e8 --- /dev/null +++ b/src/src/Helpers/_Feature_init.cpp @@ -0,0 +1,797 @@ +#include "../Helpers/_Feature_init.h" + +#if FEATURE_BUILD_DESCRIPTION + +# include "../DataTypes/ESPEasy_plugin_functions.h" + +# include "../Helpers/Misc.h" + +// ******************************************************************************** +// Initialize all Features that where defined earlier +// ******************************************************************************** + +const uint16_t featuresBitmap[] = { + 0u +# if FEATURE_MQTT + | 1 << 15 +# endif // if FEATURE_MQTT +# if FEATURE_ESPEASY_P2P + | 1 << 14 +# endif // if FEATURE_ESPEASY_P2P +# if FEATURE_SD + | 1 << 13 +# endif // if FEATURE_SD +# if FEATURE_ARDUINO_OTA + | 1 << 12 +# endif // if FEATURE_ARDUINO_OTA +# if FEATURE_RULES_EASY_COLOR_CODE + | 1 << 11 +# endif // if FEATURE_RULES_EASY_COLOR_CODE +# if FEATURE_DOWNLOAD + | 1 << 10 +# endif // if FEATURE_DOWNLOAD +# if FEATURE_I2C_DEVICE_SCAN + | 1 << 9 +# endif // if FEATURE_I2C_DEVICE_SCAN +# if FEATURE_SSDP + | 1 << 8 +# endif // if FEATURE_SSDP +# if FEATURE_EXT_RTC + | 1 << 7 +# endif // if FEATURE_EXT_RTC +# if FEATURE_PLUGIN_STATS + | 1 << 6 +# endif // if FEATURE_PLUGIN_STATS +# if FEATURE_CHART_JS + | 1 << 5 +# endif // if FEATURE_CHART_JS +# if FEATURE_SETTINGS_ARCHIVE + | 1 << 4 +# endif // if FEATURE_SETTINGS_ARCHIVE +# if FEATURE_I2CMULTIPLEXER + | 1 << 3 +# endif // if FEATURE_I2CMULTIPLEXER +# if FEATURE_TRIGONOMETRIC_FUNCTIONS_RULES + | 1 << 2 +# endif // if FEATURE_TRIGONOMETRIC_FUNCTIONS_RULES +# if FEATURE_SEND_TO_HTTP + | 1 << 1 +# endif // if FEATURE_SEND_TO_HTTP +# if FEATURE_PUT_TO_HTTP + | 1 << 0 +# endif // if FEATURE_PUT_TO_HTTP + , 0u // n=17 : m=0 +# if FEATURE_POST_TO_HTTP + | 1 << 15 +# endif // if FEATURE_POST_TO_HTTP +# if FEATURE_I2C_DEVICE_CHECK + | 1 << 14 +# endif // if FEATURE_I2C_DEVICE_CHECK +# if FEATURE_RTTTL + | 1 << 13 +# endif // if FEATURE_RTTTL +# if FEATURE_AUTO_DARK_MODE + | 1 << 12 +# endif // if FEATURE_AUTO_DARK_MODE +# if FEATURE_SERVO + | 1 << 11 +# endif // if FEATURE_SERVO +# if FEATURE_CUSTOM_PROVISIONING + | 1 << 10 +# endif // if FEATURE_CUSTOM_PROVISIONING +# if FEATURE_ETHERNET + | 1 << 9 +# endif // if FEATURE_ETHERNET +# if FEATURE_TIMING_STATS + | 1 << 8 +# endif // if FEATURE_TIMING_STATS +# if FEATURE_TOOLTIPS + | 1 << 7 +# endif // if FEATURE_TOOLTIPS +# if FEATURE_ADC_VCC + | 1 << 6 +# endif // if FEATURE_ADC_VCC +# if FEATURE_MDNS + | 1 << 5 +# endif // if FEATURE_MDNS +# if FEATURE_MODBUS + | 1 << 4 +# endif // if FEATURE_MODBUS +# if FEATURE_PACKED_RAW_DATA + | 1 << 3 +# endif // if FEATURE_PACKED_RAW_DATA +# if feature_adagfx_fonts + | 1 << 2 +# endif // if feature_adagfx_fonts +# if FEATURE_DEFINE_SERIAL_CONSOLE_PORT + | 1 << 1 +# endif // if FEATURE_DEFINE_SERIAL_CONSOLE_PORT +# if DEFAULT_APPEND_UNIT_TO_HOSTNAME + | 1 << 0 +# endif // if DEFAULT_APPEND_UNIT_TO_HOSTNAME + , 0 // n=32 m=0 +# if DEFAULT_SEND_TO_HTTP_ACK + | 1 << 15 +# endif // if DEFAULT_SEND_TO_HTTP_ACK +# if FEATURE_IMPROV + | 1 << 14 +# endif // if FEATURE_IMPROV +# if CONFIGURATION_CODE_not_available + | 1 << 13 +# endif // if CONFIGURATION_CODE_not_available +# if CPLUGIN_015_SSL + | 1 << 12 +# endif // if CPLUGIN_015_SSL +# ifdef LIMIT_BUILD_SIZE + | 1 << 11 +# endif // ifdef LIMIT_BUILD_SIZE +# ifdef BUILD_NO_DEBUG + | 1 << 10 +# endif // ifdef BUILD_NO_DEBUG +# if FEATURE_ZEROFILLED_UNITNUMBER + | 1 << 9 +# endif // if FEATURE_ZEROFILLED_UNITNUMBER +# if FEATURE_f040 + | 1 << 8 // F040 +# endif +# if FEATURE_f041 + | 1 << 7 // F041 +# endif +# if FEATURE_f042 + | 1 << 6 // F042 +# endif +# if FEATURE_f043 + | 1 << 5 // F043 +# endif +# if FEATURE_f044 + | 1 << 4 // F044 +# endif +# if FEATURE_f045 + | 1 << 3 // F045 +# endif +# if FEATURE_f046 + | 1 << 2 // F046 +# endif +# if FEATURE_f047 + | 1 << 1 // F047 +# endif +# if FEATURE_f048 + | 1 << 0 // F048 +# endif + , 0u // n=49 : m=0 +# if FEATURE_f049 + | 1 << 15 // F049 +# endif +# if FEATURE_f050 + | 1 << 14 // F050 +# endif +# if FEATURE_f051 + | 1 << 13 // F051 +# endif +# if FEATURE_f052 + | 1 << 12 // F052 +# endif +# if FEATURE_f053 + | 1 << 11 // F053 +# endif +# if FEATURE_f054 + | 1 << 10 // F054 +# endif +# if FEATURE_f055 + | 1 << 9 // F055 +# endif +# if FEATURE_f056 + | 1 << 8 // F056 +# endif +# if FEATURE_f057 + | 1 << 7 // F057 +# endif +# if FEATURE_f058 + | 1 << 6 // F058 +# endif +# if FEATURE_f059 + | 1 << 5 // F059 +# endif +# if FEATURE_f060 + | 1 << 4 // F060 +# endif +# if FEATURE_f061 + | 1 << 3 // F061 +# endif +# if FEATURE_f062 + | 1 << 2 // F062 +# endif +# if FEATURE_f063 + | 1 << 1 // F063 +# endif +# if FEATURE_f064 + | 1 << 0 // F064 +# endif + , 0u // n=65 : m=0 +# if FEATURE_f065 + | 1 << 15 // F065 +# endif +# if FEATURE_f066 + | 1 << 14 // F066 +# endif +# if FEATURE_f067 + | 1 << 13 // F067 +# endif +# if FEATURE_f068 + | 1 << 12 // F068 +# endif +# if FEATURE_f069 + | 1 << 11 // F069 +# endif +# if FEATURE_f070 + | 1 << 10 // F070 +# endif +# if FEATURE_f071 + | 1 << 9 // F071 +# endif +# if FEATURE_f072 + | 1 << 8 // F072 +# endif +# if FEATURE_f073 + | 1 << 7 // F073 +# endif +# if FEATURE_f074 + | 1 << 6 // F074 +# endif +# if FEATURE_f075 + | 1 << 5 // F075 +# endif +# if FEATURE_f076 + | 1 << 4 // F076 +# endif +# if FEATURE_f077 + | 1 << 3 // F077 +# endif +# if FEATURE_f078 + | 1 << 2 // F078 +# endif +# if FEATURE_f079 + | 1 << 1 // F079 +# endif +# if FEATURE_f080 + | 1 << 0 // F080 +# endif + , 0u // n=81 : m=0 +# if FEATURE_f081 + | 1 << 15 // F081 +# endif +# if FEATURE_f082 + | 1 << 14 // F082 +# endif +# if FEATURE_f083 + | 1 << 13 // F083 +# endif +# if FEATURE_f084 + | 1 << 12 // F084 +# endif +# if FEATURE_f085 + | 1 << 11 // F085 +# endif +# if FEATURE_f086 + | 1 << 10 // F086 +# endif +# if FEATURE_f087 + | 1 << 9 // F087 +# endif +# if FEATURE_f088 + | 1 << 8 // F088 +# endif +# if FEATURE_f089 + | 1 << 7 // F089 +# endif +# if FEATURE_f090 + | 1 << 6 // F090 +# endif +# if FEATURE_f091 + | 1 << 5 // F091 +# endif +# if FEATURE_f092 + | 1 << 4 // F092 +# endif +# if FEATURE_f093 + | 1 << 3 // F093 +# endif +# if FEATURE_f094 + | 1 << 2 // F094 +# endif +# if FEATURE_f095 + | 1 << 1 // F095 +# endif +# if FEATURE_f096 + | 1 << 0 // F096 +# endif + , 0u // n=97 : m=0 +# if FEATURE_f097 + | 1 << 15 // F097 +# endif +# if FEATURE_f098 + | 1 << 14 // F098 +# endif +# if FEATURE_f099 + | 1 << 13 // F099 +# endif +# if FEATURE_f100 + | 1 << 12 // F100 +# endif +# if FEATURE_f101 + | 1 << 11 // F101 +# endif +# if FEATURE_f102 + | 1 << 10 // F102 +# endif +# if FEATURE_f103 + | 1 << 9 // F103 +# endif +# if FEATURE_f104 + | 1 << 8 // F104 +# endif +# if FEATURE_f105 + | 1 << 7 // F105 +# endif +# if FEATURE_f106 + | 1 << 6 // F106 +# endif +# if FEATURE_f107 + | 1 << 5 // F107 +# endif +# if FEATURE_f108 + | 1 << 4 // F108 +# endif +# if FEATURE_f109 + | 1 << 3 // F109 +# endif +# if FEATURE_f110 + | 1 << 2 // F110 +# endif +# if FEATURE_f111 + | 1 << 1 // F111 +# endif +# if FEATURE_f112 + | 1 << 0 // F112 +# endif + , 0u // n=113 : m=0 +# if FEATURE_f113 + | 1 << 15 // F113 +# endif +# if FEATURE_f114 + | 1 << 14 // F114 +# endif +# if FEATURE_f115 + | 1 << 13 // F115 +# endif +# if FEATURE_f116 + | 1 << 12 // F116 +# endif +# if FEATURE_f117 + | 1 << 11 // F117 +# endif +# if FEATURE_f118 + | 1 << 10 // F118 +# endif +# if FEATURE_f119 + | 1 << 9 // F119 +# endif +# if FEATURE_f120 + | 1 << 8 // F120 +# endif +# if FEATURE_f121 + | 1 << 7 // F121 +# endif +# if FEATURE_f122 + | 1 << 6 // F122 +# endif +# if FEATURE_f123 + | 1 << 5 // F123 +# endif +# if FEATURE_f124 + | 1 << 4 // F124 +# endif +# if FEATURE_f125 + | 1 << 3 // F125 +# endif +# if FEATURE_f126 + | 1 << 2 // F126 +# endif +# if FEATURE_f127 + | 1 << 1 // F127 +# endif +# if FEATURE_f128 + | 1 << 0 // F128 +# endif + , 0u // n=129 : m=0 +# if FEATURE_f129 + | 1 << 15 // F129 +# endif +# if FEATURE_f130 + | 1 << 14 // F130 +# endif +# if FEATURE_f131 + | 1 << 13 // F131 +# endif +# if FEATURE_f132 + | 1 << 12 // F132 +# endif +# if FEATURE_f133 + | 1 << 11 // F133 +# endif +# if FEATURE_f134 + | 1 << 10 // F134 +# endif +# if FEATURE_f135 + | 1 << 9 // F135 +# endif +# if FEATURE_f136 + | 1 << 8 // F136 +# endif +# if FEATURE_f137 + | 1 << 7 // F137 +# endif +# if FEATURE_f138 + | 1 << 6 // F138 +# endif +# if FEATURE_f139 + | 1 << 5 // F139 +# endif +# if FEATURE_f140 + | 1 << 4 // F140 +# endif +# if FEATURE_f141 + | 1 << 3 // F141 +# endif +# if FEATURE_f142 + | 1 << 2 // F142 +# endif +# if FEATURE_f143 + | 1 << 1 // F143 +# endif +# if FEATURE_f144 + | 1 << 0 // F144 +# endif + , 0u // n=145 : m=0 +# if FEATURE_f145 + | 1 << 15 // F145 +# endif +# if FEATURE_f146 + | 1 << 14 // F146 +# endif +# if FEATURE_f147 + | 1 << 13 // F147 +# endif +# if FEATURE_f148 + | 1 << 12 // F148 +# endif +# if FEATURE_f149 + | 1 << 11 // F149 +# endif +# if FEATURE_f150 + | 1 << 10 // F150 +# endif +# if FEATURE_f151 + | 1 << 9 // F151 +# endif +# if FEATURE_f152 + | 1 << 8 // F152 +# endif +# if FEATURE_f153 + | 1 << 7 // F153 +# endif +# if FEATURE_f154 + | 1 << 6 // F154 +# endif +# if FEATURE_f155 + | 1 << 5 // F155 +# endif +# if FEATURE_f156 + | 1 << 4 // F156 +# endif +# if FEATURE_f157 + | 1 << 3 // F157 +# endif +# if FEATURE_f158 + | 1 << 2 // F158 +# endif +# if FEATURE_f159 + | 1 << 1 // F159 +# endif +# if FEATURE_f160 + | 1 << 0 // F160 +# endif + , 0u // n=161 : m=0 +# if FEATURE_f161 + | 1 << 15 // F161 +# endif +# if FEATURE_f162 + | 1 << 14 // F162 +# endif +# if FEATURE_f163 + | 1 << 13 // F163 +# endif +# if FEATURE_f164 + | 1 << 12 // F164 +# endif +# if FEATURE_f165 + | 1 << 11 // F165 +# endif +# if FEATURE_f166 + | 1 << 10 // F166 +# endif +# if FEATURE_f167 + | 1 << 9 // F167 +# endif +# if FEATURE_f168 + | 1 << 8 // F168 +# endif +# if FEATURE_f169 + | 1 << 7 // F169 +# endif +# if FEATURE_f170 + | 1 << 6 // F170 +# endif +# if FEATURE_f171 + | 1 << 5 // F171 +# endif +# if FEATURE_f172 + | 1 << 4 // F172 +# endif +# if FEATURE_f173 + | 1 << 3 // F173 +# endif +# if FEATURE_f174 + | 1 << 2 // F174 +# endif +# if FEATURE_f175 + | 1 << 1 // F175 +# endif +# if FEATURE_f176 + | 1 << 0 // F176 +# endif + , 0u // n=177 : m=0 +# if FEATURE_f177 + | 1 << 15 // F177 +# endif +# if FEATURE_f178 + | 1 << 14 // F178 +# endif +# if FEATURE_f179 + | 1 << 13 // F179 +# endif +# if FEATURE_f180 + | 1 << 12 // F180 +# endif +# if FEATURE_f181 + | 1 << 11 // F181 +# endif +# if FEATURE_f182 + | 1 << 10 // F182 +# endif +# if FEATURE_f183 + | 1 << 9 // F183 +# endif +# if FEATURE_f184 + | 1 << 8 // F184 +# endif +# if FEATURE_f185 + | 1 << 7 // F185 +# endif +# if FEATURE_f186 + | 1 << 6 // F186 +# endif +# if FEATURE_f187 + | 1 << 5 // F187 +# endif +# if FEATURE_f188 + | 1 << 4 // F188 +# endif +# if FEATURE_f189 + | 1 << 3 // F189 +# endif +# if FEATURE_f190 + | 1 << 2 // F190 +# endif +# if FEATURE_f191 + | 1 << 1 // F191 +# endif +# if FEATURE_f192 + | 1 << 0 // F192 +# endif + , 0u // n=193 : m=0 +# if FEATURE_f193 + | 1 << 15 // F193 +# endif +# if FEATURE_f194 + | 1 << 14 // F194 +# endif +# if FEATURE_f195 + | 1 << 13 // F195 +# endif +# if FEATURE_f196 + | 1 << 12 // F196 +# endif +# if FEATURE_f197 + | 1 << 11 // F197 +# endif +# if FEATURE_f198 + | 1 << 10 // F198 +# endif +# if FEATURE_f199 + | 1 << 9 // F199 +# endif +# if FEATURE_f200 + | 1 << 8 // F200 +# endif +# if FEATURE_f201 + | 1 << 7 // F201 +# endif +# if FEATURE_f202 + | 1 << 6 // F202 +# endif +# if FEATURE_f203 + | 1 << 5 // F203 +# endif +# if FEATURE_f204 + | 1 << 4 // F204 +# endif +# if FEATURE_f205 + | 1 << 3 // F205 +# endif +# if FEATURE_f206 + | 1 << 2 // F206 +# endif +# if FEATURE_f207 + | 1 << 1 // F207 +# endif +# if FEATURE_f208 + | 1 << 0 // F208 +# endif + , 0u // n=209 : m=0 +# if FEATURE_f209 + | 1 << 15 // F209 +# endif +# if FEATURE_f210 + | 1 << 14 // F210 +# endif +# if FEATURE_f211 + | 1 << 13 // F211 +# endif +# if FEATURE_f212 + | 1 << 12 // F212 +# endif +# if FEATURE_f213 + | 1 << 11 // F213 +# endif +# if FEATURE_f214 + | 1 << 10 // F214 +# endif +# if FEATURE_f215 + | 1 << 9 // F215 +# endif +# if FEATURE_f216 + | 1 << 8 // F216 +# endif +# if FEATURE_f217 + | 1 << 7 // F217 +# endif +# if FEATURE_f218 + | 1 << 6 // F218 +# endif +# if FEATURE_f219 + | 1 << 5 // F219 +# endif +# if FEATURE_f220 + | 1 << 4 // F220 +# endif +# if FEATURE_f221 + | 1 << 3 // F221 +# endif +# if FEATURE_f222 + | 1 << 2 // F222 +# endif +# if FEATURE_f223 + | 1 << 1 // F223 +# endif +# if FEATURE_f224 + | 1 << 0 // F224 +# endif + , 0u // n=225 : m=0 +# if FEATURE_f225 + | 1 << 15 // F225 +# endif +# if FEATURE_f226 + | 1 << 14 // F226 +# endif +# if FEATURE_f227 + | 1 << 13 // F227 +# endif +# if FEATURE_f228 + | 1 << 12 // F228 +# endif +# if FEATURE_f229 + | 1 << 11 // F229 +# endif +# if FEATURE_f230 + | 1 << 10 // F230 +# endif +# if FEATURE_f231 + | 1 << 9 // F231 +# endif +# if FEATURE_f232 + | 1 << 8 // F232 +# endif +# if FEATURE_f233 + | 1 << 7 // F233 +# endif +# if FEATURE_f234 + | 1 << 6 // F234 +# endif +# if FEATURE_f235 + | 1 << 5 // F235 +# endif +# if FEATURE_f236 + | 1 << 4 // F236 +# endif +# if FEATURE_f237 + | 1 << 3 // F237 +# endif +# if FEATURE_f238 + | 1 << 2 // F238 +# endif +# if FEATURE_f239 + | 1 << 1 // F239 +# endif +# if FEATURE_f240 + | 1 << 0 // F240 +# endif + , 0u // n=241 : m=0 +# if FEATURE_f241 + | 1 << 15 // F241 +# endif +# if FEATURE_f242 + | 1 << 14 // F242 +# endif +# if FEATURE_f243 + | 1 << 13 // F243 +# endif +# if FEATURE_f244 + | 1 << 12 // F244 +# endif +# if FEATURE_f245 + | 1 << 11 // F245 +# endif +# if FEATURE_f246 + | 1 << 10 // F246 +# endif +# if FEATURE_f247 + | 1 << 9 // F247 +# endif +# if FEATURE_f248 + | 1 << 8 // F248 +# endif +# if FEATURE_f249 + | 1 << 7 // F249 +# endif +# if FEATURE_f250 + | 1 << 6 // F250 +# endif +# if FEATURE_f251 + | 1 << 5 // F251 +# endif +# if FEATURE_f252 + | 1 << 4 // F252 +# endif +# if FEATURE_f253 + | 1 << 3 // F253 +# endif +# if FEATURE_f254 + | 1 << 2 // F254 +# endif +# if FEATURE_f255 + | 1 << 1 // F255 +# endif +}; + +#endif // if FEATURE_BUILD_DESCRIPTION diff --git a/src/src/Helpers/_Feature_init.h b/src/src/Helpers/_Feature_init.h new file mode 100644 index 0000000000..c75b79fbfb --- /dev/null +++ b/src/src/Helpers/_Feature_init.h @@ -0,0 +1,10 @@ +#pragma once + +#include "../../ESPEasy_common.h" + +#if FEATURE_BUILD_DESCRIPTION +# include "../DataTypes/ESPEasy_plugin_functions.h" + +extern const uint16_t featuresBitmap[]; + +#endif // if FEATURE_BUILD_DESCRIPTION diff --git a/src/src/Helpers/_NPlugin_init.cpp b/src/src/Helpers/_NPlugin_init.cpp index ef4162079c..5bec49a4b5 100644 --- a/src/src/Helpers/_NPlugin_init.cpp +++ b/src/src/Helpers/_NPlugin_init.cpp @@ -23,6 +23,793 @@ // Uncrustify must not be used on macros, but we're now done, so turn Uncrustify on again. // *INDENT-ON* + +#if FEATURE_BUILD_DESCRIPTION +const uint16_t notifierBitmaps[] = { + 0u // n=1 : m=0 +#ifdef USES_N001 + | 1 << 15 +#endif +#ifdef USES_N002 + | 1 << 14 +#endif +#ifdef USES_N003 + | 1 << 13 +#endif +#ifdef USES_N004 + | 1 << 12 +#endif +#ifdef USES_N005 + | 1 << 11 +#endif +#ifdef USES_N006 + | 1 << 10 +#endif +#ifdef USES_N007 + | 1 << 9 +#endif +#ifdef USES_N008 + | 1 << 8 +#endif +#ifdef USES_N009 + | 1 << 7 +#endif +#ifdef USES_N010 + | 1 << 6 +#endif +#ifdef USES_N011 + | 1 << 5 +#endif +#ifdef USES_N012 + | 1 << 4 +#endif +#ifdef USES_N013 + | 1 << 3 +#endif +#ifdef USES_N014 + | 1 << 2 +#endif +#ifdef USES_N015 + | 1 << 1 +#endif +#ifdef USES_N016 + | 1 << 0 +#endif +, 0u // n=17 : m=0 +#ifdef USES_N017 + | 1 << 15 +#endif +#ifdef USES_N018 + | 1 << 14 +#endif +#ifdef USES_N019 + | 1 << 13 +#endif +#ifdef USES_N020 + | 1 << 12 +#endif +#ifdef USES_N021 + | 1 << 11 +#endif +#ifdef USES_N022 + | 1 << 10 +#endif +#ifdef USES_N023 + | 1 << 9 +#endif +#ifdef USES_N024 + | 1 << 8 +#endif +#ifdef USES_N025 + | 1 << 7 +#endif +#ifdef USES_N026 + | 1 << 6 +#endif +#ifdef USES_N027 + | 1 << 5 +#endif +#ifdef USES_N028 + | 1 << 4 +#endif +#ifdef USES_N029 + | 1 << 3 +#endif +#ifdef USES_N030 + | 1 << 2 +#endif +#ifdef USES_N031 + | 1 << 1 +#endif +#ifdef USES_N032 + | 1 << 0 +#endif +, 0u // n=33 : m=0 +#ifdef USES_N033 + | 1 << 15 +#endif +#ifdef USES_N034 + | 1 << 14 +#endif +#ifdef USES_N035 + | 1 << 13 +#endif +#ifdef USES_N036 + | 1 << 12 +#endif +#ifdef USES_N037 + | 1 << 11 +#endif +#ifdef USES_N038 + | 1 << 10 +#endif +#ifdef USES_N039 + | 1 << 9 +#endif +#ifdef USES_N040 + | 1 << 8 +#endif +#ifdef USES_N041 + | 1 << 7 +#endif +#ifdef USES_N042 + | 1 << 6 +#endif +#ifdef USES_N043 + | 1 << 5 +#endif +#ifdef USES_N044 + | 1 << 4 +#endif +#ifdef USES_N045 + | 1 << 3 +#endif +#ifdef USES_N046 + | 1 << 2 +#endif +#ifdef USES_N047 + | 1 << 1 +#endif +#ifdef USES_N048 + | 1 << 0 +#endif +, 0u // n=49 : m=0 +#ifdef USES_N049 + | 1 << 15 +#endif +#ifdef USES_N050 + | 1 << 14 +#endif +#ifdef USES_N051 + | 1 << 13 +#endif +#ifdef USES_N052 + | 1 << 12 +#endif +#ifdef USES_N053 + | 1 << 11 +#endif +#ifdef USES_N054 + | 1 << 10 +#endif +#ifdef USES_N055 + | 1 << 9 +#endif +#ifdef USES_N056 + | 1 << 8 +#endif +#ifdef USES_N057 + | 1 << 7 +#endif +#ifdef USES_N058 + | 1 << 6 +#endif +#ifdef USES_N059 + | 1 << 5 +#endif +#ifdef USES_N060 + | 1 << 4 +#endif +#ifdef USES_N061 + | 1 << 3 +#endif +#ifdef USES_N062 + | 1 << 2 +#endif +#ifdef USES_N063 + | 1 << 1 +#endif +#ifdef USES_N064 + | 1 << 0 +#endif +, 0u // n=65 : m=0 +#ifdef USES_N065 + | 1 << 15 +#endif +#ifdef USES_N066 + | 1 << 14 +#endif +#ifdef USES_N067 + | 1 << 13 +#endif +#ifdef USES_N068 + | 1 << 12 +#endif +#ifdef USES_N069 + | 1 << 11 +#endif +#ifdef USES_N070 + | 1 << 10 +#endif +#ifdef USES_N071 + | 1 << 9 +#endif +#ifdef USES_N072 + | 1 << 8 +#endif +#ifdef USES_N073 + | 1 << 7 +#endif +#ifdef USES_N074 + | 1 << 6 +#endif +#ifdef USES_N075 + | 1 << 5 +#endif +#ifdef USES_N076 + | 1 << 4 +#endif +#ifdef USES_N077 + | 1 << 3 +#endif +#ifdef USES_N078 + | 1 << 2 +#endif +#ifdef USES_N079 + | 1 << 1 +#endif +#ifdef USES_N080 + | 1 << 0 +#endif +, 0u // n=81 : m=0 +#ifdef USES_N081 + | 1 << 15 +#endif +#ifdef USES_N082 + | 1 << 14 +#endif +#ifdef USES_N083 + | 1 << 13 +#endif +#ifdef USES_N084 + | 1 << 12 +#endif +#ifdef USES_N085 + | 1 << 11 +#endif +#ifdef USES_N086 + | 1 << 10 +#endif +#ifdef USES_N087 + | 1 << 9 +#endif +#ifdef USES_N088 + | 1 << 8 +#endif +#ifdef USES_N089 + | 1 << 7 +#endif +#ifdef USES_N090 + | 1 << 6 +#endif +#ifdef USES_N091 + | 1 << 5 +#endif +#ifdef USES_N092 + | 1 << 4 +#endif +#ifdef USES_N093 + | 1 << 3 +#endif +#ifdef USES_N094 + | 1 << 2 +#endif +#ifdef USES_N095 + | 1 << 1 +#endif +#ifdef USES_N096 + | 1 << 0 +#endif +, 0u // n=97 : m=0 +#ifdef USES_N097 + | 1 << 15 +#endif +#ifdef USES_N098 + | 1 << 14 +#endif +#ifdef USES_N099 + | 1 << 13 +#endif +#ifdef USES_N100 + | 1 << 12 +#endif +#ifdef USES_N101 + | 1 << 11 +#endif +#ifdef USES_N102 + | 1 << 10 +#endif +#ifdef USES_N103 + | 1 << 9 +#endif +#ifdef USES_N104 + | 1 << 8 +#endif +#ifdef USES_N105 + | 1 << 7 +#endif +#ifdef USES_N106 + | 1 << 6 +#endif +#ifdef USES_N107 + | 1 << 5 +#endif +#ifdef USES_N108 + | 1 << 4 +#endif +#ifdef USES_N109 + | 1 << 3 +#endif +#ifdef USES_N110 + | 1 << 2 +#endif +#ifdef USES_N111 + | 1 << 1 +#endif +#ifdef USES_N112 + | 1 << 0 +#endif +, 0u // n=113 : m=0 +#ifdef USES_N113 + | 1 << 15 +#endif +#ifdef USES_N114 + | 1 << 14 +#endif +#ifdef USES_N115 + | 1 << 13 +#endif +#ifdef USES_N116 + | 1 << 12 +#endif +#ifdef USES_N117 + | 1 << 11 +#endif +#ifdef USES_N118 + | 1 << 10 +#endif +#ifdef USES_N119 + | 1 << 9 +#endif +#ifdef USES_N120 + | 1 << 8 +#endif +#ifdef USES_N121 + | 1 << 7 +#endif +#ifdef USES_N122 + | 1 << 6 +#endif +#ifdef USES_N123 + | 1 << 5 +#endif +#ifdef USES_N124 + | 1 << 4 +#endif +#ifdef USES_N125 + | 1 << 3 +#endif +#ifdef USES_N126 + | 1 << 2 +#endif +#ifdef USES_N127 + | 1 << 1 +#endif +#ifdef USES_N128 + | 1 << 0 +#endif +, 0u // n=129 : m=0 +#ifdef USES_N129 + | 1 << 15 +#endif +#ifdef USES_N130 + | 1 << 14 +#endif +#ifdef USES_N131 + | 1 << 13 +#endif +#ifdef USES_N132 + | 1 << 12 +#endif +#ifdef USES_N133 + | 1 << 11 +#endif +#ifdef USES_N134 + | 1 << 10 +#endif +#ifdef USES_N135 + | 1 << 9 +#endif +#ifdef USES_N136 + | 1 << 8 +#endif +#ifdef USES_N137 + | 1 << 7 +#endif +#ifdef USES_N138 + | 1 << 6 +#endif +#ifdef USES_N139 + | 1 << 5 +#endif +#ifdef USES_N140 + | 1 << 4 +#endif +#ifdef USES_N141 + | 1 << 3 +#endif +#ifdef USES_N142 + | 1 << 2 +#endif +#ifdef USES_N143 + | 1 << 1 +#endif +#ifdef USES_N144 + | 1 << 0 +#endif +, 0u // n=145 : m=0 +#ifdef USES_N145 + | 1 << 15 +#endif +#ifdef USES_N146 + | 1 << 14 +#endif +#ifdef USES_N147 + | 1 << 13 +#endif +#ifdef USES_N148 + | 1 << 12 +#endif +#ifdef USES_N149 + | 1 << 11 +#endif +#ifdef USES_N150 + | 1 << 10 +#endif +#ifdef USES_N151 + | 1 << 9 +#endif +#ifdef USES_N152 + | 1 << 8 +#endif +#ifdef USES_N153 + | 1 << 7 +#endif +#ifdef USES_N154 + | 1 << 6 +#endif +#ifdef USES_N155 + | 1 << 5 +#endif +#ifdef USES_N156 + | 1 << 4 +#endif +#ifdef USES_N157 + | 1 << 3 +#endif +#ifdef USES_N158 + | 1 << 2 +#endif +#ifdef USES_N159 + | 1 << 1 +#endif +#ifdef USES_N160 + | 1 << 0 +#endif +, 0u // n=161 : m=0 +#ifdef USES_N161 + | 1 << 15 +#endif +#ifdef USES_N162 + | 1 << 14 +#endif +#ifdef USES_N163 + | 1 << 13 +#endif +#ifdef USES_N164 + | 1 << 12 +#endif +#ifdef USES_N165 + | 1 << 11 +#endif +#ifdef USES_N166 + | 1 << 10 +#endif +#ifdef USES_N167 + | 1 << 9 +#endif +#ifdef USES_N168 + | 1 << 8 +#endif +#ifdef USES_N169 + | 1 << 7 +#endif +#ifdef USES_N170 + | 1 << 6 +#endif +#ifdef USES_N171 + | 1 << 5 +#endif +#ifdef USES_N172 + | 1 << 4 +#endif +#ifdef USES_N173 + | 1 << 3 +#endif +#ifdef USES_N174 + | 1 << 2 +#endif +#ifdef USES_N175 + | 1 << 1 +#endif +#ifdef USES_N176 + | 1 << 0 +#endif +, 0u // n=177 : m=0 +#ifdef USES_N177 + | 1 << 15 +#endif +#ifdef USES_N178 + | 1 << 14 +#endif +#ifdef USES_N179 + | 1 << 13 +#endif +#ifdef USES_N180 + | 1 << 12 +#endif +#ifdef USES_N181 + | 1 << 11 +#endif +#ifdef USES_N182 + | 1 << 10 +#endif +#ifdef USES_N183 + | 1 << 9 +#endif +#ifdef USES_N184 + | 1 << 8 +#endif +#ifdef USES_N185 + | 1 << 7 +#endif +#ifdef USES_N186 + | 1 << 6 +#endif +#ifdef USES_N187 + | 1 << 5 +#endif +#ifdef USES_N188 + | 1 << 4 +#endif +#ifdef USES_N189 + | 1 << 3 +#endif +#ifdef USES_N190 + | 1 << 2 +#endif +#ifdef USES_N191 + | 1 << 1 +#endif +#ifdef USES_N192 + | 1 << 0 +#endif +, 0u // n=193 : m=0 +#ifdef USES_N193 + | 1 << 15 +#endif +#ifdef USES_N194 + | 1 << 14 +#endif +#ifdef USES_N195 + | 1 << 13 +#endif +#ifdef USES_N196 + | 1 << 12 +#endif +#ifdef USES_N197 + | 1 << 11 +#endif +#ifdef USES_N198 + | 1 << 10 +#endif +#ifdef USES_N199 + | 1 << 9 +#endif +#ifdef USES_N200 + | 1 << 8 +#endif +#ifdef USES_N201 + | 1 << 7 +#endif +#ifdef USES_N202 + | 1 << 6 +#endif +#ifdef USES_N203 + | 1 << 5 +#endif +#ifdef USES_N204 + | 1 << 4 +#endif +#ifdef USES_N205 + | 1 << 3 +#endif +#ifdef USES_N206 + | 1 << 2 +#endif +#ifdef USES_N207 + | 1 << 1 +#endif +#ifdef USES_N208 + | 1 << 0 +#endif +, 0u // n=209 : m=0 +#ifdef USES_N209 + | 1 << 15 +#endif +#ifdef USES_N210 + | 1 << 14 +#endif +#ifdef USES_N211 + | 1 << 13 +#endif +#ifdef USES_N212 + | 1 << 12 +#endif +#ifdef USES_N213 + | 1 << 11 +#endif +#ifdef USES_N214 + | 1 << 10 +#endif +#ifdef USES_N215 + | 1 << 9 +#endif +#ifdef USES_N216 + | 1 << 8 +#endif +#ifdef USES_N217 + | 1 << 7 +#endif +#ifdef USES_N218 + | 1 << 6 +#endif +#ifdef USES_N219 + | 1 << 5 +#endif +#ifdef USES_N220 + | 1 << 4 +#endif +#ifdef USES_N221 + | 1 << 3 +#endif +#ifdef USES_N222 + | 1 << 2 +#endif +#ifdef USES_N223 + | 1 << 1 +#endif +#ifdef USES_N224 + | 1 << 0 +#endif +, 0u // n=225 : m=0 +#ifdef USES_N225 + | 1 << 15 +#endif +#ifdef USES_N226 + | 1 << 14 +#endif +#ifdef USES_N227 + | 1 << 13 +#endif +#ifdef USES_N228 + | 1 << 12 +#endif +#ifdef USES_N229 + | 1 << 11 +#endif +#ifdef USES_N230 + | 1 << 10 +#endif +#ifdef USES_N231 + | 1 << 9 +#endif +#ifdef USES_N232 + | 1 << 8 +#endif +#ifdef USES_N233 + | 1 << 7 +#endif +#ifdef USES_N234 + | 1 << 6 +#endif +#ifdef USES_N235 + | 1 << 5 +#endif +#ifdef USES_N236 + | 1 << 4 +#endif +#ifdef USES_N237 + | 1 << 3 +#endif +#ifdef USES_N238 + | 1 << 2 +#endif +#ifdef USES_N239 + | 1 << 1 +#endif +#ifdef USES_N240 + | 1 << 0 +#endif +, 0u // n=241 : m=0 +#ifdef USES_N241 + | 1 << 15 +#endif +#ifdef USES_N242 + | 1 << 14 +#endif +#ifdef USES_N243 + | 1 << 13 +#endif +#ifdef USES_N244 + | 1 << 12 +#endif +#ifdef USES_N245 + | 1 << 11 +#endif +#ifdef USES_N246 + | 1 << 10 +#endif +#ifdef USES_N247 + | 1 << 9 +#endif +#ifdef USES_N248 + | 1 << 8 +#endif +#ifdef USES_N249 + | 1 << 7 +#endif +#ifdef USES_N250 + | 1 << 6 +#endif +#ifdef USES_N251 + | 1 << 5 +#endif +#ifdef USES_N252 + | 1 << 4 +#endif +#ifdef USES_N253 + | 1 << 3 +#endif +#ifdef USES_N254 + | 1 << 2 +#endif +#ifdef USES_N255 + | 1 << 1 +#endif +}; +#endif // if FEATURE_BUILD_DESCRIPTION + void NPluginInit() { #ifdef USE_SECOND_HEAP diff --git a/src/src/Helpers/_NPlugin_init.h b/src/src/Helpers/_NPlugin_init.h index 12fbf442cc..e084a2b738 100644 --- a/src/src/Helpers/_NPlugin_init.h +++ b/src/src/Helpers/_NPlugin_init.h @@ -7,6 +7,9 @@ #include "../DataTypes/ESPEasy_plugin_functions.h" +#if FEATURE_BUILD_DESCRIPTION +extern const uint16_t notifierBitmaps[]; +#endif // if FEATURE_BUILD_DESCRIPTION struct EventStruct; diff --git a/src/src/Helpers/_Plugin_init.cpp b/src/src/Helpers/_Plugin_init.cpp index 8c4c3cf4b5..8de9fa781b 100644 --- a/src/src/Helpers/_Plugin_init.cpp +++ b/src/src/Helpers/_Plugin_init.cpp @@ -15,6 +15,1032 @@ // ******************************************************************************** +#if FEATURE_BUILD_DESCRIPTION +const uint16_t pluginsBitmap[] = { + 0u // n=1 : m=0 +#ifdef USES_P001 + | 1 << 15 +#endif // ifdef USES_P001 + +#ifdef USES_P002 + | 1 << 14 +#endif // ifdef USES_P002 + +#ifdef USES_P003 + | 1 << 13 +#endif // ifdef USES_P003 + +#ifdef USES_P004 + | 1 << 12 +#endif // ifdef USES_P004 + +#ifdef USES_P005 + | 1 << 11 +#endif // ifdef USES_P005 + +#ifdef USES_P006 + | 1 << 10 +#endif // ifdef USES_P006 + +#ifdef USES_P007 + | 1 << 9 +#endif // ifdef USES_P007 + +#ifdef USES_P008 + | 1 << 8 +#endif // ifdef USES_P008 + +#ifdef USES_P009 + | 1 << 7 +#endif // ifdef USES_P009 + +#ifdef USES_P010 + | 1 << 6 +#endif // ifdef USES_P010 + +#ifdef USES_P011 + | 1 << 5 +#endif // ifdef USES_P011 + +#ifdef USES_P012 + | 1 << 4 +#endif // ifdef USES_P012 + +#ifdef USES_P013 + | 1 << 3 +#endif // ifdef USES_P013 + +#ifdef USES_P014 + | 1 << 2 +#endif // ifdef USES_P014 + +#ifdef USES_P015 + | 1 << 1 +#endif // ifdef USES_P015 + +#ifdef USES_P016 + | 1 << 0 +#endif // ifdef USES_P016 + , 0u // n=17 : m=0 +#ifdef USES_P017 + | 1 << 15 +#endif // ifdef USES_P017 + +#ifdef USES_P018 + | 1 << 14 +#endif // ifdef USES_P018 + +#ifdef USES_P019 + | 1 << 13 +#endif // ifdef USES_P019 + +#ifdef USES_P020 + | 1 << 12 +#endif // ifdef USES_P020 + +#ifdef USES_P021 + | 1 << 11 +#endif // ifdef USES_P021 + +#ifdef USES_P022 + | 1 << 10 +#endif // ifdef USES_P022 + +#ifdef USES_P023 + | 1 << 9 +#endif // ifdef USES_P023 + +#ifdef USES_P024 + | 1 << 8 +#endif // ifdef USES_P024 + +#ifdef USES_P025 + | 1 << 7 +#endif // ifdef USES_P025 + +#ifdef USES_P026 + | 1 << 6 +#endif // ifdef USES_P026 + +#ifdef USES_P027 + | 1 << 5 +#endif // ifdef USES_P027 + +#ifdef USES_P028 + | 1 << 4 +#endif // ifdef USES_P028 + +#ifdef USES_P029 + | 1 << 3 +#endif // ifdef USES_P029 + +#ifdef USES_P030 + | 1 << 2 +#endif // ifdef USES_P030 + +#ifdef USES_P031 + | 1 << 1 +#endif // ifdef USES_P031 + +#ifdef USES_P032 + | 1 << 0 +#endif // ifdef USES_P032 + , 0u // n=33 : m=0 +#ifdef USES_P033 + | 1 << 15 +#endif // ifdef USES_P033 + +#ifdef USES_P034 + | 1 << 14 +#endif // ifdef USES_P034 + +#ifdef USES_P035 + | 1 << 13 +#endif // ifdef USES_P035 + +#ifdef USES_P036 + | 1 << 12 +#endif // ifdef USES_P036 + +#ifdef USES_P037 + | 1 << 11 +#endif // ifdef USES_P037 + +#ifdef USES_P038 + | 1 << 10 +#endif // ifdef USES_P038 + +#ifdef USES_P039 + | 1 << 9 +#endif // ifdef USES_P039 + +#ifdef USES_P040 + | 1 << 8 +#endif // ifdef USES_P040 + +#ifdef USES_P041 + | 1 << 7 +#endif // ifdef USES_P041 + +#ifdef USES_P042 + | 1 << 6 +#endif // ifdef USES_P042 + +#ifdef USES_P043 + | 1 << 5 +#endif // ifdef USES_P043 + +#ifdef USES_P044 + | 1 << 4 +#endif // ifdef USES_P044 + +#ifdef USES_P045 + | 1 << 3 +#endif // ifdef USES_P045 + +#ifdef USES_P046 + | 1 << 2 +#endif // ifdef USES_P046 + +#ifdef USES_P047 + | 1 << 1 +#endif // ifdef USES_P047 + +#ifdef USES_P048 + | 1 << 0 +#endif // ifdef USES_P048 + , 0u // n=49 : m=0 +#ifdef USES_P049 + | 1 << 15 +#endif // ifdef USES_P049 + +#ifdef USES_P050 + | 1 << 14 +#endif // ifdef USES_P050 + +#ifdef USES_P051 + | 1 << 13 +#endif // ifdef USES_P051 + +#ifdef USES_P052 + | 1 << 12 +#endif // ifdef USES_P052 + +#ifdef USES_P053 + | 1 << 11 +#endif // ifdef USES_P053 + +#ifdef USES_P054 + | 1 << 10 +#endif // ifdef USES_P054 + +#ifdef USES_P055 + | 1 << 9 +#endif // ifdef USES_P055 + +#ifdef USES_P056 + | 1 << 8 +#endif // ifdef USES_P056 + +#ifdef USES_P057 + | 1 << 7 +#endif // ifdef USES_P057 + +#ifdef USES_P058 + | 1 << 6 +#endif // ifdef USES_P058 + +#ifdef USES_P059 + | 1 << 5 +#endif // ifdef USES_P059 + +#ifdef USES_P060 + | 1 << 4 +#endif // ifdef USES_P060 + +#ifdef USES_P061 + | 1 << 3 +#endif // ifdef USES_P061 + +#ifdef USES_P062 + | 1 << 2 +#endif // ifdef USES_P062 + +#ifdef USES_P063 + | 1 << 1 +#endif // ifdef USES_P063 + +#ifdef USES_P064 + | 1 << 0 +#endif // ifdef USES_P064 + , 0u // n=65 : m=0 +#ifdef USES_P065 + | 1 << 15 +#endif // ifdef USES_P065 + +#ifdef USES_P066 + | 1 << 14 +#endif // ifdef USES_P066 + +#ifdef USES_P067 + | 1 << 13 +#endif // ifdef USES_P067 + +#ifdef USES_P068 + | 1 << 12 +#endif // ifdef USES_P068 + +#ifdef USES_P069 + | 1 << 11 +#endif // ifdef USES_P069 + +#ifdef USES_P070 + | 1 << 10 +#endif // ifdef USES_P070 + +#ifdef USES_P071 + | 1 << 9 +#endif // ifdef USES_P071 + +#ifdef USES_P072 + | 1 << 8 +#endif // ifdef USES_P072 + +#ifdef USES_P073 + | 1 << 7 +#endif // ifdef USES_P073 + +#ifdef USES_P074 + | 1 << 6 +#endif // ifdef USES_P074 + +#ifdef USES_P075 + | 1 << 5 +#endif // ifdef USES_P075 + +#ifdef USES_P076 + | 1 << 4 +#endif // ifdef USES_P076 + +#ifdef USES_P077 + | 1 << 3 +#endif // ifdef USES_P077 + +#ifdef USES_P078 + | 1 << 2 +#endif // ifdef USES_P078 + +#ifdef USES_P079 + | 1 << 1 +#endif // ifdef USES_P079 + +#ifdef USES_P080 + | 1 << 0 +#endif // ifdef USES_P080 + , 0u // n=81 : m=0 +#ifdef USES_P081 + | 1 << 15 +#endif // ifdef USES_P081 + +#ifdef USES_P082 + | 1 << 14 +#endif // ifdef USES_P082 + +#ifdef USES_P083 + | 1 << 13 +#endif // ifdef USES_P083 + +#ifdef USES_P084 + | 1 << 12 +#endif // ifdef USES_P084 + +#ifdef USES_P085 + | 1 << 11 +#endif // ifdef USES_P085 + +#ifdef USES_P086 + | 1 << 10 +#endif // ifdef USES_P086 + +#ifdef USES_P087 + | 1 << 9 +#endif // ifdef USES_P087 + +#ifdef USES_P088 + | 1 << 8 +#endif // ifdef USES_P088 + +#ifdef USES_P089 + | 1 << 7 +#endif // ifdef USES_P089 + +#ifdef USES_P090 + | 1 << 6 +#endif // ifdef USES_P090 + +#ifdef USES_P091 + | 1 << 5 +#endif // ifdef USES_P091 + +#ifdef USES_P092 + | 1 << 4 +#endif // ifdef USES_P092 + +#ifdef USES_P093 + | 1 << 3 +#endif // ifdef USES_P093 + +#ifdef USES_P094 + | 1 << 2 +#endif // ifdef USES_P094 + +#ifdef USES_P095 + | 1 << 1 +#endif // ifdef USES_P095 + +#ifdef USES_P096 + | 1 << 0 +#endif // ifdef USES_P096 + , 0u // n=97 : m=0 +#ifdef USES_P097 + // Touch (ESP32) + | 1 << 15 +#endif // ifdef USES_P097 + +#ifdef USES_P098 + | 1 << 14 +#endif // ifdef USES_P098 + +#ifdef USES_P099 + | 1 << 13 +#endif // ifdef USES_P099 + +#ifdef USES_P100 + | 1 << 12 +#endif // ifdef USES_P100 + +#ifdef USES_P101 + | 1 << 11 +#endif // ifdef USES_P101 + +#ifdef USES_P102 + | 1 << 10 +#endif // ifdef USES_P102 + +#ifdef USES_P103 + | 1 << 9 +#endif // ifdef USES_P103 + +#ifdef USES_P104 + | 1 << 8 +#endif // ifdef USES_P104 + +#ifdef USES_P105 + | 1 << 7 +#endif // ifdef USES_P105 + +#ifdef USES_P106 + | 1 << 6 +#endif // ifdef USES_P106 + +#ifdef USES_P107 + | 1 << 5 +#endif // ifdef USES_P107 + +#ifdef USES_P108 + | 1 << 4 +#endif // ifdef USES_P108 + +#ifdef USES_P109 + | 1 << 3 +#endif // ifdef USES_P109 + +#ifdef USES_P110 + | 1 << 2 +#endif // ifdef USES_P110 + +#ifdef USES_P111 + | 1 << 1 +#endif // ifdef USES_P111 + +#ifdef USES_P112 + | 1 << 0 +#endif // ifdef USES_P112 + , 0u // n=113 : m=0 +#ifdef USES_P113 + | 1 << 15 +#endif // ifdef USES_P113 + +#ifdef USES_P114 + | 1 << 14 +#endif // ifdef USES_P114 + +#ifdef USES_P115 + | 1 << 13 +#endif // ifdef USES_P115 + +#ifdef USES_P116 + | 1 << 12 +#endif // ifdef USES_P116 + +#ifdef USES_P117 + | 1 << 11 +#endif // ifdef USES_P117 + +#ifdef USES_P118 + | 1 << 10 +#endif // ifdef USES_P118 + +#ifdef USES_P119 + | 1 << 9 +#endif // ifdef USES_P119 + +#ifdef USES_P120 + | 1 << 8 +#endif // ifdef USES_P120 + +#ifdef USES_P121 + | 1 << 7 +#endif // ifdef USES_P121 + +#ifdef USES_P122 + | 1 << 6 +#endif // ifdef USES_P122 + +#ifdef USES_P123 + | 1 << 5 +#endif // ifdef USES_P123 + +#ifdef USES_P124 + | 1 << 4 +#endif // ifdef USES_P124 + +#ifdef USES_P125 + | 1 << 3 +#endif // ifdef USES_P125 + +#ifdef USES_P126 + | 1 << 2 +#endif // ifdef USES_P126 + +#ifdef USES_P127 + | 1 << 1 +#endif // ifdef USES_P127 + +#ifdef USES_P128 + | 1 << 0 +#endif // ifdef USES_P128 + , 0u // n=129 : m=0 +#ifdef USES_P129 + | 1 << 15 +#endif // ifdef USES_P129 + +#ifdef USES_P130 + | 1 << 14 +#endif // ifdef USES_P130 + +#ifdef USES_P131 + | 1 << 13 +#endif // ifdef USES_P131 + +#ifdef USES_P132 + | 1 << 12 +#endif // ifdef USES_P132 + +#ifdef USES_P133 + | 1 << 11 +#endif // ifdef USES_P133 + +#ifdef USES_P134 + | 1 << 10 +#endif // ifdef USES_P134 + +#ifdef USES_P135 + | 1 << 9 +#endif // ifdef USES_P135 + +#ifdef USES_P136 + | 1 << 8 +#endif // ifdef USES_P136 + +#ifdef USES_P137 + | 1 << 7 +#endif // ifdef USES_P137 + +#ifdef USES_P138 + | 1 << 6 +#endif // ifdef USES_P138 + +#ifdef USES_P139 + | 1 << 5 +#endif // ifdef USES_P139 + +#ifdef USES_P140 + | 1 << 4 +#endif // ifdef USES_P140 + +#ifdef USES_P141 + | 1 << 3 +#endif // ifdef USES_P141 + +#ifdef USES_P142 + | 1 << 2 +#endif // ifdef USES_P142 + +#ifdef USES_P143 + | 1 << 1 +#endif // ifdef USES_P143 + +#ifdef USES_P144 + | 1 << 0 +#endif // ifdef USES_P144 + , 0u // n=145 : m=0 +#ifdef USES_P145 + | 1 << 15 +#endif // ifdef USES_P145 + +#ifdef USES_P146 + | 1 << 14 +#endif // ifdef USES_P146 + +#ifdef USES_P147 + | 1 << 13 +#endif // ifdef USES_P147 + +#ifdef USES_P148 + | 1 << 12 +#endif // ifdef USES_P148 + +#ifdef USES_P149 + | 1 << 11 +#endif // ifdef USES_P149 + +#ifdef USES_P150 + | 1 << 10 +#endif // ifdef USES_P150 + +#ifdef USES_P151 + | 1 << 9 +#endif // ifdef USES_P151 + +#ifdef USES_P152 + | 1 << 8 +#endif // ifdef USES_P152 + +#ifdef USES_P153 + | 1 << 7 +#endif // ifdef USES_P153 + +#ifdef USES_P154 + | 1 << 6 +#endif // ifdef USES_P154 + +#ifdef USES_P155 + | 1 << 5 +#endif // ifdef USES_P155 + +#ifdef USES_P156 + | 1 << 4 +#endif // ifdef USES_P156 + +#ifdef USES_P157 + | 1 << 3 +#endif // ifdef USES_P157 + +#ifdef USES_P158 + | 1 << 2 +#endif // ifdef USES_P158 + +#ifdef USES_P159 + | 1 << 1 +#endif // ifdef USES_P159 + +#ifdef USES_P160 + | 1 << 0 +#endif // ifdef USES_P160 + , 0u // n=161 : m=0 +#ifdef USES_P161 + | 1 << 15 +#endif // ifdef USES_P161 + +#ifdef USES_P162 + | 1 << 14 +#endif // ifdef USES_P162 + +#ifdef USES_P163 + | 1 << 13 +#endif // ifdef USES_P163 + +#ifdef USES_P164 + | 1 << 12 +#endif // ifdef USES_P164 + +#ifdef USES_P165 + | 1 << 11 +#endif // ifdef USES_P165 + +#ifdef USES_P166 + | 1 << 10 +#endif // ifdef USES_P166 + +#ifdef USES_P167 + | 1 << 9 +#endif // ifdef USES_P167 + +#ifdef USES_P168 + | 1 << 8 +#endif // ifdef USES_P168 + +#ifdef USES_P169 + | 1 << 7 +#endif // ifdef USES_P169 + +#ifdef USES_P170 + | 1 << 6 +#endif // ifdef USES_P170 + +#ifdef USES_P171 + | 1 << 5 +#endif // ifdef USES_P171 + +#ifdef USES_P172 + | 1 << 4 +#endif // ifdef USES_P172 + +#ifdef USES_P173 + | 1 << 3 +#endif // ifdef USES_P173 + +#ifdef USES_P174 + | 1 << 2 +#endif // ifdef USES_P174 + +#ifdef USES_P175 + | 1 << 1 +#endif // ifdef USES_P175 + +#ifdef USES_P176 + | 1 << 0 +#endif // ifdef USES_P176 + , 0u // n=177 : m=0 +#ifdef USES_P177 + | 1 << 15 +#endif // ifdef USES_P177 + +#ifdef USES_P178 + | 1 << 14 +#endif // ifdef USES_P178 + +#ifdef USES_P179 + | 1 << 13 +#endif // ifdef USES_P179 + +#ifdef USES_P180 + | 1 << 12 +#endif // ifdef USES_P180 + +#ifdef USES_P181 + | 1 << 11 +#endif // ifdef USES_P181 + +#ifdef USES_P182 + | 1 << 10 +#endif // ifdef USES_P182 + +#ifdef USES_P183 + | 1 << 9 +#endif // ifdef USES_P183 + +#ifdef USES_P184 + | 1 << 8 +#endif // ifdef USES_P184 + +#ifdef USES_P185 + | 1 << 7 +#endif // ifdef USES_P185 + +#ifdef USES_P186 + | 1 << 6 +#endif // ifdef USES_P186 + +#ifdef USES_P187 + | 1 << 5 +#endif // ifdef USES_P187 + +#ifdef USES_P188 + | 1 << 4 +#endif // ifdef USES_P188 + +#ifdef USES_P189 + | 1 << 3 +#endif // ifdef USES_P189 + +#ifdef USES_P190 + | 1 << 2 +#endif // ifdef USES_P190 + +#ifdef USES_P191 + | 1 << 1 +#endif // ifdef USES_P191 + +#ifdef USES_P192 + | 1 << 0 +#endif // ifdef USES_P192 + , 0u // n=193 : m=0 +#ifdef USES_P193 + | 1 << 15 +#endif // ifdef USES_P193 + +#ifdef USES_P194 + | 1 << 14 +#endif // ifdef USES_P194 + +#ifdef USES_P195 + | 1 << 13 +#endif // ifdef USES_P195 + +#ifdef USES_P196 + | 1 << 12 +#endif // ifdef USES_P196 + +#ifdef USES_P197 + | 1 << 11 +#endif // ifdef USES_P197 + +#ifdef USES_P198 + | 1 << 10 +#endif // ifdef USES_P198 + +#ifdef USES_P199 + | 1 << 9 +#endif // ifdef USES_P199 + +#ifdef USES_P200 + | 1 << 8 +#endif // ifdef USES_P200 + +#ifdef USES_P201 + | 1 << 7 +#endif // ifdef USES_P201 + +#ifdef USES_P202 + | 1 << 6 +#endif // ifdef USES_P202 + +#ifdef USES_P203 + | 1 << 5 +#endif // ifdef USES_P203 + +#ifdef USES_P204 + | 1 << 4 +#endif // ifdef USES_P204 + +#ifdef USES_P205 + | 1 << 3 +#endif // ifdef USES_P205 + +#ifdef USES_P206 + | 1 << 2 +#endif // ifdef USES_P206 + +#ifdef USES_P207 + | 1 << 1 +#endif // ifdef USES_P207 + +#ifdef USES_P208 + | 1 << 0 +#endif // ifdef USES_P208 + , 0u // n=209 : m=0 +#ifdef USES_P209 + | 1 << 15 +#endif // ifdef USES_P209 + +#ifdef USES_P210 + | 1 << 14 +#endif // ifdef USES_P210 + +#ifdef USES_P211 + | 1 << 13 +#endif // ifdef USES_P211 + +#ifdef USES_P212 + | 1 << 12 +#endif // ifdef USES_P212 + +#ifdef USES_P213 + | 1 << 11 +#endif // ifdef USES_P213 + +#ifdef USES_P214 + | 1 << 10 +#endif // ifdef USES_P214 + +#ifdef USES_P215 + | 1 << 9 +#endif // ifdef USES_P215 + +#ifdef USES_P216 + | 1 << 8 +#endif // ifdef USES_P216 + +#ifdef USES_P217 + | 1 << 7 +#endif // ifdef USES_P217 + +#ifdef USES_P218 + | 1 << 6 +#endif // ifdef USES_P218 + +#ifdef USES_P219 + | 1 << 5 +#endif // ifdef USES_P219 + +#ifdef USES_P220 + | 1 << 4 +#endif // ifdef USES_P220 + +#ifdef USES_P221 + | 1 << 3 +#endif // ifdef USES_P221 + +#ifdef USES_P222 + | 1 << 2 +#endif // ifdef USES_P222 + +#ifdef USES_P223 + | 1 << 1 +#endif // ifdef USES_P223 + +#ifdef USES_P224 + | 1 << 0 +#endif // ifdef USES_P224 + , 0u // n=225 : m=0 +#ifdef USES_P225 + | 1 << 15 +#endif // ifdef USES_P225 + +#ifdef USES_P226 + | 1 << 14 +#endif // ifdef USES_P226 + +#ifdef USES_P227 + | 1 << 13 +#endif // ifdef USES_P227 + +#ifdef USES_P228 + | 1 << 12 +#endif // ifdef USES_P228 + +#ifdef USES_P229 + | 1 << 11 +#endif // ifdef USES_P229 + +#ifdef USES_P230 + | 1 << 10 +#endif // ifdef USES_P230 + +#ifdef USES_P231 + | 1 << 9 +#endif // ifdef USES_P231 + +#ifdef USES_P232 + | 1 << 8 +#endif // ifdef USES_P232 + +#ifdef USES_P233 + | 1 << 7 +#endif // ifdef USES_P233 + +#ifdef USES_P234 + | 1 << 6 +#endif // ifdef USES_P234 + +#ifdef USES_P235 + | 1 << 5 +#endif // ifdef USES_P235 + +#ifdef USES_P236 + | 1 << 4 +#endif // ifdef USES_P236 + +#ifdef USES_P237 + | 1 << 3 +#endif // ifdef USES_P237 + +#ifdef USES_P238 + | 1 << 2 +#endif // ifdef USES_P238 + +#ifdef USES_P239 + | 1 << 1 +#endif // ifdef USES_P239 + +#ifdef USES_P240 + | 1 << 0 +#endif // ifdef USES_P240 + , 0u // n=241 : m=0 +#ifdef USES_P241 + | 1 << 15 +#endif // ifdef USES_P241 + +#ifdef USES_P242 + | 1 << 14 +#endif // ifdef USES_P242 + +#ifdef USES_P243 + | 1 << 13 +#endif // ifdef USES_P243 + +#ifdef USES_P244 + | 1 << 12 +#endif // ifdef USES_P244 + +#ifdef USES_P245 + | 1 << 11 +#endif // ifdef USES_P245 + +#ifdef USES_P246 + | 1 << 10 +#endif // ifdef USES_P246 + +#ifdef USES_P247 + | 1 << 9 +#endif // ifdef USES_P247 + +#ifdef USES_P248 + | 1 << 8 +#endif // ifdef USES_P248 + +#ifdef USES_P249 + | 1 << 7 +#endif // ifdef USES_P249 + +#ifdef USES_P250 + | 1 << 6 +#endif // ifdef USES_P250 + +#ifdef USES_P251 + | 1 << 5 +#endif // ifdef USES_P251 + +#ifdef USES_P252 + | 1 << 4 +#endif // ifdef USES_P252 + +#ifdef USES_P253 + | 1 << 3 +#endif // ifdef USES_P253 + +#ifdef USES_P254 + | 1 << 2 +#endif // ifdef USES_P254 + +#ifdef USES_P255 + | 1 << 1 +#endif // ifdef USES_P255 +}; + +#else // if FEATURE_BUILD_DESCRIPTION // Vector to match a "DeviceIndex" to a plugin ID. constexpr /*pluginID_t*/ uint8_t DeviceIndex_to_Plugin_id[] PROGMEM = @@ -1040,6 +2066,7 @@ constexpr /*pluginID_t*/ uint8_t DeviceIndex_to_Plugin_id[] PROGMEM = 255, #endif // ifdef USES_P255 }; +#endif // if FEATURE_BUILD_DESCRIPTION typedef boolean (*Plugin_ptr_t)(uint8_t, struct EventStruct *, @@ -2072,6 +3099,18 @@ constexpr const Plugin_ptr_t PROGMEM Plugin_ptr[] = bool _Plugin_init_setupDone = false; +#if FEATURE_BUILD_DESCRIPTION +#ifdef ESP8266 +deviceIndex_t* DeviceIndex_sorted; +#else +std::vector DeviceIndex_sorted; +#endif + +size_t DeviceIndex_to_Plugin_id_size{}; + +size_t Plugin_id_to_DeviceIndex_size{}; + +#else // if FEATURE_BUILD_DESCRIPTION constexpr size_t DeviceIndex_to_Plugin_id_size = NR_ELEMENTS(DeviceIndex_to_Plugin_id); @@ -2107,6 +3146,8 @@ size_t get_Plugin_id_to_DeviceIndex_arrayIndex(pluginID_t pluginID) return Plugin_id_to_DeviceIndex_size; } +#endif // if FEATURE_BUILD_DESCRIPTION + /* // TD-er: Test to make constexpr array Plugin_id_to_DeviceIndex @@ -2142,7 +3183,11 @@ constexpr auto x = get_DevId_from_PId_array(std::make_integer_sequencewrite({ F("build_time"), get_build_time() }); writer->write({ F("filename"), LabelType::BINARY_FILENAME }); writer->write({ F("build_platform"), LabelType::BUILD_PLATFORM }); + #if FEATURE_BUILD_DESCRIPTION + writer->write({ F("build_description"), LabelType::BUILD_DESCRIPTION }); + #endif // if FEATURE_BUILD_DESCRIPTION writer->write({ F("git_head"), LabelType::GIT_HEAD }); # ifdef CONFIGURATION_CODE writer->write({ F("configuration_code"), LabelType::CONFIGURATION_CODE_LBL }); @@ -504,6 +507,9 @@ void handle_sysinfo_Firmware() { LabelType::BUILD_TIME, LabelType::BINARY_FILENAME, LabelType::BUILD_PLATFORM, + #if FEATURE_BUILD_DESCRIPTION + LabelType::BUILD_DESCRIPTION, + #endif // if FEATURE_BUILD_DESCRIPTION LabelType::GIT_HEAD, # ifdef CONFIGURATION_CODE LabelType::CONFIGURATION_CODE_LBL,