Skip to content

Commit 5b0db48

Browse files
committed
Merge branch 'fix/invalid_type' into 'main'
components/esp-matter: Fix invalid type from MatterPre and PostAttributeChangeCallback. See merge request app-frameworks/esp-matter!976
2 parents c991c92 + dcbebd3 commit 5b0db48

File tree

1 file changed

+113
-7
lines changed

1 file changed

+113
-7
lines changed

components/esp_matter/esp_matter_attribute_utils.cpp

+113-7
Original file line numberDiff line numberDiff line change
@@ -1058,6 +1058,11 @@ static esp_matter_val_type_t get_val_type_from_attribute_type(int attribute_type
10581058
break;
10591059

10601060
case ZCL_OCTET_STRING_ATTRIBUTE_TYPE:
1061+
case ZCL_IPADR_ATTRIBUTE_TYPE:
1062+
case ZCL_IPV4ADR_ATTRIBUTE_TYPE:
1063+
case ZCL_IPV6ADR_ATTRIBUTE_TYPE:
1064+
case ZCL_IPV6PRE_ATTRIBUTE_TYPE:
1065+
case ZCL_HWADR_ATTRIBUTE_TYPE:
10611066
return ESP_MATTER_VAL_TYPE_OCTET_STRING;
10621067
break;
10631068

@@ -1070,34 +1075,75 @@ static esp_matter_val_type_t get_val_type_from_attribute_type(int attribute_type
10701075
break;
10711076

10721077
case ZCL_INT8U_ATTRIBUTE_TYPE:
1078+
case ZCL_ACTION_ID_ATTRIBUTE_TYPE:
1079+
case ZCL_TAG_ATTRIBUTE_TYPE:
1080+
case ZCL_NAMESPACE_ATTRIBUTE_TYPE:
1081+
case ZCL_FABRIC_IDX_ATTRIBUTE_TYPE:
1082+
case ZCL_PERCENT_ATTRIBUTE_TYPE:
10731083
return ESP_MATTER_VAL_TYPE_UINT8;
10741084
break;
10751085

10761086
case ZCL_INT16S_ATTRIBUTE_TYPE:
1087+
case ZCL_TEMPERATURE_ATTRIBUTE_TYPE:
10771088
return ESP_MATTER_VAL_TYPE_INT16;
10781089
break;
10791090

10801091
case ZCL_INT16U_ATTRIBUTE_TYPE:
1092+
case ZCL_ENTRY_IDX_ATTRIBUTE_TYPE:
1093+
case ZCL_GROUP_ID_ATTRIBUTE_TYPE:
1094+
case ZCL_ENDPOINT_NO_ATTRIBUTE_TYPE:
1095+
case ZCL_VENDOR_ID_ATTRIBUTE_TYPE:
1096+
case ZCL_PERCENT100THS_ATTRIBUTE_TYPE:
10811097
return ESP_MATTER_VAL_TYPE_UINT16;
10821098
break;
10831099

10841100
case ZCL_INT32S_ATTRIBUTE_TYPE:
1101+
case ZCL_INT24S_ATTRIBUTE_TYPE:
10851102
return ESP_MATTER_VAL_TYPE_INT32;
10861103
break;
10871104

10881105
case ZCL_INT32U_ATTRIBUTE_TYPE:
1106+
case ZCL_TRANS_ID_ATTRIBUTE_TYPE:
1107+
case ZCL_CLUSTER_ID_ATTRIBUTE_TYPE:
1108+
case ZCL_ATTRIB_ID_ATTRIBUTE_TYPE:
1109+
case ZCL_FIELD_ID_ATTRIBUTE_TYPE:
1110+
case ZCL_EVENT_ID_ATTRIBUTE_TYPE:
1111+
case ZCL_COMMAND_ID_ATTRIBUTE_TYPE:
1112+
case ZCL_EPOCH_S_ATTRIBUTE_TYPE:
1113+
case ZCL_ELAPSED_S_ATTRIBUTE_TYPE:
1114+
case ZCL_DATA_VER_ATTRIBUTE_TYPE:
1115+
case ZCL_DEVTYPE_ID_ATTRIBUTE_TYPE:
1116+
case ZCL_INT24U_ATTRIBUTE_TYPE:
10891117
return ESP_MATTER_VAL_TYPE_UINT32;
10901118
break;
10911119

10921120
case ZCL_INT64S_ATTRIBUTE_TYPE:
1121+
case ZCL_ENERGY_MWH_ATTRIBUTE_TYPE:
1122+
case ZCL_AMPERAGE_MA_ATTRIBUTE_TYPE:
1123+
case ZCL_POWER_MW_ATTRIBUTE_TYPE:
1124+
case ZCL_INT56S_ATTRIBUTE_TYPE:
1125+
case ZCL_INT48S_ATTRIBUTE_TYPE:
1126+
case ZCL_INT40S_ATTRIBUTE_TYPE:
10931127
return ESP_MATTER_VAL_TYPE_INT64;
10941128
break;
10951129

10961130
case ZCL_INT64U_ATTRIBUTE_TYPE:
1131+
case ZCL_FABRIC_ID_ATTRIBUTE_TYPE:
1132+
case ZCL_NODE_ID_ATTRIBUTE_TYPE:
1133+
case ZCL_POSIX_MS_ATTRIBUTE_TYPE:
1134+
case ZCL_EPOCH_US_ATTRIBUTE_TYPE:
1135+
case ZCL_SYSTIME_US_ATTRIBUTE_TYPE:
1136+
case ZCL_SYSTIME_MS_ATTRIBUTE_TYPE:
1137+
case ZCL_EVENT_NO_ATTRIBUTE_TYPE:
1138+
case ZCL_INT56U_ATTRIBUTE_TYPE:
1139+
case ZCL_INT48U_ATTRIBUTE_TYPE:
1140+
case ZCL_INT40U_ATTRIBUTE_TYPE:
10971141
return ESP_MATTER_VAL_TYPE_UINT64;
10981142
break;
10991143

11001144
case ZCL_ENUM8_ATTRIBUTE_TYPE:
1145+
case ZCL_STATUS_ATTRIBUTE_TYPE:
1146+
case ZCL_PRIORITY_ATTRIBUTE_TYPE:
11011147
return ESP_MATTER_VAL_TYPE_ENUM8;
11021148
break;
11031149

@@ -1632,7 +1678,12 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
16321678
break;
16331679
}
16341680

1635-
case ZCL_OCTET_STRING_ATTRIBUTE_TYPE: {
1681+
case ZCL_OCTET_STRING_ATTRIBUTE_TYPE:
1682+
case ZCL_IPADR_ATTRIBUTE_TYPE:
1683+
case ZCL_IPV4ADR_ATTRIBUTE_TYPE:
1684+
case ZCL_IPV6ADR_ATTRIBUTE_TYPE:
1685+
case ZCL_IPV6PRE_ATTRIBUTE_TYPE:
1686+
case ZCL_HWADR_ATTRIBUTE_TYPE: {
16361687
*val = esp_matter_octet_str(NULL, 0);
16371688
int data_size_len = val->val.a.t - val->val.a.s;
16381689
int data_count = 0;
@@ -1667,6 +1718,10 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
16671718
}
16681719

16691720
case ZCL_INT8U_ATTRIBUTE_TYPE:
1721+
case ZCL_ACTION_ID_ATTRIBUTE_TYPE:
1722+
case ZCL_TAG_ATTRIBUTE_TYPE:
1723+
case ZCL_NAMESPACE_ATTRIBUTE_TYPE:
1724+
case ZCL_FABRIC_IDX_ATTRIBUTE_TYPE:
16701725
case ZCL_PERCENT_ATTRIBUTE_TYPE: {
16711726
using Traits = chip::app::NumericAttributeTraits<uint8_t>;
16721727
Traits::StorageType attribute_value;
@@ -1683,7 +1738,8 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
16831738
break;
16841739
}
16851740

1686-
case ZCL_INT16S_ATTRIBUTE_TYPE: {
1741+
case ZCL_INT16S_ATTRIBUTE_TYPE:
1742+
case ZCL_TEMPERATURE_ATTRIBUTE_TYPE: {
16871743
using Traits = chip::app::NumericAttributeTraits<int16_t>;
16881744
Traits::StorageType attribute_value;
16891745
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1700,6 +1756,10 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17001756
}
17011757

17021758
case ZCL_INT16U_ATTRIBUTE_TYPE:
1759+
case ZCL_ENTRY_IDX_ATTRIBUTE_TYPE:
1760+
case ZCL_GROUP_ID_ATTRIBUTE_TYPE:
1761+
case ZCL_ENDPOINT_NO_ATTRIBUTE_TYPE:
1762+
case ZCL_VENDOR_ID_ATTRIBUTE_TYPE:
17031763
case ZCL_PERCENT100THS_ATTRIBUTE_TYPE: {
17041764
using Traits = chip::app::NumericAttributeTraits<uint16_t>;
17051765
Traits::StorageType attribute_value;
@@ -1716,7 +1776,8 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17161776
break;
17171777
}
17181778

1719-
case ZCL_INT32S_ATTRIBUTE_TYPE: {
1779+
case ZCL_INT32S_ATTRIBUTE_TYPE:
1780+
case ZCL_INT24S_ATTRIBUTE_TYPE: {
17201781
using Traits = chip::app::NumericAttributeTraits<int32_t>;
17211782
Traits::StorageType attribute_value;
17221783
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1732,7 +1793,18 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17321793
break;
17331794
}
17341795

1735-
case ZCL_INT32U_ATTRIBUTE_TYPE: {
1796+
case ZCL_INT32U_ATTRIBUTE_TYPE:
1797+
case ZCL_TRANS_ID_ATTRIBUTE_TYPE:
1798+
case ZCL_CLUSTER_ID_ATTRIBUTE_TYPE:
1799+
case ZCL_ATTRIB_ID_ATTRIBUTE_TYPE:
1800+
case ZCL_FIELD_ID_ATTRIBUTE_TYPE:
1801+
case ZCL_EVENT_ID_ATTRIBUTE_TYPE:
1802+
case ZCL_COMMAND_ID_ATTRIBUTE_TYPE:
1803+
case ZCL_EPOCH_S_ATTRIBUTE_TYPE:
1804+
case ZCL_ELAPSED_S_ATTRIBUTE_TYPE:
1805+
case ZCL_DATA_VER_ATTRIBUTE_TYPE:
1806+
case ZCL_DEVTYPE_ID_ATTRIBUTE_TYPE:
1807+
case ZCL_INT24U_ATTRIBUTE_TYPE: {
17361808
using Traits = chip::app::NumericAttributeTraits<uint32_t>;
17371809
Traits::StorageType attribute_value;
17381810
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1748,7 +1820,13 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17481820
break;
17491821
}
17501822

1751-
case ZCL_INT64S_ATTRIBUTE_TYPE: {
1823+
case ZCL_INT64S_ATTRIBUTE_TYPE:
1824+
case ZCL_ENERGY_MWH_ATTRIBUTE_TYPE:
1825+
case ZCL_AMPERAGE_MA_ATTRIBUTE_TYPE:
1826+
case ZCL_POWER_MW_ATTRIBUTE_TYPE:
1827+
case ZCL_INT56S_ATTRIBUTE_TYPE:
1828+
case ZCL_INT48S_ATTRIBUTE_TYPE:
1829+
case ZCL_INT40S_ATTRIBUTE_TYPE: {
17521830
using Traits = chip::app::NumericAttributeTraits<int64_t>;
17531831
Traits::StorageType attribute_value;
17541832
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1764,7 +1842,17 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17641842
break;
17651843
}
17661844

1767-
case ZCL_INT64U_ATTRIBUTE_TYPE: {
1845+
case ZCL_INT64U_ATTRIBUTE_TYPE:
1846+
case ZCL_FABRIC_ID_ATTRIBUTE_TYPE:
1847+
case ZCL_NODE_ID_ATTRIBUTE_TYPE:
1848+
case ZCL_POSIX_MS_ATTRIBUTE_TYPE:
1849+
case ZCL_EPOCH_US_ATTRIBUTE_TYPE:
1850+
case ZCL_SYSTIME_US_ATTRIBUTE_TYPE:
1851+
case ZCL_SYSTIME_MS_ATTRIBUTE_TYPE:
1852+
case ZCL_EVENT_NO_ATTRIBUTE_TYPE:
1853+
case ZCL_INT56U_ATTRIBUTE_TYPE:
1854+
case ZCL_INT48U_ATTRIBUTE_TYPE:
1855+
case ZCL_INT40U_ATTRIBUTE_TYPE: {
17681856
using Traits = chip::app::NumericAttributeTraits<uint64_t>;
17691857
Traits::StorageType attribute_value;
17701858
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1780,7 +1868,9 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
17801868
break;
17811869
}
17821870

1783-
case ZCL_ENUM8_ATTRIBUTE_TYPE: {
1871+
case ZCL_ENUM8_ATTRIBUTE_TYPE:
1872+
case ZCL_STATUS_ATTRIBUTE_TYPE:
1873+
case ZCL_PRIORITY_ATTRIBUTE_TYPE: {
17841874
using Traits = chip::app::NumericAttributeTraits<uint8_t>;
17851875
Traits::StorageType attribute_value;
17861876
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
@@ -1844,6 +1934,22 @@ esp_err_t get_attr_val_from_data(esp_matter_attr_val_t *val, EmberAfAttributeTyp
18441934
break;
18451935
}
18461936

1937+
case ZCL_BITMAP32_ATTRIBUTE_TYPE: {
1938+
using Traits = chip::app::NumericAttributeTraits<uint32_t>;
1939+
Traits::StorageType attribute_value;
1940+
memcpy((uint8_t *)&attribute_value, value, sizeof(Traits::StorageType));
1941+
if (attribute_metadata->IsNullable()) {
1942+
if (Traits::IsNullValue(attribute_value)) {
1943+
*val = esp_matter_nullable_bitmap32(nullable<uint32_t>());
1944+
} else {
1945+
*val = esp_matter_nullable_bitmap32(attribute_value);
1946+
}
1947+
} else {
1948+
*val = esp_matter_bitmap32(attribute_value);
1949+
}
1950+
break;
1951+
}
1952+
18471953
case ZCL_SINGLE_ATTRIBUTE_TYPE: {
18481954
using Traits = chip::app::NumericAttributeTraits<float>;
18491955
Traits::StorageType attribute_value;

0 commit comments

Comments
 (0)