@@ -87,7 +87,6 @@ pub trait ClusterType {
87
87
pub struct Cluster {
88
88
pub ( super ) id : u32 ,
89
89
attributes : Vec < Attribute > ,
90
- feature_map : Option < u32 > ,
91
90
data_ver : u32 ,
92
91
}
93
92
@@ -96,7 +95,6 @@ impl Cluster {
96
95
let mut c = Cluster {
97
96
id,
98
97
attributes : Vec :: with_capacity ( ATTRS_PER_CLUSTER ) ,
99
- feature_map : None ,
100
98
data_ver : rand:: thread_rng ( ) . gen_range ( 0 ..0xFFFFFFFF ) ,
101
99
} ;
102
100
c. add_default_attributes ( ) ?;
@@ -112,22 +110,20 @@ impl Cluster {
112
110
}
113
111
114
112
pub fn set_feature_map ( & mut self , map : u32 ) -> Result < ( ) , Error > {
115
- if self . feature_map . is_none ( ) {
116
- self . add_attribute ( Attribute :: new (
117
- GlobalElements :: FeatureMap as u16 ,
118
- AttrValue :: Uint32 ( map) ,
119
- Access :: RV ,
120
- Quality :: NONE ,
121
- ) ?) ?;
122
- } else {
123
- self . write_attribute_raw ( GlobalElements :: FeatureMap as u16 , AttrValue :: Uint32 ( map) )
124
- . map_err ( |_| Error :: Invalid ) ?;
125
- }
126
- self . feature_map = Some ( map) ;
113
+ self . write_attribute_raw ( GlobalElements :: FeatureMap as u16 , AttrValue :: Uint32 ( map) )
114
+ . map_err ( |_| Error :: Invalid ) ?;
127
115
Ok ( ( ) )
128
116
}
129
117
130
118
fn add_default_attributes ( & mut self ) -> Result < ( ) , Error > {
119
+ // Default feature map is 0
120
+ self . add_attribute ( Attribute :: new (
121
+ GlobalElements :: FeatureMap as u16 ,
122
+ AttrValue :: Uint32 ( 0 ) ,
123
+ Access :: RV ,
124
+ Quality :: NONE ,
125
+ ) ?) ?;
126
+
131
127
self . add_attribute ( Attribute :: new (
132
128
GlobalElements :: AttributeList as u16 ,
133
129
AttrValue :: Custom ,
@@ -233,8 +229,7 @@ impl Cluster {
233
229
return ;
234
230
}
235
231
GlobalElements :: FeatureMap => {
236
- let val = if let Some ( m) = self . feature_map { m } else { 0 } ;
237
- encoder. encode ( EncodeValue :: Value ( & val) ) ;
232
+ encoder. encode ( EncodeValue :: Value ( & attr. value ) ) ;
238
233
return ;
239
234
}
240
235
_ => {
@@ -284,7 +279,7 @@ impl Cluster {
284
279
) -> Result < ( ) , IMStatusCode > {
285
280
let a = self . get_attribute_mut ( attr_id) ?;
286
281
if a. value != AttrValue :: Custom {
287
- let mut value = a. value ;
282
+ let mut value = a. value . clone ( ) ;
288
283
value
289
284
. update_from_tlv ( data)
290
285
. map_err ( |_| IMStatusCode :: Failure ) ?;
0 commit comments