1pub mod data_types {
3 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 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#[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
78pub const BASE_UUID: Uuid = uuid!("00000000-0000-1000-8000-00805F9B34FB");
82
83pub 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
101pub 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
119pub trait Uuid16bit {
121 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}