Merge pull request #51 from kedars/feature/types_for_id
IM: Use Types for IDs
This commit is contained in:
		
						commit
						3b091c2106
					
				
					 11 changed files with 89 additions and 63 deletions
				
			
		|  | @ -21,7 +21,7 @@ use std::{ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|     data_model::objects::{Access, Privilege}, |     data_model::objects::{Access, ClusterId, EndptId, Privilege}, | ||||||
|     error::Error, |     error::Error, | ||||||
|     fabric, |     fabric, | ||||||
|     interaction_model::messages::GenericPath, |     interaction_model::messages::GenericPath, | ||||||
|  | @ -240,13 +240,17 @@ impl<'a> AccessReq<'a> { | ||||||
| 
 | 
 | ||||||
| #[derive(FromTLV, ToTLV, Copy, Clone, Debug, PartialEq)] | #[derive(FromTLV, ToTLV, Copy, Clone, Debug, PartialEq)] | ||||||
| pub struct Target { | pub struct Target { | ||||||
|     cluster: Option<u32>, |     cluster: Option<ClusterId>, | ||||||
|     endpoint: Option<u16>, |     endpoint: Option<EndptId>, | ||||||
|     device_type: Option<u32>, |     device_type: Option<u32>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Target { | impl Target { | ||||||
|     pub fn new(endpoint: Option<u16>, cluster: Option<u32>, device_type: Option<u32>) -> Self { |     pub fn new( | ||||||
|  |         endpoint: Option<EndptId>, | ||||||
|  |         cluster: Option<ClusterId>, | ||||||
|  |         device_type: Option<u32>, | ||||||
|  |     ) -> Self { | ||||||
|         Self { |         Self { | ||||||
|             cluster, |             cluster, | ||||||
|             endpoint, |             endpoint, | ||||||
|  |  | ||||||
|  | @ -234,7 +234,7 @@ enum ResumeReq { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl objects::ChangeConsumer for DataModel { | impl objects::ChangeConsumer for DataModel { | ||||||
|     fn endpoint_added(&self, id: u16, endpoint: &mut Endpoint) -> Result<(), Error> { |     fn endpoint_added(&self, id: EndptId, endpoint: &mut Endpoint) -> Result<(), Error> { | ||||||
|         endpoint.add_cluster(DescriptorCluster::new(id, self.clone())?)?; |         endpoint.add_cluster(DescriptorCluster::new(id, self.clone())?)?; | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -134,9 +134,9 @@ impl ResumeReadReq { | ||||||
| impl DataModel { | impl DataModel { | ||||||
|     pub fn read_attribute_raw( |     pub fn read_attribute_raw( | ||||||
|         &self, |         &self, | ||||||
|         endpoint: u16, |         endpoint: EndptId, | ||||||
|         cluster: u32, |         cluster: ClusterId, | ||||||
|         attr: u16, |         attr: AttrId, | ||||||
|     ) -> Result<AttrValue, IMStatusCode> { |     ) -> Result<AttrValue, IMStatusCode> { | ||||||
|         let node = self.node.read().unwrap(); |         let node = self.node.read().unwrap(); | ||||||
|         let cluster = node.get_cluster(endpoint, cluster)?; |         let cluster = node.get_cluster(endpoint, cluster)?; | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ pub fn device_type_add_root_node( | ||||||
|     fabric_mgr: Arc<FabricMgr>, |     fabric_mgr: Arc<FabricMgr>, | ||||||
|     acl_mgr: Arc<AclMgr>, |     acl_mgr: Arc<AclMgr>, | ||||||
|     pase_mgr: PaseMgr, |     pase_mgr: PaseMgr, | ||||||
| ) -> Result<u32, Error> { | ) -> Result<EndptId, Error> { | ||||||
|     // Add the root endpoint
 |     // Add the root endpoint
 | ||||||
|     let endpoint = node.add_endpoint(DEV_TYPE_ROOT_NODE)?; |     let endpoint = node.add_endpoint(DEV_TYPE_ROOT_NODE)?; | ||||||
|     if endpoint != 0 { |     if endpoint != 0 { | ||||||
|  | @ -78,7 +78,7 @@ pub const DEV_TYPE_ON_SMART_SPEAKER: DeviceType = DeviceType { | ||||||
|     drev: 2, |     drev: 2, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| pub fn device_type_add_on_off_light(node: &mut WriteNode) -> Result<u32, Error> { | pub fn device_type_add_on_off_light(node: &mut WriteNode) -> Result<EndptId, Error> { | ||||||
|     let endpoint = node.add_endpoint(DEV_TYPE_ON_OFF_LIGHT)?; |     let endpoint = node.add_endpoint(DEV_TYPE_ON_OFF_LIGHT)?; | ||||||
|     node.add_cluster(endpoint, OnOffCluster::new()?)?; |     node.add_cluster(endpoint, OnOffCluster::new()?)?; | ||||||
|     Ok(endpoint) |     Ok(endpoint) | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ | ||||||
|  *    limitations under the License. |  *    limitations under the License. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| use super::{GlobalElements, Privilege}; | use super::{AttrId, GlobalElements, Privilege}; | ||||||
| use crate::{ | use crate::{ | ||||||
|     error::*, |     error::*, | ||||||
|     // TODO: This layer shouldn't really depend on the TLV layer, should create an abstraction layer
 |     // TODO: This layer shouldn't really depend on the TLV layer, should create an abstraction layer
 | ||||||
|  | @ -153,7 +153,7 @@ impl AttrValue { | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
| pub struct Attribute { | pub struct Attribute { | ||||||
|     pub(super) id: u16, |     pub(super) id: AttrId, | ||||||
|     pub(super) value: AttrValue, |     pub(super) value: AttrValue, | ||||||
|     pub(super) quality: Quality, |     pub(super) quality: Quality, | ||||||
|     pub(super) access: Access, |     pub(super) access: Access, | ||||||
|  | @ -171,7 +171,7 @@ impl Default for Attribute { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Attribute { | impl Attribute { | ||||||
|     pub fn new(id: u16, value: AttrValue, access: Access, quality: Quality) -> Self { |     pub fn new(id: AttrId, value: AttrValue, access: Access, quality: Quality) -> Self { | ||||||
|         Attribute { |         Attribute { | ||||||
|             id, |             id, | ||||||
|             value, |             value, | ||||||
|  | @ -189,8 +189,8 @@ impl Attribute { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn is_system_attr(attr_id: u16) -> bool { |     pub fn is_system_attr(attr_id: AttrId) -> bool { | ||||||
|         attr_id >= (GlobalElements::ServerGenCmd as u16) |         attr_id >= (GlobalElements::ServerGenCmd as AttrId) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ use num_derive::FromPrimitive; | ||||||
| use rand::Rng; | use rand::Rng; | ||||||
| use std::fmt::{self, Debug}; | use std::fmt::{self, Debug}; | ||||||
| 
 | 
 | ||||||
| use super::Encoder; | use super::{AttrId, ClusterId, Encoder}; | ||||||
| 
 | 
 | ||||||
| pub const ATTRS_PER_CLUSTER: usize = 10; | pub const ATTRS_PER_CLUSTER: usize = 10; | ||||||
| pub const CMDS_PER_CLUSTER: usize = 8; | pub const CMDS_PER_CLUSTER: usize = 8; | ||||||
|  | @ -56,7 +56,7 @@ pub struct AttrDetails { | ||||||
|     /// List Index, if any
 |     /// List Index, if any
 | ||||||
|     pub list_index: Option<Nullable<u16>>, |     pub list_index: Option<Nullable<u16>>, | ||||||
|     /// The actual attribute ID
 |     /// The actual attribute ID
 | ||||||
|     pub attr_id: u16, |     pub attr_id: AttrId, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl AttrDetails { | impl AttrDetails { | ||||||
|  | @ -102,13 +102,13 @@ pub trait ClusterType { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub struct Cluster { | pub struct Cluster { | ||||||
|     pub(super) id: u32, |     pub(super) id: ClusterId, | ||||||
|     attributes: Vec<Attribute>, |     attributes: Vec<Attribute>, | ||||||
|     data_ver: u32, |     data_ver: u32, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Cluster { | impl Cluster { | ||||||
|     pub fn new(id: u32) -> Result<Cluster, Error> { |     pub fn new(id: ClusterId) -> Result<Cluster, Error> { | ||||||
|         let mut c = Cluster { |         let mut c = Cluster { | ||||||
|             id, |             id, | ||||||
|             attributes: Vec::with_capacity(ATTRS_PER_CLUSTER), |             attributes: Vec::with_capacity(ATTRS_PER_CLUSTER), | ||||||
|  | @ -118,7 +118,7 @@ impl Cluster { | ||||||
|         Ok(c) |         Ok(c) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn id(&self) -> u32 { |     pub fn id(&self) -> ClusterId { | ||||||
|         self.id |         self.id | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -167,18 +167,18 @@ impl Cluster { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_attribute_index(&self, attr_id: u16) -> Option<usize> { |     fn get_attribute_index(&self, attr_id: AttrId) -> Option<usize> { | ||||||
|         self.attributes.iter().position(|c| c.id == attr_id) |         self.attributes.iter().position(|c| c.id == attr_id) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_attribute(&self, attr_id: u16) -> Result<&Attribute, Error> { |     fn get_attribute(&self, attr_id: AttrId) -> Result<&Attribute, Error> { | ||||||
|         let index = self |         let index = self | ||||||
|             .get_attribute_index(attr_id) |             .get_attribute_index(attr_id) | ||||||
|             .ok_or(Error::AttributeNotFound)?; |             .ok_or(Error::AttributeNotFound)?; | ||||||
|         Ok(&self.attributes[index]) |         Ok(&self.attributes[index]) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_attribute_mut(&mut self, attr_id: u16) -> Result<&mut Attribute, Error> { |     fn get_attribute_mut(&mut self, attr_id: AttrId) -> Result<&mut Attribute, Error> { | ||||||
|         let index = self |         let index = self | ||||||
|             .get_attribute_index(attr_id) |             .get_attribute_index(attr_id) | ||||||
|             .ok_or(Error::AttributeNotFound)?; |             .ok_or(Error::AttributeNotFound)?; | ||||||
|  | @ -188,7 +188,7 @@ impl Cluster { | ||||||
|     // Returns a slice of attribute, with either a single attribute or all (wildcard)
 |     // Returns a slice of attribute, with either a single attribute or all (wildcard)
 | ||||||
|     pub fn get_wildcard_attribute( |     pub fn get_wildcard_attribute( | ||||||
|         &self, |         &self, | ||||||
|         attribute: Option<u16>, |         attribute: Option<AttrId>, | ||||||
|     ) -> Result<(&[Attribute], bool), IMStatusCode> { |     ) -> Result<(&[Attribute], bool), IMStatusCode> { | ||||||
|         if let Some(a) = attribute { |         if let Some(a) = attribute { | ||||||
|             if let Some(i) = self.get_attribute_index(a) { |             if let Some(i) = self.get_attribute_index(a) { | ||||||
|  | @ -266,7 +266,7 @@ impl Cluster { | ||||||
|         encoder.encode_status(IMStatusCode::UnsupportedAttribute, 0) |         encoder.encode_status(IMStatusCode::UnsupportedAttribute, 0) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn read_attribute_raw(&self, attr_id: u16) -> Result<&AttrValue, IMStatusCode> { |     pub fn read_attribute_raw(&self, attr_id: AttrId) -> Result<&AttrValue, IMStatusCode> { | ||||||
|         let a = self |         let a = self | ||||||
|             .get_attribute(attr_id) |             .get_attribute(attr_id) | ||||||
|             .map_err(|_| IMStatusCode::UnsupportedAttribute)?; |             .map_err(|_| IMStatusCode::UnsupportedAttribute)?; | ||||||
|  | @ -300,7 +300,7 @@ impl Cluster { | ||||||
| 
 | 
 | ||||||
|     pub fn write_attribute_from_tlv( |     pub fn write_attribute_from_tlv( | ||||||
|         &mut self, |         &mut self, | ||||||
|         attr_id: u16, |         attr_id: AttrId, | ||||||
|         data: &TLVElement, |         data: &TLVElement, | ||||||
|     ) -> Result<(), IMStatusCode> { |     ) -> Result<(), IMStatusCode> { | ||||||
|         let a = self.get_attribute_mut(attr_id)?; |         let a = self.get_attribute_mut(attr_id)?; | ||||||
|  | @ -319,7 +319,7 @@ impl Cluster { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn write_attribute_raw(&mut self, attr_id: u16, value: AttrValue) -> Result<(), Error> { |     pub fn write_attribute_raw(&mut self, attr_id: AttrId, value: AttrValue) -> Result<(), Error> { | ||||||
|         let a = self.get_attribute_mut(attr_id)?; |         let a = self.get_attribute_mut(attr_id)?; | ||||||
|         a.set_value(value).map(|_| { |         a.set_value(value).map(|_| { | ||||||
|             self.cluster_changed(); |             self.cluster_changed(); | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ use crate::{data_model::objects::ClusterType, error::*, interaction_model::core: | ||||||
| 
 | 
 | ||||||
| use std::fmt; | use std::fmt; | ||||||
| 
 | 
 | ||||||
| use super::DeviceType; | use super::{ClusterId, DeviceType}; | ||||||
| 
 | 
 | ||||||
| pub const CLUSTERS_PER_ENDPT: usize = 9; | pub const CLUSTERS_PER_ENDPT: usize = 9; | ||||||
| 
 | 
 | ||||||
|  | @ -51,18 +51,21 @@ impl Endpoint { | ||||||
|         &self.dev_type |         &self.dev_type | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_cluster_index(&self, cluster_id: u32) -> Option<usize> { |     fn get_cluster_index(&self, cluster_id: ClusterId) -> Option<usize> { | ||||||
|         self.clusters.iter().position(|c| c.base().id == cluster_id) |         self.clusters.iter().position(|c| c.base().id == cluster_id) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_cluster(&self, cluster_id: u32) -> Result<&dyn ClusterType, Error> { |     pub fn get_cluster(&self, cluster_id: ClusterId) -> Result<&dyn ClusterType, Error> { | ||||||
|         let index = self |         let index = self | ||||||
|             .get_cluster_index(cluster_id) |             .get_cluster_index(cluster_id) | ||||||
|             .ok_or(Error::ClusterNotFound)?; |             .ok_or(Error::ClusterNotFound)?; | ||||||
|         Ok(self.clusters[index].as_ref()) |         Ok(self.clusters[index].as_ref()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_cluster_mut(&mut self, cluster_id: u32) -> Result<&mut dyn ClusterType, Error> { |     pub fn get_cluster_mut( | ||||||
|  |         &mut self, | ||||||
|  |         cluster_id: ClusterId, | ||||||
|  |     ) -> Result<&mut dyn ClusterType, Error> { | ||||||
|         let index = self |         let index = self | ||||||
|             .get_cluster_index(cluster_id) |             .get_cluster_index(cluster_id) | ||||||
|             .ok_or(Error::ClusterNotFound)?; |             .ok_or(Error::ClusterNotFound)?; | ||||||
|  | @ -72,7 +75,7 @@ impl Endpoint { | ||||||
|     // Returns a slice of clusters, with either a single cluster or all (wildcard)
 |     // Returns a slice of clusters, with either a single cluster or all (wildcard)
 | ||||||
|     pub fn get_wildcard_clusters( |     pub fn get_wildcard_clusters( | ||||||
|         &self, |         &self, | ||||||
|         cluster: Option<u32>, |         cluster: Option<ClusterId>, | ||||||
|     ) -> Result<(&BoxedClusters, bool), IMStatusCode> { |     ) -> Result<(&BoxedClusters, bool), IMStatusCode> { | ||||||
|         if let Some(c) = cluster { |         if let Some(c) = cluster { | ||||||
|             if let Some(i) = self.get_cluster_index(c) { |             if let Some(i) = self.get_cluster_index(c) { | ||||||
|  | @ -88,7 +91,7 @@ impl Endpoint { | ||||||
|     // Returns a slice of clusters, with either a single cluster or all (wildcard)
 |     // Returns a slice of clusters, with either a single cluster or all (wildcard)
 | ||||||
|     pub fn get_wildcard_clusters_mut( |     pub fn get_wildcard_clusters_mut( | ||||||
|         &mut self, |         &mut self, | ||||||
|         cluster: Option<u32>, |         cluster: Option<ClusterId>, | ||||||
|     ) -> Result<(&mut BoxedClusters, bool), IMStatusCode> { |     ) -> Result<(&mut BoxedClusters, bool), IMStatusCode> { | ||||||
|         if let Some(c) = cluster { |         if let Some(c) = cluster { | ||||||
|             if let Some(i) = self.get_cluster_index(c) { |             if let Some(i) = self.get_cluster_index(c) { | ||||||
|  |  | ||||||
|  | @ -15,6 +15,11 @@ | ||||||
|  *    limitations under the License. |  *    limitations under the License. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | pub type EndptId = u16; | ||||||
|  | pub type ClusterId = u32; | ||||||
|  | pub type AttrId = u16; | ||||||
|  | pub type CmdId = u32; | ||||||
|  | 
 | ||||||
| mod attribute; | mod attribute; | ||||||
| pub use attribute::*; | pub use attribute::*; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -23,10 +23,10 @@ use crate::{ | ||||||
| }; | }; | ||||||
| use std::fmt; | use std::fmt; | ||||||
| 
 | 
 | ||||||
| use super::DeviceType; | use super::{ClusterId, DeviceType, EndptId}; | ||||||
| 
 | 
 | ||||||
| pub trait ChangeConsumer { | pub trait ChangeConsumer { | ||||||
|     fn endpoint_added(&self, id: u16, endpoint: &mut Endpoint) -> Result<(), Error>; |     fn endpoint_added(&self, id: EndptId, endpoint: &mut Endpoint) -> Result<(), Error>; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub const ENDPTS_PER_ACC: usize = 3; | pub const ENDPTS_PER_ACC: usize = 3; | ||||||
|  | @ -61,7 +61,7 @@ impl Node { | ||||||
|         self.changes_cb = Some(consumer); |         self.changes_cb = Some(consumer); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn add_endpoint(&mut self, dev_type: DeviceType) -> Result<u32, Error> { |     pub fn add_endpoint(&mut self, dev_type: DeviceType) -> Result<EndptId, Error> { | ||||||
|         let index = self |         let index = self | ||||||
|             .endpoints |             .endpoints | ||||||
|             .iter() |             .iter() | ||||||
|  | @ -69,13 +69,13 @@ impl Node { | ||||||
|             .ok_or(Error::NoSpace)?; |             .ok_or(Error::NoSpace)?; | ||||||
|         let mut endpoint = Endpoint::new(dev_type)?; |         let mut endpoint = Endpoint::new(dev_type)?; | ||||||
|         if let Some(cb) = &self.changes_cb { |         if let Some(cb) = &self.changes_cb { | ||||||
|             cb.endpoint_added(index as u16, &mut endpoint)?; |             cb.endpoint_added(index as EndptId, &mut endpoint)?; | ||||||
|         } |         } | ||||||
|         self.endpoints[index] = Some(endpoint); |         self.endpoints[index] = Some(endpoint); | ||||||
|         Ok(index as u32) |         Ok(index as EndptId) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_endpoint(&self, endpoint_id: u16) -> Result<&Endpoint, Error> { |     pub fn get_endpoint(&self, endpoint_id: EndptId) -> Result<&Endpoint, Error> { | ||||||
|         if (endpoint_id as usize) < ENDPTS_PER_ACC { |         if (endpoint_id as usize) < ENDPTS_PER_ACC { | ||||||
|             let endpoint = self.endpoints[endpoint_id as usize] |             let endpoint = self.endpoints[endpoint_id as usize] | ||||||
|                 .as_ref() |                 .as_ref() | ||||||
|  | @ -86,7 +86,7 @@ impl Node { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_endpoint_mut(&mut self, endpoint_id: u16) -> Result<&mut Endpoint, Error> { |     pub fn get_endpoint_mut(&mut self, endpoint_id: EndptId) -> Result<&mut Endpoint, Error> { | ||||||
|         if (endpoint_id as usize) < ENDPTS_PER_ACC { |         if (endpoint_id as usize) < ENDPTS_PER_ACC { | ||||||
|             let endpoint = self.endpoints[endpoint_id as usize] |             let endpoint = self.endpoints[endpoint_id as usize] | ||||||
|                 .as_mut() |                 .as_mut() | ||||||
|  | @ -97,17 +97,21 @@ impl Node { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_cluster_mut(&mut self, e: u16, c: u32) -> Result<&mut dyn ClusterType, Error> { |     pub fn get_cluster_mut( | ||||||
|  |         &mut self, | ||||||
|  |         e: EndptId, | ||||||
|  |         c: ClusterId, | ||||||
|  |     ) -> Result<&mut dyn ClusterType, Error> { | ||||||
|         self.get_endpoint_mut(e)?.get_cluster_mut(c) |         self.get_endpoint_mut(e)?.get_cluster_mut(c) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_cluster(&self, e: u16, c: u32) -> Result<&dyn ClusterType, Error> { |     pub fn get_cluster(&self, e: EndptId, c: ClusterId) -> Result<&dyn ClusterType, Error> { | ||||||
|         self.get_endpoint(e)?.get_cluster(c) |         self.get_endpoint(e)?.get_cluster(c) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn add_cluster( |     pub fn add_cluster( | ||||||
|         &mut self, |         &mut self, | ||||||
|         endpoint_id: u32, |         endpoint_id: EndptId, | ||||||
|         cluster: Box<dyn ClusterType>, |         cluster: Box<dyn ClusterType>, | ||||||
|     ) -> Result<(), Error> { |     ) -> Result<(), Error> { | ||||||
|         let endpoint_id = endpoint_id as usize; |         let endpoint_id = endpoint_id as usize; | ||||||
|  | @ -124,7 +128,7 @@ impl Node { | ||||||
|     // Returns a slice of endpoints, with either a single endpoint or all (wildcard)
 |     // Returns a slice of endpoints, with either a single endpoint or all (wildcard)
 | ||||||
|     pub fn get_wildcard_endpoints( |     pub fn get_wildcard_endpoints( | ||||||
|         &self, |         &self, | ||||||
|         endpoint: Option<u16>, |         endpoint: Option<EndptId>, | ||||||
|     ) -> Result<(&BoxedEndpoints, usize, bool), IMStatusCode> { |     ) -> Result<(&BoxedEndpoints, usize, bool), IMStatusCode> { | ||||||
|         if let Some(e) = endpoint { |         if let Some(e) = endpoint { | ||||||
|             let e = e as usize; |             let e = e as usize; | ||||||
|  | @ -140,7 +144,7 @@ impl Node { | ||||||
| 
 | 
 | ||||||
|     pub fn get_wildcard_endpoints_mut( |     pub fn get_wildcard_endpoints_mut( | ||||||
|         &mut self, |         &mut self, | ||||||
|         endpoint: Option<u16>, |         endpoint: Option<EndptId>, | ||||||
|     ) -> Result<(&mut BoxedEndpoints, usize, bool), IMStatusCode> { |     ) -> Result<(&mut BoxedEndpoints, usize, bool), IMStatusCode> { | ||||||
|         if let Some(e) = endpoint { |         if let Some(e) = endpoint { | ||||||
|             let e = e as usize; |             let e = e as usize; | ||||||
|  | @ -171,7 +175,7 @@ impl Node { | ||||||
|         let (endpoints, mut endpoint_id, wildcard) = self.get_wildcard_endpoints(path.endpoint)?; |         let (endpoints, mut endpoint_id, wildcard) = self.get_wildcard_endpoints(path.endpoint)?; | ||||||
|         for e in endpoints.iter() { |         for e in endpoints.iter() { | ||||||
|             if let Some(e) = e { |             if let Some(e) = e { | ||||||
|                 current_path.endpoint = Some(endpoint_id as u16); |                 current_path.endpoint = Some(endpoint_id as EndptId); | ||||||
|                 f(¤t_path, e.as_ref()) |                 f(¤t_path, e.as_ref()) | ||||||
|                     .or_else(|e| if !wildcard { Err(e) } else { Ok(()) })?; |                     .or_else(|e| if !wildcard { Err(e) } else { Ok(()) })?; | ||||||
|             } |             } | ||||||
|  | @ -202,7 +206,7 @@ impl Node { | ||||||
|             self.get_wildcard_endpoints_mut(path.endpoint)?; |             self.get_wildcard_endpoints_mut(path.endpoint)?; | ||||||
|         for e in endpoints.iter_mut() { |         for e in endpoints.iter_mut() { | ||||||
|             if let Some(e) = e { |             if let Some(e) = e { | ||||||
|                 current_path.endpoint = Some(endpoint_id as u16); |                 current_path.endpoint = Some(endpoint_id as EndptId); | ||||||
|                 f(¤t_path, e.as_mut()) |                 f(¤t_path, e.as_mut()) | ||||||
|                     .or_else(|e| if !wildcard { Err(e) } else { Ok(()) })?; |                     .or_else(|e| if !wildcard { Err(e) } else { Ok(()) })?; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -37,12 +37,12 @@ pub enum Attributes { | ||||||
| 
 | 
 | ||||||
| pub struct DescriptorCluster { | pub struct DescriptorCluster { | ||||||
|     base: Cluster, |     base: Cluster, | ||||||
|     endpoint_id: u16, |     endpoint_id: EndptId, | ||||||
|     data_model: DataModel, |     data_model: DataModel, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl DescriptorCluster { | impl DescriptorCluster { | ||||||
|     pub fn new(endpoint_id: u16, data_model: DataModel) -> Result<Box<Self>, Error> { |     pub fn new(endpoint_id: EndptId, data_model: DataModel) -> Result<Box<Self>, Error> { | ||||||
|         let mut c = Box::new(DescriptorCluster { |         let mut c = Box::new(DescriptorCluster { | ||||||
|             endpoint_id, |             endpoint_id, | ||||||
|             data_model, |             data_model, | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|  |     data_model::objects::{ClusterId, EndptId}, | ||||||
|     error::Error, |     error::Error, | ||||||
|     tlv::{FromTLV, TLVElement, TLVWriter, TagType, ToTLV}, |     tlv::{FromTLV, TLVElement, TLVWriter, TagType, ToTLV}, | ||||||
| }; | }; | ||||||
|  | @ -25,13 +26,13 @@ use crate::{ | ||||||
| #[derive(Default, Clone, Copy, Debug, PartialEq, FromTLV, ToTLV)] | #[derive(Default, Clone, Copy, Debug, PartialEq, FromTLV, ToTLV)] | ||||||
| #[tlvargs(datatype = "list")] | #[tlvargs(datatype = "list")] | ||||||
| pub struct GenericPath { | pub struct GenericPath { | ||||||
|     pub endpoint: Option<u16>, |     pub endpoint: Option<EndptId>, | ||||||
|     pub cluster: Option<u32>, |     pub cluster: Option<ClusterId>, | ||||||
|     pub leaf: Option<u32>, |     pub leaf: Option<u32>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl GenericPath { | impl GenericPath { | ||||||
|     pub fn new(endpoint: Option<u16>, cluster: Option<u32>, leaf: Option<u32>) -> Self { |     pub fn new(endpoint: Option<EndptId>, cluster: Option<ClusterId>, leaf: Option<u32>) -> Self { | ||||||
|         Self { |         Self { | ||||||
|             endpoint, |             endpoint, | ||||||
|             cluster, |             cluster, | ||||||
|  | @ -40,7 +41,7 @@ impl GenericPath { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// Returns Ok, if the path is non wildcard, otherwise returns an error
 |     /// Returns Ok, if the path is non wildcard, otherwise returns an error
 | ||||||
|     pub fn not_wildcard(&self) -> Result<(u16, u32, u32), Error> { |     pub fn not_wildcard(&self) -> Result<(EndptId, ClusterId, u32), Error> { | ||||||
|         match *self { |         match *self { | ||||||
|             GenericPath { |             GenericPath { | ||||||
|                 endpoint: Some(e), |                 endpoint: Some(e), | ||||||
|  | @ -257,7 +258,7 @@ pub mod ib { | ||||||
|     use std::fmt::Debug; |     use std::fmt::Debug; | ||||||
| 
 | 
 | ||||||
|     use crate::{ |     use crate::{ | ||||||
|         data_model::objects::{AttrDetails, EncodeValue}, |         data_model::objects::{AttrDetails, AttrId, ClusterId, EncodeValue, EndptId}, | ||||||
|         error::Error, |         error::Error, | ||||||
|         interaction_model::core::IMStatusCode, |         interaction_model::core::IMStatusCode, | ||||||
|         tlv::{FromTLV, Nullable, TLVElement, TLVWriter, TagType, ToTLV}, |         tlv::{FromTLV, Nullable, TLVElement, TLVWriter, TagType, ToTLV}, | ||||||
|  | @ -275,7 +276,12 @@ pub mod ib { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     impl<'a> InvResp<'a> { |     impl<'a> InvResp<'a> { | ||||||
|         pub fn cmd_new(endpoint: u16, cluster: u32, cmd: u16, data: EncodeValue<'a>) -> Self { |         pub fn cmd_new( | ||||||
|  |             endpoint: EndptId, | ||||||
|  |             cluster: ClusterId, | ||||||
|  |             cmd: u16, | ||||||
|  |             data: EncodeValue<'a>, | ||||||
|  |         ) -> Self { | ||||||
|             Self::Cmd(CmdData::new( |             Self::Cmd(CmdData::new( | ||||||
|                 CmdPath::new(Some(endpoint), Some(cluster), Some(cmd)), |                 CmdPath::new(Some(endpoint), Some(cluster), Some(cmd)), | ||||||
|                 data, |                 data, | ||||||
|  | @ -448,9 +454,9 @@ pub mod ib { | ||||||
|     pub struct AttrPath { |     pub struct AttrPath { | ||||||
|         pub tag_compression: Option<bool>, |         pub tag_compression: Option<bool>, | ||||||
|         pub node: Option<u64>, |         pub node: Option<u64>, | ||||||
|         pub endpoint: Option<u16>, |         pub endpoint: Option<EndptId>, | ||||||
|         pub cluster: Option<u32>, |         pub cluster: Option<ClusterId>, | ||||||
|         pub attr: Option<u16>, |         pub attr: Option<AttrId>, | ||||||
|         pub list_index: Option<Nullable<u16>>, |         pub list_index: Option<Nullable<u16>>, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -490,7 +496,11 @@ pub mod ib { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     impl CmdPath { |     impl CmdPath { | ||||||
|         pub fn new(endpoint: Option<u16>, cluster: Option<u32>, command: Option<u16>) -> Self { |         pub fn new( | ||||||
|  |             endpoint: Option<EndptId>, | ||||||
|  |             cluster: Option<ClusterId>, | ||||||
|  |             command: Option<u16>, | ||||||
|  |         ) -> Self { | ||||||
|             Self { |             Self { | ||||||
|                 path: GenericPath { |                 path: GenericPath { | ||||||
|                     endpoint, |                     endpoint, | ||||||
|  | @ -525,8 +535,8 @@ pub mod ib { | ||||||
|     #[derive(FromTLV, ToTLV, Copy, Clone)] |     #[derive(FromTLV, ToTLV, Copy, Clone)] | ||||||
|     pub struct ClusterPath { |     pub struct ClusterPath { | ||||||
|         pub node: Option<u64>, |         pub node: Option<u64>, | ||||||
|         pub endpoint: u16, |         pub endpoint: EndptId, | ||||||
|         pub cluster: u32, |         pub cluster: ClusterId, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     #[derive(FromTLV, ToTLV, Copy, Clone)] |     #[derive(FromTLV, ToTLV, Copy, Clone)] | ||||||
|  | @ -539,8 +549,8 @@ pub mod ib { | ||||||
|     #[tlvargs(datatype = "list")] |     #[tlvargs(datatype = "list")] | ||||||
|     pub struct EventPath { |     pub struct EventPath { | ||||||
|         pub node: Option<u64>, |         pub node: Option<u64>, | ||||||
|         pub endpoint: Option<u16>, |         pub endpoint: Option<EndptId>, | ||||||
|         pub cluster: Option<u32>, |         pub cluster: Option<ClusterId>, | ||||||
|         pub event: Option<u32>, |         pub event: Option<u32>, | ||||||
|         pub is_urgent: Option<bool>, |         pub is_urgent: Option<bool>, | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue