OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/bluetooth/BluetoothUUID.h" | 5 #include "modules/bluetooth/BluetoothUUID.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/ScriptRegexp.h" | 8 #include "bindings/core/v8/ScriptRegexp.h" |
9 #include "core/dom/ExceptionCode.h" | 9 #include "core/dom/ExceptionCode.h" |
10 #include "platform/UUID.h" | 10 #include "platform/UUID.h" |
11 #include "wtf/HashMap.h" | 11 #include "wtf/HashMap.h" |
12 #include "wtf/HexNumber.h" | 12 #include "wtf/HexNumber.h" |
13 #include "wtf/text/StringBuilder.h" | 13 #include "wtf/text/StringBuilder.h" |
14 #include "wtf/text/WTFString.h" | 14 #include "wtf/text/WTFString.h" |
15 | 15 |
16 namespace blink { | 16 namespace blink { |
17 | 17 |
18 namespace { | 18 namespace { |
19 | 19 |
20 typedef WTF::HashMap<String, unsigned> NameToAssignedNumberMap; | 20 typedef WTF::HashMap<String, unsigned> NameToAssignedNumberMap; |
21 | 21 |
22 enum class GATTAttribute { Service, Characteristic, Descriptor }; | 22 enum class GATTAttribute { Service, Characteristic, Descriptor }; |
23 | 23 |
24 NameToAssignedNumberMap* getAssignedNumberToServiceNameMap() { | 24 NameToAssignedNumberMap* getAssignedNumberToServiceNameMap() { |
25 DEFINE_THREAD_SAFE_STATIC_LOCAL(NameToAssignedNumberMap, servicesMap, []() { | 25 DEFINE_THREAD_SAFE_STATIC_LOCAL(NameToAssignedNumberMap, servicesMap, []() { |
26 // https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx | 26 // https://www.bluetooth.com/specifications/gatt/services |
27 NameToAssignedNumberMap* services = new NameToAssignedNumberMap(); | 27 NameToAssignedNumberMap* services = new NameToAssignedNumberMap(); |
28 services->add("alert_notification", 0x1811); | 28 services->add("alert_notification", 0x1811); |
29 services->add("automation_io", 0x1815); | 29 services->add("automation_io", 0x1815); |
30 services->add("battery_service", 0x180F); | 30 services->add("battery_service", 0x180F); |
31 services->add("blood_pressure", 0x1810); | 31 services->add("blood_pressure", 0x1810); |
32 services->add("body_composition", 0x181B); | 32 services->add("body_composition", 0x181B); |
33 services->add("bond_management", 0x181E); | 33 services->add("bond_management", 0x181E); |
34 services->add("continuous_glucose_monitoring", 0x181F); | 34 services->add("continuous_glucose_monitoring", 0x181F); |
35 services->add("current_time", 0x1805); | 35 services->add("current_time", 0x1805); |
36 services->add("cycling_power", 0x1818); | 36 services->add("cycling_power", 0x1818); |
37 services->add("cycling_speed_and_cadence", 0x1816); | 37 services->add("cycling_speed_and_cadence", 0x1816); |
38 services->add("device_information", 0x180A); | 38 services->add("device_information", 0x180A); |
39 services->add("environmental_sensing", 0x181A); | 39 services->add("environmental_sensing", 0x181A); |
40 services->add("fitness_machine", 0x1826); | |
40 services->add("generic_access", 0x1800); | 41 services->add("generic_access", 0x1800); |
41 services->add("generic_attribute", 0x1801); | 42 services->add("generic_attribute", 0x1801); |
42 services->add("glucose", 0x1808); | 43 services->add("glucose", 0x1808); |
43 services->add("health_thermometer", 0x1809); | 44 services->add("health_thermometer", 0x1809); |
44 services->add("heart_rate", 0x180D); | 45 services->add("heart_rate", 0x180D); |
46 services->add("http_proxy", 0x1823); | |
45 services->add("human_interface_device", 0x1812); | 47 services->add("human_interface_device", 0x1812); |
46 services->add("immediate_alert", 0x1802); | 48 services->add("immediate_alert", 0x1802); |
47 services->add("indoor_positioning", 0x1821); | 49 services->add("indoor_positioning", 0x1821); |
48 services->add("internet_protocol_support", 0x1820); | 50 services->add("internet_protocol_support", 0x1820); |
49 services->add("link_loss", 0x1803); | 51 services->add("link_loss", 0x1803); |
50 services->add("location_and_navigation", 0x1819); | 52 services->add("location_and_navigation", 0x1819); |
51 services->add("next_dst_change", 0x1807); | 53 services->add("next_dst_change", 0x1807); |
54 services->add("object_transfer", 0x1825); | |
52 services->add("phone_alert_status", 0x180E); | 55 services->add("phone_alert_status", 0x180E); |
53 services->add("pulse_oximeter", 0x1822); | 56 services->add("pulse_oximeter", 0x1822); |
54 services->add("reference_time_update", 0x1806); | 57 services->add("reference_time_update", 0x1806); |
55 services->add("running_speed_and_cadence", 0x1814); | 58 services->add("running_speed_and_cadence", 0x1814); |
56 services->add("scan_parameters", 0x1813); | 59 services->add("scan_parameters", 0x1813); |
60 services->add("transport_discovery", 0x1824); | |
57 services->add("tx_power", 0x1804); | 61 services->add("tx_power", 0x1804); |
58 services->add("user_data", 0x181C); | 62 services->add("user_data", 0x181C); |
59 services->add("weight_scale", 0x181D); | 63 services->add("weight_scale", 0x181D); |
60 return services; | 64 return services; |
61 }()); | 65 }()); |
62 | 66 |
63 return &servicesMap; | 67 return &servicesMap; |
64 } | 68 } |
65 | 69 |
66 NameToAssignedNumberMap* getAssignedNumberForCharacteristicNameMap() { | 70 NameToAssignedNumberMap* getAssignedNumberForCharacteristicNameMap() { |
67 DEFINE_THREAD_SAFE_STATIC_LOCAL( | 71 DEFINE_THREAD_SAFE_STATIC_LOCAL( |
68 NameToAssignedNumberMap, characteristicsMap, []() { | 72 NameToAssignedNumberMap, characteristicsMap, []() { |
69 // https://developer.bluetooth.org/gatt/characteristics/Pages/Characteri sticsHome.aspx | 73 // https://www.bluetooth.com/specifications/gatt/characteristics |
70 NameToAssignedNumberMap* characteristics = | 74 NameToAssignedNumberMap* characteristics = |
71 new NameToAssignedNumberMap(); | 75 new NameToAssignedNumberMap(); |
72 characteristics->add("aerobic_heart_rate_lower_limit", 0x2A7E); | 76 characteristics->add("aerobic_heart_rate_lower_limit", 0x2A7E); |
73 characteristics->add("aerobic_heart_rate_upper_limit", 0x2A84); | 77 characteristics->add("aerobic_heart_rate_upper_limit", 0x2A84); |
74 characteristics->add("aerobic_threshold", 0x2A7F); | 78 characteristics->add("aerobic_threshold", 0x2A7F); |
75 characteristics->add("age", 0x2A80); | 79 characteristics->add("age", 0x2A80); |
76 characteristics->add("aggregate", 0x2A5A); | 80 characteristics->add("aggregate", 0x2A5A); |
77 characteristics->add("alert_category_id", 0x2A43); | 81 characteristics->add("alert_category_id", 0x2A43); |
78 characteristics->add("alert_category_id_bit_mask", 0x2A42); | 82 characteristics->add("alert_category_id_bit_mask", 0x2A42); |
79 characteristics->add("alert_level", 0x2A06); | 83 characteristics->add("alert_level", 0x2A06); |
(...skipping 19 matching lines...) Expand all Loading... | |
99 characteristics->add("boot_keyboard_input_report", 0x2A22); | 103 characteristics->add("boot_keyboard_input_report", 0x2A22); |
100 characteristics->add("boot_keyboard_output_report", 0x2A32); | 104 characteristics->add("boot_keyboard_output_report", 0x2A32); |
101 characteristics->add("boot_mouse_input_report", 0x2A33); | 105 characteristics->add("boot_mouse_input_report", 0x2A33); |
102 characteristics->add("gap.central_address_resolution_support", 0x2AA6); | 106 characteristics->add("gap.central_address_resolution_support", 0x2AA6); |
103 characteristics->add("cgm_feature", 0x2AA8); | 107 characteristics->add("cgm_feature", 0x2AA8); |
104 characteristics->add("cgm_measurement", 0x2AA7); | 108 characteristics->add("cgm_measurement", 0x2AA7); |
105 characteristics->add("cgm_session_run_time", 0x2AAB); | 109 characteristics->add("cgm_session_run_time", 0x2AAB); |
106 characteristics->add("cgm_session_start_time", 0x2AAA); | 110 characteristics->add("cgm_session_start_time", 0x2AAA); |
107 characteristics->add("cgm_specific_ops_control_point", 0x2AAC); | 111 characteristics->add("cgm_specific_ops_control_point", 0x2AAC); |
108 characteristics->add("cgm_status", 0x2AA9); | 112 characteristics->add("cgm_status", 0x2AA9); |
113 characteristics->add("cross_trainer_data", 0x2ACE); | |
109 characteristics->add("csc_feature", 0x2A5C); | 114 characteristics->add("csc_feature", 0x2A5C); |
110 characteristics->add("csc_measurement", 0x2A5B); | 115 characteristics->add("csc_measurement", 0x2A5B); |
111 characteristics->add("current_time", 0x2A2B); | 116 characteristics->add("current_time", 0x2A2B); |
112 characteristics->add("cycling_power_control_point", 0x2A66); | 117 characteristics->add("cycling_power_control_point", 0x2A66); |
113 characteristics->add("cycling_power_feature", 0x2A65); | 118 characteristics->add("cycling_power_feature", 0x2A65); |
114 characteristics->add("cycling_power_measurement", 0x2A63); | 119 characteristics->add("cycling_power_measurement", 0x2A63); |
115 characteristics->add("cycling_power_vector", 0x2A64); | 120 characteristics->add("cycling_power_vector", 0x2A64); |
116 characteristics->add("database_change_increment", 0x2A99); | 121 characteristics->add("database_change_increment", 0x2A99); |
117 characteristics->add("date_of_birth", 0x2A85); | 122 characteristics->add("date_of_birth", 0x2A85); |
118 characteristics->add("date_of_threshold_assessment", 0x2A86); | 123 characteristics->add("date_of_threshold_assessment", 0x2A86); |
119 characteristics->add("date_time", 0x2A08); | 124 characteristics->add("date_time", 0x2A08); |
120 characteristics->add("day_date_time", 0x2A0A); | 125 characteristics->add("day_date_time", 0x2A0A); |
121 characteristics->add("day_of_week", 0x2A09); | 126 characteristics->add("day_of_week", 0x2A09); |
122 characteristics->add("descriptor_value_changed", 0x2A7D); | 127 characteristics->add("descriptor_value_changed", 0x2A7D); |
123 characteristics->add("gap.device_name", 0x2A00); | 128 characteristics->add("gap.device_name", 0x2A00); |
124 characteristics->add("dew_point", 0x2A7B); | 129 characteristics->add("dew_point", 0x2A7B); |
125 characteristics->add("digital", 0x2A56); | 130 characteristics->add("digital", 0x2A56); |
126 characteristics->add("dst_offset", 0x2A0D); | 131 characteristics->add("dst_offset", 0x2A0D); |
127 characteristics->add("elevation", 0x2A6C); | 132 characteristics->add("elevation", 0x2A6C); |
128 characteristics->add("email_address", 0x2A87); | 133 characteristics->add("email_address", 0x2A87); |
129 characteristics->add("exact_time_256", 0x2A0C); | 134 characteristics->add("exact_time_256", 0x2A0C); |
130 characteristics->add("fat_burn_heart_rate_lower_limit", 0x2A88); | 135 characteristics->add("fat_burn_heart_rate_lower_limit", 0x2A88); |
131 characteristics->add("fat_burn_heart_rate_upper_limit", 0x2A89); | 136 characteristics->add("fat_burn_heart_rate_upper_limit", 0x2A89); |
132 characteristics->add("firmware_revision_string", 0x2A26); | 137 characteristics->add("firmware_revision_string", 0x2A26); |
133 characteristics->add("first_name", 0x2A8A); | 138 characteristics->add("first_name", 0x2A8A); |
139 characteristics->add("fitness_machine_control_point", 0x2AD9); | |
140 characteristics->add("fitness_machine_feature", 0x2ACC); | |
141 characteristics->add("fitness_machine_status", 0x2ADA); | |
134 characteristics->add("five_zone_heart_rate_limits", 0x2A8B); | 142 characteristics->add("five_zone_heart_rate_limits", 0x2A8B); |
135 characteristics->add("floor_number", 0x2AB2); | 143 characteristics->add("floor_number", 0x2AB2); |
136 characteristics->add("gender", 0x2A8C); | 144 characteristics->add("gender", 0x2A8C); |
137 characteristics->add("glucose_feature", 0x2A51); | 145 characteristics->add("glucose_feature", 0x2A51); |
138 characteristics->add("glucose_measurement", 0x2A18); | 146 characteristics->add("glucose_measurement", 0x2A18); |
139 characteristics->add("glucose_measurement_context", 0x2A34); | 147 characteristics->add("glucose_measurement_context", 0x2A34); |
140 characteristics->add("gust_factor", 0x2A74); | 148 characteristics->add("gust_factor", 0x2A74); |
141 characteristics->add("hardware_revision_string", 0x2A27); | 149 characteristics->add("hardware_revision_string", 0x2A27); |
142 characteristics->add("heart_rate_control_point", 0x2A39); | 150 characteristics->add("heart_rate_control_point", 0x2A39); |
143 characteristics->add("heart_rate_max", 0x2A8D); | 151 characteristics->add("heart_rate_max", 0x2A8D); |
144 characteristics->add("heart_rate_measurement", 0x2A37); | 152 characteristics->add("heart_rate_measurement", 0x2A37); |
145 characteristics->add("heat_index", 0x2A7A); | 153 characteristics->add("heat_index", 0x2A7A); |
146 characteristics->add("height", 0x2A8E); | 154 characteristics->add("height", 0x2A8E); |
147 characteristics->add("hid_control_point", 0x2A4C); | 155 characteristics->add("hid_control_point", 0x2A4C); |
148 characteristics->add("hid_information", 0x2A4A); | 156 characteristics->add("hid_information", 0x2A4A); |
149 characteristics->add("hip_circumference", 0x2A8F); | 157 characteristics->add("hip_circumference", 0x2A8F); |
158 characteristics->add("http_control_point", 0x2ABA); | |
159 characteristics->add("http_entity_body", 0x2AB9); | |
160 characteristics->add("http_headers", 0x2AB7); | |
161 characteristics->add("http_status_code", 0x2AB8); | |
162 characteristics->add("https_security", 0x2ABB); | |
150 characteristics->add("humidity", 0x2A6F); | 163 characteristics->add("humidity", 0x2A6F); |
151 characteristics->add( | 164 characteristics->add( |
152 "ieee_11073-20601_regulatory_certification_data_list", 0x2A2A); | 165 "ieee_11073-20601_regulatory_certification_data_list", 0x2A2A); |
166 characteristics->add("indoor_bike_data", 0x2AD2); | |
153 characteristics->add("indoor_positioning_configuration", 0x2AAD); | 167 characteristics->add("indoor_positioning_configuration", 0x2AAD); |
154 characteristics->add("intermediate_blood_pressure", 0x2A36); | 168 characteristics->add("intermediate_blood_pressure", 0x2A36); |
155 characteristics->add("intermediate_temperature", 0x2A1E); | 169 characteristics->add("intermediate_temperature", 0x2A1E); |
156 characteristics->add("irradiance", 0x2A77); | 170 characteristics->add("irradiance", 0x2A77); |
157 characteristics->add("language", 0x2AA2); | 171 characteristics->add("language", 0x2AA2); |
158 characteristics->add("last_name", 0x2A90); | 172 characteristics->add("last_name", 0x2A90); |
159 characteristics->add("latitude", 0x2AAE); | 173 characteristics->add("latitude", 0x2AAE); |
160 characteristics->add("ln_control_point", 0x2A6B); | 174 characteristics->add("ln_control_point", 0x2A6B); |
161 characteristics->add("ln_feature", 0x2A6A); | 175 characteristics->add("ln_feature", 0x2A6A); |
162 characteristics->add("local_east_coordinate.xml", 0x2AB1); | 176 characteristics->add("local_east_coordinate.xml", 0x2AB1); |
163 characteristics->add("local_north_coordinate", 0x2AB0); | 177 characteristics->add("local_north_coordinate", 0x2AB0); |
164 characteristics->add("local_time_information", 0x2A0F); | 178 characteristics->add("local_time_information", 0x2A0F); |
165 characteristics->add("location_and_speed", 0x2A67); | 179 characteristics->add("location_and_speed", 0x2A67); |
166 characteristics->add("location_name", 0x2AB5); | 180 characteristics->add("location_name", 0x2AB5); |
167 characteristics->add("longitude", 0x2AAF); | 181 characteristics->add("longitude", 0x2AAF); |
168 characteristics->add("magnetic_declination", 0x2A2C); | 182 characteristics->add("magnetic_declination", 0x2A2C); |
169 characteristics->add("magnetic_flux_density_2D", 0x2AA0); | 183 characteristics->add("magnetic_flux_density_2D", 0x2AA0); |
170 characteristics->add("magnetic_flux_density_3D", 0x2AA1); | 184 characteristics->add("magnetic_flux_density_3D", 0x2AA1); |
171 characteristics->add("manufacturer_name_string", 0x2A29); | 185 characteristics->add("manufacturer_name_string", 0x2A29); |
172 characteristics->add("maximum_recommended_heart_rate", 0x2A91); | 186 characteristics->add("maximum_recommended_heart_rate", 0x2A91); |
173 characteristics->add("measurement_interval", 0x2A21); | 187 characteristics->add("measurement_interval", 0x2A21); |
174 characteristics->add("model_number_string", 0x2A24); | 188 characteristics->add("model_number_string", 0x2A24); |
175 characteristics->add("navigation", 0x2A68); | 189 characteristics->add("navigation", 0x2A68); |
176 characteristics->add("new_alert", 0x2A46); | 190 characteristics->add("new_alert", 0x2A46); |
191 characteristics->add("object_action_control_point", 0x2AC5); | |
192 characteristics->add("object_changed", 0x2AC8); | |
193 characteristics->add("object_first_created", 0x2AC1); | |
194 characteristics->add("object_id", 0x2AC3); | |
195 characteristics->add("object_last_modified", 0x2AC2); | |
196 characteristics->add("object_list_control_point", 0x2AC6); | |
197 characteristics->add("object_list_filter", 0x2AC7); | |
198 characteristics->add("object_name", 0x2ABE); | |
199 characteristics->add("object_properties", 0x2AC4); | |
200 characteristics->add("object_size", 0x2AC0); | |
201 characteristics->add("ots_feature", 0x2ABD); | |
177 characteristics->add("gap.peripheral_preferred_connection_parameters", | 202 characteristics->add("gap.peripheral_preferred_connection_parameters", |
178 0x2A04); | 203 0x2A04); |
179 characteristics->add("gap.peripheral_privacy_flag", 0x2A02); | 204 characteristics->add("gap.peripheral_privacy_flag", 0x2A02); |
180 characteristics->add("plx_continuous_measurement", 0x2A5F); | 205 characteristics->add("plx_continuous_measurement", 0x2A5F); |
181 characteristics->add("plx_features", 0x2A60); | 206 characteristics->add("plx_features", 0x2A60); |
182 characteristics->add("plx_spot_check_measurement", 0x2A5E); | 207 characteristics->add("plx_spot_check_measurement", 0x2A5E); |
183 characteristics->add("pnp_id", 0x2A50); | 208 characteristics->add("pnp_id", 0x2A50); |
184 characteristics->add("pollen_concentration", 0x2A75); | 209 characteristics->add("pollen_concentration", 0x2A75); |
185 characteristics->add("position_quality", 0x2A69); | 210 characteristics->add("position_quality", 0x2A69); |
186 characteristics->add("pressure", 0x2A6D); | 211 characteristics->add("pressure", 0x2A6D); |
187 characteristics->add("protocol_mode", 0x2A4E); | 212 characteristics->add("protocol_mode", 0x2A4E); |
188 characteristics->add("rainfall", 0x2A78); | 213 characteristics->add("rainfall", 0x2A78); |
189 characteristics->add("gap.reconnection_address", 0x2A03); | 214 characteristics->add("gap.reconnection_address", 0x2A03); |
190 characteristics->add("record_access_control_point", 0x2A52); | 215 characteristics->add("record_access_control_point", 0x2A52); |
191 characteristics->add("reference_time_information", 0x2A14); | 216 characteristics->add("reference_time_information", 0x2A14); |
192 characteristics->add("report", 0x2A4D); | 217 characteristics->add("report", 0x2A4D); |
193 characteristics->add("report_map", 0x2A4B); | 218 characteristics->add("report_map", 0x2A4B); |
219 characteristics->add("resolvable_private_address_only", 0x2AC9); | |
194 characteristics->add("resting_heart_rate", 0x2A92); | 220 characteristics->add("resting_heart_rate", 0x2A92); |
195 characteristics->add("ringer_control_point", 0x2A40); | 221 characteristics->add("ringer_control_point", 0x2A40); |
196 characteristics->add("ringer_setting", 0x2A41); | 222 characteristics->add("ringer_setting", 0x2A41); |
223 characteristics->add("rower_data", 0x2AD1); | |
197 characteristics->add("rsc_feature", 0x2A54); | 224 characteristics->add("rsc_feature", 0x2A54); |
198 characteristics->add("rsc_measurement", 0x2A53); | 225 characteristics->add("rsc_measurement", 0x2A53); |
199 characteristics->add("sc_control_point", 0x2A55); | 226 characteristics->add("sc_control_point", 0x2A55); |
200 characteristics->add("scan_interval_window", 0x2A4F); | 227 characteristics->add("scan_interval_window", 0x2A4F); |
201 characteristics->add("scan_refresh", 0x2A31); | 228 characteristics->add("scan_refresh", 0x2A31); |
202 characteristics->add("sensor_location", 0x2A5D); | 229 characteristics->add("sensor_location", 0x2A5D); |
203 characteristics->add("serial_number_string", 0x2A25); | 230 characteristics->add("serial_number_string", 0x2A25); |
204 characteristics->add("gatt.service_changed", 0x2A05); | 231 characteristics->add("gatt.service_changed", 0x2A05); |
205 characteristics->add("software_revision_string", 0x2A28); | 232 characteristics->add("software_revision_string", 0x2A28); |
206 characteristics->add("sport_type_for_aerobic_and_anaerobic_thresholds", | 233 characteristics->add("sport_type_for_aerobic_and_anaerobic_thresholds", |
207 0x2A93); | 234 0x2A93); |
235 characteristics->add("stair_climber_data", 0x2AD0); | |
236 characteristics->add("step_climber_data", 0x2ACF); | |
237 characteristics->add("supported_heart_rate_range", 0x2AD7); | |
238 characteristics->add("supported_inclination_range", 0x2AD5); | |
208 characteristics->add("supported_new_alert_category", 0x2A47); | 239 characteristics->add("supported_new_alert_category", 0x2A47); |
240 characteristics->add("supported_power_range", 0x2AD8); | |
241 characteristics->add("supported_resistance_level_range", 0x2AD6); | |
242 characteristics->add("supported_speed_range", 0x2AD4); | |
209 characteristics->add("supported_unread_alert_category", 0x2A48); | 243 characteristics->add("supported_unread_alert_category", 0x2A48); |
210 characteristics->add("system_id", 0x2A23); | 244 characteristics->add("system_id", 0x2A23); |
245 characteristics->add("tds_control_point", 0x2ABC); | |
211 characteristics->add("temperature", 0x2A6E); | 246 characteristics->add("temperature", 0x2A6E); |
212 characteristics->add("temperature_measurement", 0x2A1C); | 247 characteristics->add("temperature_measurement", 0x2A1C); |
213 characteristics->add("temperature_type", 0x2A1D); | 248 characteristics->add("temperature_type", 0x2A1D); |
214 characteristics->add("three_zone_heart_rate_limits", 0x2A94); | 249 characteristics->add("three_zone_heart_rate_limits", 0x2A94); |
215 characteristics->add("time_accuracy", 0x2A12); | 250 characteristics->add("time_accuracy", 0x2A12); |
216 characteristics->add("time_source", 0x2A13); | 251 characteristics->add("time_source", 0x2A13); |
217 characteristics->add("time_update_control_point", 0x2A16); | 252 characteristics->add("time_update_control_point", 0x2A16); |
218 characteristics->add("time_update_state", 0x2A17); | 253 characteristics->add("time_update_state", 0x2A17); |
219 characteristics->add("time_with_dst", 0x2A11); | 254 characteristics->add("time_with_dst", 0x2A11); |
220 characteristics->add("time_zone", 0x2A0E); | 255 characteristics->add("time_zone", 0x2A0E); |
256 characteristics->add("training_status", 0x2AD3); | |
257 characteristics->add("treadmill_data", 0x2ACD); | |
221 characteristics->add("true_wind_direction", 0x2A71); | 258 characteristics->add("true_wind_direction", 0x2A71); |
222 characteristics->add("true_wind_speed", 0x2A70); | 259 characteristics->add("true_wind_speed", 0x2A70); |
223 characteristics->add("two_zone_heart_rate_limit", 0x2A95); | 260 characteristics->add("two_zone_heart_rate_limit", 0x2A95); |
224 characteristics->add("tx_power_level", 0x2A07); | 261 characteristics->add("tx_power_level", 0x2A07); |
225 characteristics->add("uncertainty", 0x2AB4); | 262 characteristics->add("uncertainty", 0x2AB4); |
226 characteristics->add("unread_alert_status", 0x2A45); | 263 characteristics->add("unread_alert_status", 0x2A45); |
264 characteristics->add("uri", 0x2AB6); | |
227 characteristics->add("user_control_point", 0x2A9F); | 265 characteristics->add("user_control_point", 0x2A9F); |
228 characteristics->add("user_index", 0x2A9A); | 266 characteristics->add("user_index", 0x2A9A); |
229 characteristics->add("uv_index", 0x2A76); | 267 characteristics->add("uv_index", 0x2A76); |
230 characteristics->add("vo2_max", 0x2A96); | 268 characteristics->add("vo2_max", 0x2A96); |
231 characteristics->add("waist_circumference", 0x2A97); | 269 characteristics->add("waist_circumference", 0x2A97); |
232 characteristics->add("weight", 0x2A98); | 270 characteristics->add("weight", 0x2A98); |
233 characteristics->add("weight_measurement", 0x2A9D); | 271 characteristics->add("weight_measurement", 0x2A9D); |
234 characteristics->add("weight_scale_feature", 0x2A9E); | 272 characteristics->add("weight_scale_feature", 0x2A9E); |
235 characteristics->add("wind_chill", 0x2A79); | 273 characteristics->add("wind_chill", 0x2A79); |
236 return characteristics; | 274 return characteristics; |
237 }()); | 275 }()); |
238 | 276 |
239 return &characteristicsMap; | 277 return &characteristicsMap; |
240 } | 278 } |
241 | 279 |
242 NameToAssignedNumberMap* getAssignedNumberForDescriptorNameMap() { | 280 NameToAssignedNumberMap* getAssignedNumberForDescriptorNameMap() { |
243 DEFINE_THREAD_SAFE_STATIC_LOCAL( | 281 DEFINE_THREAD_SAFE_STATIC_LOCAL( |
244 NameToAssignedNumberMap, descriptorsMap, []() { | 282 NameToAssignedNumberMap, descriptorsMap, []() { |
245 // https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorsHom ePage.aspx | 283 // https://www.bluetooth.com/specifications/gatt/descriptors |
246 NameToAssignedNumberMap* descriptors = new NameToAssignedNumberMap(); | 284 NameToAssignedNumberMap* descriptors = new NameToAssignedNumberMap(); |
285 descriptors->add("gatt.characteristic_aggregate_format", 0x2905); | |
247 descriptors->add("gatt.characteristic_extended_properties", 0x2900); | 286 descriptors->add("gatt.characteristic_extended_properties", 0x2900); |
287 descriptors->add("gatt.characteristic_presentation_format", 0x2904); | |
248 descriptors->add("gatt.characteristic_user_description", 0x2901); | 288 descriptors->add("gatt.characteristic_user_description", 0x2901); |
249 descriptors->add("gatt.client_characteristic_configuration", 0x2902); | 289 descriptors->add("gatt.client_characteristic_configuration", 0x2902); |
250 descriptors->add("gatt.server_characteristic_configuration", 0x2903); | |
251 descriptors->add("gatt.characteristic_presentation_format", 0x2904); | |
252 descriptors->add("gatt.characteristic_aggregate_format", 0x2905); | |
253 descriptors->add("valid_range", 0x2906); | |
254 descriptors->add("external_report_reference", 0x2907); | |
255 descriptors->add("report_reference", 0x2908); | |
256 descriptors->add("value_trigger_setting", 0x290A); | |
257 descriptors->add("es_configuration", 0x290B); | 290 descriptors->add("es_configuration", 0x290B); |
258 descriptors->add("es_measurement", 0x290C); | 291 descriptors->add("es_measurement", 0x290C); |
259 descriptors->add("es_trigger_setting", 0x290D); | 292 descriptors->add("es_trigger_setting", 0x290D); |
293 descriptors->add("external_report_reference", 0x2907); | |
294 descriptors->add("number_of_digitals", 0x2909); | |
295 descriptors->add("report_reference", 0x2908); | |
296 descriptors->add("gatt.server_characteristic_configuration", 0x2903); | |
ortuno
2017/03/29 21:00:31
I think this belongs further up.
| |
297 descriptors->add("time_trigger_setting", 0x290E); | |
298 descriptors->add("valid_range", 0x2906); | |
299 descriptors->add("value_trigger_setting", 0x290A); | |
260 return descriptors; | 300 return descriptors; |
261 }()); | 301 }()); |
262 | 302 |
263 return &descriptorsMap; | 303 return &descriptorsMap; |
264 } | 304 } |
265 | 305 |
266 String getUUIDForGATTAttribute(GATTAttribute attribute, | 306 String getUUIDForGATTAttribute(GATTAttribute attribute, |
267 StringOrUnsignedLong name, | 307 StringOrUnsignedLong name, |
268 ExceptionState& exceptionState) { | 308 ExceptionState& exceptionState) { |
269 // Implementation of BluetoothUUID.getService, BluetoothUUID.getCharacteristic | 309 // Implementation of BluetoothUUID.getService, BluetoothUUID.getCharacteristic |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
311 errorMessage.append(" name: '"); | 351 errorMessage.append(" name: '"); |
312 errorMessage.append(nameStr); | 352 errorMessage.append(nameStr); |
313 errorMessage.append( | 353 errorMessage.append( |
314 "'. It must be a valid UUID alias (e.g. 0x1234), " | 354 "'. It must be a valid UUID alias (e.g. 0x1234), " |
315 "UUID (lowercase hex characters e.g. " | 355 "UUID (lowercase hex characters e.g. " |
316 "'00001234-0000-1000-8000-00805f9b34fb'), " | 356 "'00001234-0000-1000-8000-00805f9b34fb'), " |
317 "or recognized standard name from "); | 357 "or recognized standard name from "); |
318 switch (attribute) { | 358 switch (attribute) { |
319 case GATTAttribute::Service: | 359 case GATTAttribute::Service: |
320 errorMessage.append( | 360 errorMessage.append( |
321 "https://developer.bluetooth.org/gatt/services/Pages/" | 361 "https://www.bluetooth.com/specifications/gatt/services" |
322 "ServicesHome.aspx" | |
323 " e.g. 'alert_notification'."); | 362 " e.g. 'alert_notification'."); |
324 break; | 363 break; |
325 case GATTAttribute::Characteristic: | 364 case GATTAttribute::Characteristic: |
326 errorMessage.append( | 365 errorMessage.append( |
327 "https://developer.bluetooth.org/gatt/characteristics/Pages/" | 366 "https://www.bluetooth.com/specifications/gatt/characteristics" |
328 "CharacteristicsHome.aspx" | |
329 " e.g. 'aerobic_heart_rate_lower_limit'."); | 367 " e.g. 'aerobic_heart_rate_lower_limit'."); |
330 break; | 368 break; |
331 case GATTAttribute::Descriptor: | 369 case GATTAttribute::Descriptor: |
332 errorMessage.append( | 370 errorMessage.append( |
333 "https://developer.bluetooth.org/gatt/descriptors/Pages/" | 371 "https://www.bluetooth.com/specifications/gatt/descriptors" |
334 "DescriptorsHomePage.aspx" | |
335 " e.g. 'gatt.characteristic_presentation_format'."); | 372 " e.g. 'gatt.characteristic_presentation_format'."); |
336 break; | 373 break; |
337 } | 374 } |
338 // Otherwise, throw a TypeError. | 375 // Otherwise, throw a TypeError. |
339 exceptionState.throwDOMException(V8TypeError, errorMessage.toString()); | 376 exceptionState.throwDOMException(V8TypeError, errorMessage.toString()); |
340 return String(); | 377 return String(); |
341 } | 378 } |
342 | 379 |
343 } // namespace | 380 } // namespace |
344 | 381 |
(...skipping 22 matching lines...) Expand all Loading... | |
367 StringBuilder builder; | 404 StringBuilder builder; |
368 builder.reserveCapacity(36 /* 36 chars or 128 bits, length of a UUID */); | 405 builder.reserveCapacity(36 /* 36 chars or 128 bits, length of a UUID */); |
369 appendUnsignedAsHexFixedSize( | 406 appendUnsignedAsHexFixedSize( |
370 alias, builder, 8 /* 8 chars or 32 bits, prefix length */, Lowercase); | 407 alias, builder, 8 /* 8 chars or 32 bits, prefix length */, Lowercase); |
371 | 408 |
372 builder.append("-0000-1000-8000-00805f9b34fb"); | 409 builder.append("-0000-1000-8000-00805f9b34fb"); |
373 return builder.toString(); | 410 return builder.toString(); |
374 } | 411 } |
375 | 412 |
376 } // namespace blink | 413 } // namespace blink |
OLD | NEW |