| 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://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx |
| 27 NameToAssignedNumberMap* services = new NameToAssignedNumberMap(); | 27 NameToAssignedNumberMap* services = new NameToAssignedNumberMap(); |
| 28 services->add("alert_notification", 0x1811); | 28 services->insert("alert_notification", 0x1811); |
| 29 services->add("automation_io", 0x1815); | 29 services->insert("automation_io", 0x1815); |
| 30 services->add("battery_service", 0x180F); | 30 services->insert("battery_service", 0x180F); |
| 31 services->add("blood_pressure", 0x1810); | 31 services->insert("blood_pressure", 0x1810); |
| 32 services->add("body_composition", 0x181B); | 32 services->insert("body_composition", 0x181B); |
| 33 services->add("bond_management", 0x181E); | 33 services->insert("bond_management", 0x181E); |
| 34 services->add("continuous_glucose_monitoring", 0x181F); | 34 services->insert("continuous_glucose_monitoring", 0x181F); |
| 35 services->add("current_time", 0x1805); | 35 services->insert("current_time", 0x1805); |
| 36 services->add("cycling_power", 0x1818); | 36 services->insert("cycling_power", 0x1818); |
| 37 services->add("cycling_speed_and_cadence", 0x1816); | 37 services->insert("cycling_speed_and_cadence", 0x1816); |
| 38 services->add("device_information", 0x180A); | 38 services->insert("device_information", 0x180A); |
| 39 services->add("environmental_sensing", 0x181A); | 39 services->insert("environmental_sensing", 0x181A); |
| 40 services->add("generic_access", 0x1800); | 40 services->insert("generic_access", 0x1800); |
| 41 services->add("generic_attribute", 0x1801); | 41 services->insert("generic_attribute", 0x1801); |
| 42 services->add("glucose", 0x1808); | 42 services->insert("glucose", 0x1808); |
| 43 services->add("health_thermometer", 0x1809); | 43 services->insert("health_thermometer", 0x1809); |
| 44 services->add("heart_rate", 0x180D); | 44 services->insert("heart_rate", 0x180D); |
| 45 services->add("human_interface_device", 0x1812); | 45 services->insert("human_interface_device", 0x1812); |
| 46 services->add("immediate_alert", 0x1802); | 46 services->insert("immediate_alert", 0x1802); |
| 47 services->add("indoor_positioning", 0x1821); | 47 services->insert("indoor_positioning", 0x1821); |
| 48 services->add("internet_protocol_support", 0x1820); | 48 services->insert("internet_protocol_support", 0x1820); |
| 49 services->add("link_loss", 0x1803); | 49 services->insert("link_loss", 0x1803); |
| 50 services->add("location_and_navigation", 0x1819); | 50 services->insert("location_and_navigation", 0x1819); |
| 51 services->add("next_dst_change", 0x1807); | 51 services->insert("next_dst_change", 0x1807); |
| 52 services->add("phone_alert_status", 0x180E); | 52 services->insert("phone_alert_status", 0x180E); |
| 53 services->add("pulse_oximeter", 0x1822); | 53 services->insert("pulse_oximeter", 0x1822); |
| 54 services->add("reference_time_update", 0x1806); | 54 services->insert("reference_time_update", 0x1806); |
| 55 services->add("running_speed_and_cadence", 0x1814); | 55 services->insert("running_speed_and_cadence", 0x1814); |
| 56 services->add("scan_parameters", 0x1813); | 56 services->insert("scan_parameters", 0x1813); |
| 57 services->add("tx_power", 0x1804); | 57 services->insert("tx_power", 0x1804); |
| 58 services->add("user_data", 0x181C); | 58 services->insert("user_data", 0x181C); |
| 59 services->add("weight_scale", 0x181D); | 59 services->insert("weight_scale", 0x181D); |
| 60 return services; | 60 return services; |
| 61 }()); | 61 }()); |
| 62 | 62 |
| 63 return &servicesMap; | 63 return &servicesMap; |
| 64 } | 64 } |
| 65 | 65 |
| 66 NameToAssignedNumberMap* getAssignedNumberForCharacteristicNameMap() { | 66 NameToAssignedNumberMap* getAssignedNumberForCharacteristicNameMap() { |
| 67 DEFINE_THREAD_SAFE_STATIC_LOCAL( | 67 DEFINE_THREAD_SAFE_STATIC_LOCAL( |
| 68 NameToAssignedNumberMap, characteristicsMap, []() { | 68 NameToAssignedNumberMap, characteristicsMap, []() { |
| 69 // https://developer.bluetooth.org/gatt/characteristics/Pages/Characteri
sticsHome.aspx | 69 // https://developer.bluetooth.org/gatt/characteristics/Pages/Characteri
sticsHome.aspx |
| 70 NameToAssignedNumberMap* characteristics = | 70 NameToAssignedNumberMap* characteristics = |
| 71 new NameToAssignedNumberMap(); | 71 new NameToAssignedNumberMap(); |
| 72 characteristics->add("aerobic_heart_rate_lower_limit", 0x2A7E); | 72 characteristics->insert("aerobic_heart_rate_lower_limit", 0x2A7E); |
| 73 characteristics->add("aerobic_heart_rate_upper_limit", 0x2A84); | 73 characteristics->insert("aerobic_heart_rate_upper_limit", 0x2A84); |
| 74 characteristics->add("aerobic_threshold", 0x2A7F); | 74 characteristics->insert("aerobic_threshold", 0x2A7F); |
| 75 characteristics->add("age", 0x2A80); | 75 characteristics->insert("age", 0x2A80); |
| 76 characteristics->add("aggregate", 0x2A5A); | 76 characteristics->insert("aggregate", 0x2A5A); |
| 77 characteristics->add("alert_category_id", 0x2A43); | 77 characteristics->insert("alert_category_id", 0x2A43); |
| 78 characteristics->add("alert_category_id_bit_mask", 0x2A42); | 78 characteristics->insert("alert_category_id_bit_mask", 0x2A42); |
| 79 characteristics->add("alert_level", 0x2A06); | 79 characteristics->insert("alert_level", 0x2A06); |
| 80 characteristics->add("alert_notification_control_point", 0x2A44); | 80 characteristics->insert("alert_notification_control_point", 0x2A44); |
| 81 characteristics->add("alert_status", 0x2A3F); | 81 characteristics->insert("alert_status", 0x2A3F); |
| 82 characteristics->add("altitude", 0x2AB3); | 82 characteristics->insert("altitude", 0x2AB3); |
| 83 characteristics->add("anaerobic_heart_rate_lower_limit", 0x2A81); | 83 characteristics->insert("anaerobic_heart_rate_lower_limit", 0x2A81); |
| 84 characteristics->add("anaerobic_heart_rate_upper_limit", 0x2A82); | 84 characteristics->insert("anaerobic_heart_rate_upper_limit", 0x2A82); |
| 85 characteristics->add("anaerobic_threshold", 0x2A83); | 85 characteristics->insert("anaerobic_threshold", 0x2A83); |
| 86 characteristics->add("analog", 0x2A58); | 86 characteristics->insert("analog", 0x2A58); |
| 87 characteristics->add("apparent_wind_direction", 0x2A73); | 87 characteristics->insert("apparent_wind_direction", 0x2A73); |
| 88 characteristics->add("apparent_wind_speed", 0x2A72); | 88 characteristics->insert("apparent_wind_speed", 0x2A72); |
| 89 characteristics->add("gap.appearance", 0x2A01); | 89 characteristics->insert("gap.appearance", 0x2A01); |
| 90 characteristics->add("barometric_pressure_trend", 0x2AA3); | 90 characteristics->insert("barometric_pressure_trend", 0x2AA3); |
| 91 characteristics->add("battery_level", 0x2A19); | 91 characteristics->insert("battery_level", 0x2A19); |
| 92 characteristics->add("blood_pressure_feature", 0x2A49); | 92 characteristics->insert("blood_pressure_feature", 0x2A49); |
| 93 characteristics->add("blood_pressure_measurement", 0x2A35); | 93 characteristics->insert("blood_pressure_measurement", 0x2A35); |
| 94 characteristics->add("body_composition_feature", 0x2A9B); | 94 characteristics->insert("body_composition_feature", 0x2A9B); |
| 95 characteristics->add("body_composition_measurement", 0x2A9C); | 95 characteristics->insert("body_composition_measurement", 0x2A9C); |
| 96 characteristics->add("body_sensor_location", 0x2A38); | 96 characteristics->insert("body_sensor_location", 0x2A38); |
| 97 characteristics->add("bond_management_control_point", 0x2AA4); | 97 characteristics->insert("bond_management_control_point", 0x2AA4); |
| 98 characteristics->add("bond_management_feature", 0x2AA5); | 98 characteristics->insert("bond_management_feature", 0x2AA5); |
| 99 characteristics->add("boot_keyboard_input_report", 0x2A22); | 99 characteristics->insert("boot_keyboard_input_report", 0x2A22); |
| 100 characteristics->add("boot_keyboard_output_report", 0x2A32); | 100 characteristics->insert("boot_keyboard_output_report", 0x2A32); |
| 101 characteristics->add("boot_mouse_input_report", 0x2A33); | 101 characteristics->insert("boot_mouse_input_report", 0x2A33); |
| 102 characteristics->add("gap.central_address_resolution_support", 0x2AA6); | 102 characteristics->insert("gap.central_address_resolution_support", |
| 103 characteristics->add("cgm_feature", 0x2AA8); | 103 0x2AA6); |
| 104 characteristics->add("cgm_measurement", 0x2AA7); | 104 characteristics->insert("cgm_feature", 0x2AA8); |
| 105 characteristics->add("cgm_session_run_time", 0x2AAB); | 105 characteristics->insert("cgm_measurement", 0x2AA7); |
| 106 characteristics->add("cgm_session_start_time", 0x2AAA); | 106 characteristics->insert("cgm_session_run_time", 0x2AAB); |
| 107 characteristics->add("cgm_specific_ops_control_point", 0x2AAC); | 107 characteristics->insert("cgm_session_start_time", 0x2AAA); |
| 108 characteristics->add("cgm_status", 0x2AA9); | 108 characteristics->insert("cgm_specific_ops_control_point", 0x2AAC); |
| 109 characteristics->add("csc_feature", 0x2A5C); | 109 characteristics->insert("cgm_status", 0x2AA9); |
| 110 characteristics->add("csc_measurement", 0x2A5B); | 110 characteristics->insert("csc_feature", 0x2A5C); |
| 111 characteristics->add("current_time", 0x2A2B); | 111 characteristics->insert("csc_measurement", 0x2A5B); |
| 112 characteristics->add("cycling_power_control_point", 0x2A66); | 112 characteristics->insert("current_time", 0x2A2B); |
| 113 characteristics->add("cycling_power_feature", 0x2A65); | 113 characteristics->insert("cycling_power_control_point", 0x2A66); |
| 114 characteristics->add("cycling_power_measurement", 0x2A63); | 114 characteristics->insert("cycling_power_feature", 0x2A65); |
| 115 characteristics->add("cycling_power_vector", 0x2A64); | 115 characteristics->insert("cycling_power_measurement", 0x2A63); |
| 116 characteristics->add("database_change_increment", 0x2A99); | 116 characteristics->insert("cycling_power_vector", 0x2A64); |
| 117 characteristics->add("date_of_birth", 0x2A85); | 117 characteristics->insert("database_change_increment", 0x2A99); |
| 118 characteristics->add("date_of_threshold_assessment", 0x2A86); | 118 characteristics->insert("date_of_birth", 0x2A85); |
| 119 characteristics->add("date_time", 0x2A08); | 119 characteristics->insert("date_of_threshold_assessment", 0x2A86); |
| 120 characteristics->add("day_date_time", 0x2A0A); | 120 characteristics->insert("date_time", 0x2A08); |
| 121 characteristics->add("day_of_week", 0x2A09); | 121 characteristics->insert("day_date_time", 0x2A0A); |
| 122 characteristics->add("descriptor_value_changed", 0x2A7D); | 122 characteristics->insert("day_of_week", 0x2A09); |
| 123 characteristics->add("gap.device_name", 0x2A00); | 123 characteristics->insert("descriptor_value_changed", 0x2A7D); |
| 124 characteristics->add("dew_point", 0x2A7B); | 124 characteristics->insert("gap.device_name", 0x2A00); |
| 125 characteristics->add("digital", 0x2A56); | 125 characteristics->insert("dew_point", 0x2A7B); |
| 126 characteristics->add("dst_offset", 0x2A0D); | 126 characteristics->insert("digital", 0x2A56); |
| 127 characteristics->add("elevation", 0x2A6C); | 127 characteristics->insert("dst_offset", 0x2A0D); |
| 128 characteristics->add("email_address", 0x2A87); | 128 characteristics->insert("elevation", 0x2A6C); |
| 129 characteristics->add("exact_time_256", 0x2A0C); | 129 characteristics->insert("email_address", 0x2A87); |
| 130 characteristics->add("fat_burn_heart_rate_lower_limit", 0x2A88); | 130 characteristics->insert("exact_time_256", 0x2A0C); |
| 131 characteristics->add("fat_burn_heart_rate_upper_limit", 0x2A89); | 131 characteristics->insert("fat_burn_heart_rate_lower_limit", 0x2A88); |
| 132 characteristics->add("firmware_revision_string", 0x2A26); | 132 characteristics->insert("fat_burn_heart_rate_upper_limit", 0x2A89); |
| 133 characteristics->add("first_name", 0x2A8A); | 133 characteristics->insert("firmware_revision_string", 0x2A26); |
| 134 characteristics->add("five_zone_heart_rate_limits", 0x2A8B); | 134 characteristics->insert("first_name", 0x2A8A); |
| 135 characteristics->add("floor_number", 0x2AB2); | 135 characteristics->insert("five_zone_heart_rate_limits", 0x2A8B); |
| 136 characteristics->add("gender", 0x2A8C); | 136 characteristics->insert("floor_number", 0x2AB2); |
| 137 characteristics->add("glucose_feature", 0x2A51); | 137 characteristics->insert("gender", 0x2A8C); |
| 138 characteristics->add("glucose_measurement", 0x2A18); | 138 characteristics->insert("glucose_feature", 0x2A51); |
| 139 characteristics->add("glucose_measurement_context", 0x2A34); | 139 characteristics->insert("glucose_measurement", 0x2A18); |
| 140 characteristics->add("gust_factor", 0x2A74); | 140 characteristics->insert("glucose_measurement_context", 0x2A34); |
| 141 characteristics->add("hardware_revision_string", 0x2A27); | 141 characteristics->insert("gust_factor", 0x2A74); |
| 142 characteristics->add("heart_rate_control_point", 0x2A39); | 142 characteristics->insert("hardware_revision_string", 0x2A27); |
| 143 characteristics->add("heart_rate_max", 0x2A8D); | 143 characteristics->insert("heart_rate_control_point", 0x2A39); |
| 144 characteristics->add("heart_rate_measurement", 0x2A37); | 144 characteristics->insert("heart_rate_max", 0x2A8D); |
| 145 characteristics->add("heat_index", 0x2A7A); | 145 characteristics->insert("heart_rate_measurement", 0x2A37); |
| 146 characteristics->add("height", 0x2A8E); | 146 characteristics->insert("heat_index", 0x2A7A); |
| 147 characteristics->add("hid_control_point", 0x2A4C); | 147 characteristics->insert("height", 0x2A8E); |
| 148 characteristics->add("hid_information", 0x2A4A); | 148 characteristics->insert("hid_control_point", 0x2A4C); |
| 149 characteristics->add("hip_circumference", 0x2A8F); | 149 characteristics->insert("hid_information", 0x2A4A); |
| 150 characteristics->add("humidity", 0x2A6F); | 150 characteristics->insert("hip_circumference", 0x2A8F); |
| 151 characteristics->add( | 151 characteristics->insert("humidity", 0x2A6F); |
| 152 characteristics->insert( |
| 152 "ieee_11073-20601_regulatory_certification_data_list", 0x2A2A); | 153 "ieee_11073-20601_regulatory_certification_data_list", 0x2A2A); |
| 153 characteristics->add("indoor_positioning_configuration", 0x2AAD); | 154 characteristics->insert("indoor_positioning_configuration", 0x2AAD); |
| 154 characteristics->add("intermediate_blood_pressure", 0x2A36); | 155 characteristics->insert("intermediate_blood_pressure", 0x2A36); |
| 155 characteristics->add("intermediate_temperature", 0x2A1E); | 156 characteristics->insert("intermediate_temperature", 0x2A1E); |
| 156 characteristics->add("irradiance", 0x2A77); | 157 characteristics->insert("irradiance", 0x2A77); |
| 157 characteristics->add("language", 0x2AA2); | 158 characteristics->insert("language", 0x2AA2); |
| 158 characteristics->add("last_name", 0x2A90); | 159 characteristics->insert("last_name", 0x2A90); |
| 159 characteristics->add("latitude", 0x2AAE); | 160 characteristics->insert("latitude", 0x2AAE); |
| 160 characteristics->add("ln_control_point", 0x2A6B); | 161 characteristics->insert("ln_control_point", 0x2A6B); |
| 161 characteristics->add("ln_feature", 0x2A6A); | 162 characteristics->insert("ln_feature", 0x2A6A); |
| 162 characteristics->add("local_east_coordinate.xml", 0x2AB1); | 163 characteristics->insert("local_east_coordinate.xml", 0x2AB1); |
| 163 characteristics->add("local_north_coordinate", 0x2AB0); | 164 characteristics->insert("local_north_coordinate", 0x2AB0); |
| 164 characteristics->add("local_time_information", 0x2A0F); | 165 characteristics->insert("local_time_information", 0x2A0F); |
| 165 characteristics->add("location_and_speed", 0x2A67); | 166 characteristics->insert("location_and_speed", 0x2A67); |
| 166 characteristics->add("location_name", 0x2AB5); | 167 characteristics->insert("location_name", 0x2AB5); |
| 167 characteristics->add("longitude", 0x2AAF); | 168 characteristics->insert("longitude", 0x2AAF); |
| 168 characteristics->add("magnetic_declination", 0x2A2C); | 169 characteristics->insert("magnetic_declination", 0x2A2C); |
| 169 characteristics->add("magnetic_flux_density_2D", 0x2AA0); | 170 characteristics->insert("magnetic_flux_density_2D", 0x2AA0); |
| 170 characteristics->add("magnetic_flux_density_3D", 0x2AA1); | 171 characteristics->insert("magnetic_flux_density_3D", 0x2AA1); |
| 171 characteristics->add("manufacturer_name_string", 0x2A29); | 172 characteristics->insert("manufacturer_name_string", 0x2A29); |
| 172 characteristics->add("maximum_recommended_heart_rate", 0x2A91); | 173 characteristics->insert("maximum_recommended_heart_rate", 0x2A91); |
| 173 characteristics->add("measurement_interval", 0x2A21); | 174 characteristics->insert("measurement_interval", 0x2A21); |
| 174 characteristics->add("model_number_string", 0x2A24); | 175 characteristics->insert("model_number_string", 0x2A24); |
| 175 characteristics->add("navigation", 0x2A68); | 176 characteristics->insert("navigation", 0x2A68); |
| 176 characteristics->add("new_alert", 0x2A46); | 177 characteristics->insert("new_alert", 0x2A46); |
| 177 characteristics->add("gap.peripheral_preferred_connection_parameters", | 178 characteristics->insert( |
| 178 0x2A04); | 179 "gap.peripheral_preferred_connection_parameters", 0x2A04); |
| 179 characteristics->add("gap.peripheral_privacy_flag", 0x2A02); | 180 characteristics->insert("gap.peripheral_privacy_flag", 0x2A02); |
| 180 characteristics->add("plx_continuous_measurement", 0x2A5F); | 181 characteristics->insert("plx_continuous_measurement", 0x2A5F); |
| 181 characteristics->add("plx_features", 0x2A60); | 182 characteristics->insert("plx_features", 0x2A60); |
| 182 characteristics->add("plx_spot_check_measurement", 0x2A5E); | 183 characteristics->insert("plx_spot_check_measurement", 0x2A5E); |
| 183 characteristics->add("pnp_id", 0x2A50); | 184 characteristics->insert("pnp_id", 0x2A50); |
| 184 characteristics->add("pollen_concentration", 0x2A75); | 185 characteristics->insert("pollen_concentration", 0x2A75); |
| 185 characteristics->add("position_quality", 0x2A69); | 186 characteristics->insert("position_quality", 0x2A69); |
| 186 characteristics->add("pressure", 0x2A6D); | 187 characteristics->insert("pressure", 0x2A6D); |
| 187 characteristics->add("protocol_mode", 0x2A4E); | 188 characteristics->insert("protocol_mode", 0x2A4E); |
| 188 characteristics->add("rainfall", 0x2A78); | 189 characteristics->insert("rainfall", 0x2A78); |
| 189 characteristics->add("gap.reconnection_address", 0x2A03); | 190 characteristics->insert("gap.reconnection_address", 0x2A03); |
| 190 characteristics->add("record_access_control_point", 0x2A52); | 191 characteristics->insert("record_access_control_point", 0x2A52); |
| 191 characteristics->add("reference_time_information", 0x2A14); | 192 characteristics->insert("reference_time_information", 0x2A14); |
| 192 characteristics->add("report", 0x2A4D); | 193 characteristics->insert("report", 0x2A4D); |
| 193 characteristics->add("report_map", 0x2A4B); | 194 characteristics->insert("report_map", 0x2A4B); |
| 194 characteristics->add("resting_heart_rate", 0x2A92); | 195 characteristics->insert("resting_heart_rate", 0x2A92); |
| 195 characteristics->add("ringer_control_point", 0x2A40); | 196 characteristics->insert("ringer_control_point", 0x2A40); |
| 196 characteristics->add("ringer_setting", 0x2A41); | 197 characteristics->insert("ringer_setting", 0x2A41); |
| 197 characteristics->add("rsc_feature", 0x2A54); | 198 characteristics->insert("rsc_feature", 0x2A54); |
| 198 characteristics->add("rsc_measurement", 0x2A53); | 199 characteristics->insert("rsc_measurement", 0x2A53); |
| 199 characteristics->add("sc_control_point", 0x2A55); | 200 characteristics->insert("sc_control_point", 0x2A55); |
| 200 characteristics->add("scan_interval_window", 0x2A4F); | 201 characteristics->insert("scan_interval_window", 0x2A4F); |
| 201 characteristics->add("scan_refresh", 0x2A31); | 202 characteristics->insert("scan_refresh", 0x2A31); |
| 202 characteristics->add("sensor_location", 0x2A5D); | 203 characteristics->insert("sensor_location", 0x2A5D); |
| 203 characteristics->add("serial_number_string", 0x2A25); | 204 characteristics->insert("serial_number_string", 0x2A25); |
| 204 characteristics->add("gatt.service_changed", 0x2A05); | 205 characteristics->insert("gatt.service_changed", 0x2A05); |
| 205 characteristics->add("software_revision_string", 0x2A28); | 206 characteristics->insert("software_revision_string", 0x2A28); |
| 206 characteristics->add("sport_type_for_aerobic_and_anaerobic_thresholds", | 207 characteristics->insert( |
| 207 0x2A93); | 208 "sport_type_for_aerobic_and_anaerobic_thresholds", 0x2A93); |
| 208 characteristics->add("supported_new_alert_category", 0x2A47); | 209 characteristics->insert("supported_new_alert_category", 0x2A47); |
| 209 characteristics->add("supported_unread_alert_category", 0x2A48); | 210 characteristics->insert("supported_unread_alert_category", 0x2A48); |
| 210 characteristics->add("system_id", 0x2A23); | 211 characteristics->insert("system_id", 0x2A23); |
| 211 characteristics->add("temperature", 0x2A6E); | 212 characteristics->insert("temperature", 0x2A6E); |
| 212 characteristics->add("temperature_measurement", 0x2A1C); | 213 characteristics->insert("temperature_measurement", 0x2A1C); |
| 213 characteristics->add("temperature_type", 0x2A1D); | 214 characteristics->insert("temperature_type", 0x2A1D); |
| 214 characteristics->add("three_zone_heart_rate_limits", 0x2A94); | 215 characteristics->insert("three_zone_heart_rate_limits", 0x2A94); |
| 215 characteristics->add("time_accuracy", 0x2A12); | 216 characteristics->insert("time_accuracy", 0x2A12); |
| 216 characteristics->add("time_source", 0x2A13); | 217 characteristics->insert("time_source", 0x2A13); |
| 217 characteristics->add("time_update_control_point", 0x2A16); | 218 characteristics->insert("time_update_control_point", 0x2A16); |
| 218 characteristics->add("time_update_state", 0x2A17); | 219 characteristics->insert("time_update_state", 0x2A17); |
| 219 characteristics->add("time_with_dst", 0x2A11); | 220 characteristics->insert("time_with_dst", 0x2A11); |
| 220 characteristics->add("time_zone", 0x2A0E); | 221 characteristics->insert("time_zone", 0x2A0E); |
| 221 characteristics->add("true_wind_direction", 0x2A71); | 222 characteristics->insert("true_wind_direction", 0x2A71); |
| 222 characteristics->add("true_wind_speed", 0x2A70); | 223 characteristics->insert("true_wind_speed", 0x2A70); |
| 223 characteristics->add("two_zone_heart_rate_limit", 0x2A95); | 224 characteristics->insert("two_zone_heart_rate_limit", 0x2A95); |
| 224 characteristics->add("tx_power_level", 0x2A07); | 225 characteristics->insert("tx_power_level", 0x2A07); |
| 225 characteristics->add("uncertainty", 0x2AB4); | 226 characteristics->insert("uncertainty", 0x2AB4); |
| 226 characteristics->add("unread_alert_status", 0x2A45); | 227 characteristics->insert("unread_alert_status", 0x2A45); |
| 227 characteristics->add("user_control_point", 0x2A9F); | 228 characteristics->insert("user_control_point", 0x2A9F); |
| 228 characteristics->add("user_index", 0x2A9A); | 229 characteristics->insert("user_index", 0x2A9A); |
| 229 characteristics->add("uv_index", 0x2A76); | 230 characteristics->insert("uv_index", 0x2A76); |
| 230 characteristics->add("vo2_max", 0x2A96); | 231 characteristics->insert("vo2_max", 0x2A96); |
| 231 characteristics->add("waist_circumference", 0x2A97); | 232 characteristics->insert("waist_circumference", 0x2A97); |
| 232 characteristics->add("weight", 0x2A98); | 233 characteristics->insert("weight", 0x2A98); |
| 233 characteristics->add("weight_measurement", 0x2A9D); | 234 characteristics->insert("weight_measurement", 0x2A9D); |
| 234 characteristics->add("weight_scale_feature", 0x2A9E); | 235 characteristics->insert("weight_scale_feature", 0x2A9E); |
| 235 characteristics->add("wind_chill", 0x2A79); | 236 characteristics->insert("wind_chill", 0x2A79); |
| 236 return characteristics; | 237 return characteristics; |
| 237 }()); | 238 }()); |
| 238 | 239 |
| 239 return &characteristicsMap; | 240 return &characteristicsMap; |
| 240 } | 241 } |
| 241 | 242 |
| 242 NameToAssignedNumberMap* getAssignedNumberForDescriptorNameMap() { | 243 NameToAssignedNumberMap* getAssignedNumberForDescriptorNameMap() { |
| 243 DEFINE_THREAD_SAFE_STATIC_LOCAL( | 244 DEFINE_THREAD_SAFE_STATIC_LOCAL( |
| 244 NameToAssignedNumberMap, descriptorsMap, []() { | 245 NameToAssignedNumberMap, descriptorsMap, []() { |
| 245 // https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorsHom
ePage.aspx | 246 // https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorsHom
ePage.aspx |
| 246 NameToAssignedNumberMap* descriptors = new NameToAssignedNumberMap(); | 247 NameToAssignedNumberMap* descriptors = new NameToAssignedNumberMap(); |
| 247 descriptors->add("gatt.characteristic_extended_properties", 0x2900); | 248 descriptors->insert("gatt.characteristic_extended_properties", 0x2900); |
| 248 descriptors->add("gatt.characteristic_user_description", 0x2901); | 249 descriptors->insert("gatt.characteristic_user_description", 0x2901); |
| 249 descriptors->add("gatt.client_characteristic_configuration", 0x2902); | 250 descriptors->insert("gatt.client_characteristic_configuration", 0x2902); |
| 250 descriptors->add("gatt.server_characteristic_configuration", 0x2903); | 251 descriptors->insert("gatt.server_characteristic_configuration", 0x2903); |
| 251 descriptors->add("gatt.characteristic_presentation_format", 0x2904); | 252 descriptors->insert("gatt.characteristic_presentation_format", 0x2904); |
| 252 descriptors->add("gatt.characteristic_aggregate_format", 0x2905); | 253 descriptors->insert("gatt.characteristic_aggregate_format", 0x2905); |
| 253 descriptors->add("valid_range", 0x2906); | 254 descriptors->insert("valid_range", 0x2906); |
| 254 descriptors->add("external_report_reference", 0x2907); | 255 descriptors->insert("external_report_reference", 0x2907); |
| 255 descriptors->add("report_reference", 0x2908); | 256 descriptors->insert("report_reference", 0x2908); |
| 256 descriptors->add("value_trigger_setting", 0x290A); | 257 descriptors->insert("value_trigger_setting", 0x290A); |
| 257 descriptors->add("es_configuration", 0x290B); | 258 descriptors->insert("es_configuration", 0x290B); |
| 258 descriptors->add("es_measurement", 0x290C); | 259 descriptors->insert("es_measurement", 0x290C); |
| 259 descriptors->add("es_trigger_setting", 0x290D); | 260 descriptors->insert("es_trigger_setting", 0x290D); |
| 260 return descriptors; | 261 return descriptors; |
| 261 }()); | 262 }()); |
| 262 | 263 |
| 263 return &descriptorsMap; | 264 return &descriptorsMap; |
| 264 } | 265 } |
| 265 | 266 |
| 266 String getUUIDForGATTAttribute(GATTAttribute attribute, | 267 String getUUIDForGATTAttribute(GATTAttribute attribute, |
| 267 StringOrUnsignedLong name, | 268 StringOrUnsignedLong name, |
| 268 ExceptionState& exceptionState) { | 269 ExceptionState& exceptionState) { |
| 269 // Implementation of BluetoothUUID.getService, BluetoothUUID.getCharacteristic | 270 // Implementation of BluetoothUUID.getService, BluetoothUUID.getCharacteristic |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 builder.reserveCapacity(36 /* 36 chars or 128 bits, length of a UUID */); | 369 builder.reserveCapacity(36 /* 36 chars or 128 bits, length of a UUID */); |
| 369 HexNumber::appendUnsignedAsHexFixedSize( | 370 HexNumber::appendUnsignedAsHexFixedSize( |
| 370 alias, builder, 8 /* 8 chars or 32 bits, prefix length */, | 371 alias, builder, 8 /* 8 chars or 32 bits, prefix length */, |
| 371 HexNumber::Lowercase); | 372 HexNumber::Lowercase); |
| 372 | 373 |
| 373 builder.append("-0000-1000-8000-00805f9b34fb"); | 374 builder.append("-0000-1000-8000-00805f9b34fb"); |
| 374 return builder.toString(); | 375 return builder.toString(); |
| 375 } | 376 } |
| 376 | 377 |
| 377 } // namespace blink | 378 } // namespace blink |
| OLD | NEW |