ble_data_struct/
lib.rs

1//! BLE data struct.
2pub mod data_types {
3    //! EIR/AD/SRD/ACAD/OOB module.
4    pub mod advertising_interval;
5    pub mod advertising_interval_long;
6    pub mod appearance;
7    pub mod big_info;
8    pub mod broadcast_code;
9    pub mod channel_map_update_indication;
10    pub mod class_of_device;
11    pub mod complete_list_of_128bit_service_uuids;
12    pub mod complete_list_of_16bit_service_uuids;
13    pub mod complete_list_of_32bit_service_uuids;
14    pub mod complete_local_name;
15    pub mod data_type;
16    pub mod data_type_parser;
17    pub mod encrypted_data;
18    pub mod flags;
19    pub mod incomplete_list_of_128bit_service_uuids;
20    pub mod incomplete_list_of_16bit_service_uuids;
21    pub mod incomplete_list_of_32bit_service_uuids;
22    pub mod le_bluetooth_device_address;
23    pub mod le_role;
24    pub mod le_secure_connections_confirmation_value;
25    pub mod le_secure_connections_random_value;
26    pub mod le_supported_features;
27    pub mod list_of_128bit_service_solicitation_uuids;
28    pub mod list_of_16bit_service_solicitation_uuids;
29    pub mod list_of_32bit_service_solicitation_uuids;
30    pub mod manufacturer_specific_data;
31    pub mod periodic_advertising_response_timing_information;
32    pub mod peripheral_connection_interval_range;
33    pub mod public_target_address;
34    pub mod random_target_address;
35    pub mod secure_simple_pairing_hash_c192;
36    pub mod secure_simple_pairing_hash_c256;
37    pub mod secure_simple_pairing_randomizer_r192;
38    pub mod secure_simple_pairing_randomizer_r256;
39    pub mod security_manager_oob;
40    pub mod security_manager_tk_value;
41    pub mod service_data_128bit_uuid;
42    pub mod service_data_16bit_uuid;
43    pub mod service_data_32bit_uuid;
44    pub mod shortened_local_name;
45    pub mod tx_power_level;
46    pub mod uniform_resource_identifier;
47}
48
49pub mod descriptors {
50    //! descriptor module.
51    pub mod characteristic_extended_properties;
52    pub mod characteristic_user_description;
53    pub mod client_characteristic_configuration;
54    pub mod server_characteristic_configuration;
55    pub mod characteristic_presentation_format;
56    pub mod characteristic_aggregate_format;
57}
58
59/// for Windows
60#[cfg(target_os = "windows")]
61pub mod windows {
62    pub mod data_types {
63        pub mod windows_data_type_parser;
64    }
65    pub mod descriptors {
66        pub mod windows_characteristic_aggregate_format;
67        pub mod windows_characteristic_extended_properties;
68        pub mod windows_characteristic_presentation_format;
69        pub mod windows_characteristic_user_description;
70        pub mod windows_client_characteristic_configuration;
71        pub mod windows_server_characteristic_configuration;
72    }
73    pub mod buffer;
74}
75
76use uuid::{uuid, Uuid};
77
78/// BASE UUID.
79///
80/// 00000000-0000-1000-8000-00805F9B34FB
81pub const BASE_UUID: Uuid = uuid!("00000000-0000-1000-8000-00805F9B34FB");
82
83/// Create [`Uuid`] from [`u16`].
84///
85/// # Examples
86///
87/// ```
88/// use ble_data_struct::uuid_from_u16;
89/// use uuid::uuid;
90///
91/// assert_eq!(
92///     uuid!("00001234-0000-1000-8000-00805F9B34FB"),
93///     uuid_from_u16(0x1234)
94/// );
95/// ```
96pub fn uuid_from_u16(value: u16) -> Uuid {
97    let (d1, d2, d3, d4) = BASE_UUID.as_fields();
98    Uuid::from_fields(d1 | value as u32, d2, d3, d4)
99}
100
101/// Create [`Uuid`] from [`u32`].
102///
103/// # Examples
104///
105/// ```
106/// use ble_data_struct::uuid_from_u32;
107/// use uuid::uuid;
108///
109/// assert_eq!(
110///     uuid!("12345678-0000-1000-8000-00805F9B34FB"),
111///     uuid_from_u32(0x12345678)
112/// );
113/// ```
114pub fn uuid_from_u32(value: u32) -> Uuid {
115    let (d1, d2, d3, d4) = BASE_UUID.as_fields();
116    Uuid::from_fields(d1 | value, d2, d3, d4)
117}
118
119/// Trait for Assigned 16bit-UUID.
120pub trait Uuid16bit {
121    /// Assigned 16bit-UUID
122    fn uuid_16bit() -> u16;
123}
124
125#[cfg(test)]
126mod tests {
127    use crate::{uuid_from_u16, uuid_from_u32};
128    use uuid::uuid;
129
130    #[test]
131    fn test_uuid_from_u16() {
132        assert_eq!(
133            uuid!("00001234-0000-1000-8000-00805F9B34FB"),
134            uuid_from_u16(0x1234)
135        );
136    }
137
138    #[test]
139    fn test_uuid_from_u32() {
140        assert_eq!(
141            uuid!("12345678-0000-1000-8000-00805F9B34FB"),
142            uuid_from_u32(0x12345678)
143        );
144    }
145}