mirror of
https://github.com/esphome/esphome.git
synced 2025-09-12 00:02:21 +01:00
Reduce static RAM usage (#2140)
This commit is contained in:
@@ -366,65 +366,75 @@ const char *get_op_mode_str(uint8_t mode) {
|
||||
return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
// Note that this method returns PROGMEM strings, so use LOG_STR_ARG() to access them.
|
||||
const char *get_disconnect_reason_str(uint8_t reason) {
|
||||
/* If this were one big switch statement, GCC would generate a lookup table for it. However, the values of the
|
||||
* REASON_* constants aren't continuous, and GCC will fill in the gap with the default value -- wasting 4 bytes of RAM
|
||||
* per entry. As there's ~175 default entries, this wastes 700 bytes of RAM.
|
||||
*/
|
||||
if (reason <= REASON_CIPHER_SUITE_REJECTED) { // This must be the last constant with a value <200
|
||||
switch (reason) {
|
||||
case REASON_AUTH_EXPIRE:
|
||||
return LOG_STR("Auth Expired");
|
||||
case REASON_AUTH_LEAVE:
|
||||
return LOG_STR("Auth Leave");
|
||||
case REASON_ASSOC_EXPIRE:
|
||||
return LOG_STR("Association Expired");
|
||||
case REASON_ASSOC_TOOMANY:
|
||||
return LOG_STR("Too Many Associations");
|
||||
case REASON_NOT_AUTHED:
|
||||
return LOG_STR("Not Authenticated");
|
||||
case REASON_NOT_ASSOCED:
|
||||
return LOG_STR("Not Associated");
|
||||
case REASON_ASSOC_LEAVE:
|
||||
return LOG_STR("Association Leave");
|
||||
case REASON_ASSOC_NOT_AUTHED:
|
||||
return LOG_STR("Association not Authenticated");
|
||||
case REASON_DISASSOC_PWRCAP_BAD:
|
||||
return LOG_STR("Disassociate Power Cap Bad");
|
||||
case REASON_DISASSOC_SUPCHAN_BAD:
|
||||
return LOG_STR("Disassociate Supported Channel Bad");
|
||||
case REASON_IE_INVALID:
|
||||
return LOG_STR("IE Invalid");
|
||||
case REASON_MIC_FAILURE:
|
||||
return LOG_STR("Mic Failure");
|
||||
case REASON_4WAY_HANDSHAKE_TIMEOUT:
|
||||
return LOG_STR("4-Way Handshake Timeout");
|
||||
case REASON_GROUP_KEY_UPDATE_TIMEOUT:
|
||||
return LOG_STR("Group Key Update Timeout");
|
||||
case REASON_IE_IN_4WAY_DIFFERS:
|
||||
return LOG_STR("IE In 4-Way Handshake Differs");
|
||||
case REASON_GROUP_CIPHER_INVALID:
|
||||
return LOG_STR("Group Cipher Invalid");
|
||||
case REASON_PAIRWISE_CIPHER_INVALID:
|
||||
return LOG_STR("Pairwise Cipher Invalid");
|
||||
case REASON_AKMP_INVALID:
|
||||
return LOG_STR("AKMP Invalid");
|
||||
case REASON_UNSUPP_RSN_IE_VERSION:
|
||||
return LOG_STR("Unsupported RSN IE version");
|
||||
case REASON_INVALID_RSN_IE_CAP:
|
||||
return LOG_STR("Invalid RSN IE Cap");
|
||||
case REASON_802_1X_AUTH_FAILED:
|
||||
return LOG_STR("802.1x Authentication Failed");
|
||||
case REASON_CIPHER_SUITE_REJECTED:
|
||||
return LOG_STR("Cipher Suite Rejected");
|
||||
}
|
||||
}
|
||||
|
||||
switch (reason) {
|
||||
case REASON_AUTH_EXPIRE:
|
||||
return "Auth Expired";
|
||||
case REASON_AUTH_LEAVE:
|
||||
return "Auth Leave";
|
||||
case REASON_ASSOC_EXPIRE:
|
||||
return "Association Expired";
|
||||
case REASON_ASSOC_TOOMANY:
|
||||
return "Too Many Associations";
|
||||
case REASON_NOT_AUTHED:
|
||||
return "Not Authenticated";
|
||||
case REASON_NOT_ASSOCED:
|
||||
return "Not Associated";
|
||||
case REASON_ASSOC_LEAVE:
|
||||
return "Association Leave";
|
||||
case REASON_ASSOC_NOT_AUTHED:
|
||||
return "Association not Authenticated";
|
||||
case REASON_DISASSOC_PWRCAP_BAD:
|
||||
return "Disassociate Power Cap Bad";
|
||||
case REASON_DISASSOC_SUPCHAN_BAD:
|
||||
return "Disassociate Supported Channel Bad";
|
||||
case REASON_IE_INVALID:
|
||||
return "IE Invalid";
|
||||
case REASON_MIC_FAILURE:
|
||||
return "Mic Failure";
|
||||
case REASON_4WAY_HANDSHAKE_TIMEOUT:
|
||||
return "4-Way Handshake Timeout";
|
||||
case REASON_GROUP_KEY_UPDATE_TIMEOUT:
|
||||
return "Group Key Update Timeout";
|
||||
case REASON_IE_IN_4WAY_DIFFERS:
|
||||
return "IE In 4-Way Handshake Differs";
|
||||
case REASON_GROUP_CIPHER_INVALID:
|
||||
return "Group Cipher Invalid";
|
||||
case REASON_PAIRWISE_CIPHER_INVALID:
|
||||
return "Pairwise Cipher Invalid";
|
||||
case REASON_AKMP_INVALID:
|
||||
return "AKMP Invalid";
|
||||
case REASON_UNSUPP_RSN_IE_VERSION:
|
||||
return "Unsupported RSN IE version";
|
||||
case REASON_INVALID_RSN_IE_CAP:
|
||||
return "Invalid RSN IE Cap";
|
||||
case REASON_802_1X_AUTH_FAILED:
|
||||
return "802.1x Authentication Failed";
|
||||
case REASON_CIPHER_SUITE_REJECTED:
|
||||
return "Cipher Suite Rejected";
|
||||
case REASON_BEACON_TIMEOUT:
|
||||
return "Beacon Timeout";
|
||||
return LOG_STR("Beacon Timeout");
|
||||
case REASON_NO_AP_FOUND:
|
||||
return "AP Not Found";
|
||||
return LOG_STR("AP Not Found");
|
||||
case REASON_AUTH_FAIL:
|
||||
return "Authentication Failed";
|
||||
return LOG_STR("Authentication Failed");
|
||||
case REASON_ASSOC_FAIL:
|
||||
return "Association Failed";
|
||||
return LOG_STR("Association Failed");
|
||||
case REASON_HANDSHAKE_TIMEOUT:
|
||||
return "Handshake Failed";
|
||||
return LOG_STR("Handshake Failed");
|
||||
case REASON_UNSPECIFIED:
|
||||
default:
|
||||
return "Unspecified";
|
||||
return LOG_STR("Unspecified");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,7 +458,7 @@ void WiFiComponent::wifi_event_callback(System_Event_t *event) {
|
||||
ESP_LOGW(TAG, "Event: Disconnected ssid='%s' reason='Probe Request Unsuccessful'", buf);
|
||||
} else {
|
||||
ESP_LOGW(TAG, "Event: Disconnected ssid='%s' bssid=" LOG_SECRET("%s") " reason='%s'", buf,
|
||||
format_mac_addr(it.bssid).c_str(), get_disconnect_reason_str(it.reason));
|
||||
format_mac_addr(it.bssid).c_str(), LOG_STR_ARG(get_disconnect_reason_str(it.reason)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user