async Task ReadDeviceInformation(GattDeviceService genericAccess) { var characteristics = genericAccess.GetAllCharacteristics(); foreach (var characteristic in characteristics) { if (characteristic.CharacteristicProperties.HasFlag(GattCharacteristicProperties.Read)) { var description = await GetDescription(characteristic) ?? GATTDefaultCharacteristic.Find(characteristic.Uuid)?.Description ?? characteristic.Uuid.ToString(); var result = await characteristic.ReadValueAsync(); var value = GetString(result.Value); if (!this.properties.ContainsKey(description)) { this.properties.Add(description, value); } } } }
static GATTDefaultCharacteristic() { lookup = new Dictionary <Guid, GATTDefaultCharacteristic>(); AerobicHeartRateLowerLimit = new GATTDefaultCharacteristic("Aerobic Heart Rate Lower Limit", 0x2A7E); AerobicHeartRateUpperLimit = new GATTDefaultCharacteristic("Aerobic Heart Rate Upper Limit", 0x2A84); AerobicThreshold = new GATTDefaultCharacteristic("Aerobic Threshold", 0x2A7F); Age = new GATTDefaultCharacteristic("Age", 0x2A80); Aggregate = new GATTDefaultCharacteristic("Aggregate", 0x2A5A); AlertCategoryID = new GATTDefaultCharacteristic("Alert Category ID", 0x2A43); AlertCategoryIDBitMask = new GATTDefaultCharacteristic("Alert Category ID Bit Mask", 0x2A42); AlertLevel = new GATTDefaultCharacteristic("Alert Level", 0x2A06); AlertNotificationControlPoint = new GATTDefaultCharacteristic("Alert Notification Control Point", 0x2A44); AlertStatus = new GATTDefaultCharacteristic("Alert Status", 0x2A3F); Altitude = new GATTDefaultCharacteristic("Altitude", 0x2AB3); AnaerobicHeartRateLowerLimit = new GATTDefaultCharacteristic("Anaerobic Heart Rate Lower Limit", 0x2A81); AnaerobicHeartRateUpperLimit = new GATTDefaultCharacteristic("Anaerobic Heart Rate Upper Limit", 0x2A82); AnaerobicThreshold = new GATTDefaultCharacteristic("Anaerobic Threshold", 0x2A83); Analog = new GATTDefaultCharacteristic("Analog", 0x2A58); ApparentWindDirection = new GATTDefaultCharacteristic("Apparent Wind Direction", 0x2A73); ApparentWindSpeed = new GATTDefaultCharacteristic("Apparent Wind Speed", 0x2A72); Appearance = new GATTDefaultCharacteristic("Appearance", 0x2A01); BarometricPressureTrend = new GATTDefaultCharacteristic("Barometric Pressure Trend", 0x2AA3); BatteryLevel = new GATTDefaultCharacteristic("Battery Level", 0x2A19); BloodPressureFeature = new GATTDefaultCharacteristic("Blood Pressure Feature", 0x2A49); BloodPressureMeasurement = new GATTDefaultCharacteristic("Blood Pressure Measurement", 0x2A35); BodyCompositionFeature = new GATTDefaultCharacteristic("Body Composition Feature", 0x2A9B); BodyCompositionMeasurement = new GATTDefaultCharacteristic("Body Composition Measurement", 0x2A9C); BodySensorLocation = new GATTDefaultCharacteristic("Body Sensor Location", 0x2A38); BondManagementControlPoint = new GATTDefaultCharacteristic("Bond Management Control Point", 0x2AA4); BondManagementFeature = new GATTDefaultCharacteristic("Bond Management Feature", 0x2AA5); BootKeyboardInputReport = new GATTDefaultCharacteristic("Boot Keyboard Input Report", 0x2A22); BootKeyboardOutputReport = new GATTDefaultCharacteristic("Boot Keyboard Output Report", 0x2A32); BootMouseInputReport = new GATTDefaultCharacteristic("Boot Mouse Input Report", 0x2A33); CentralAddressResolution = new GATTDefaultCharacteristic("Central Address Resolution", 0x2AA6); CGMFeature = new GATTDefaultCharacteristic("CGM Feature", 0x2AA8); CGMMeasurement = new GATTDefaultCharacteristic("CGM Measurement", 0x2AA7); CGMSessionRunTime = new GATTDefaultCharacteristic("CGM Session Run Time", 0x2AAB); CGMSessionStartTime = new GATTDefaultCharacteristic("CGM Session Start Time", 0x2AAA); CGMSpecificOpsControlPoint = new GATTDefaultCharacteristic("CGM Specific Ops Control Point", 0x2AAC); CGMStatus = new GATTDefaultCharacteristic("CGM Status", 0x2AA9); CSCFeature = new GATTDefaultCharacteristic("CSC Feature", 0x2A5C); CSCMeasurement = new GATTDefaultCharacteristic("CSC Measurement", 0x2A5B); CurrentTime = new GATTDefaultCharacteristic("Current Time", 0x2A2B); CyclingPowerControlPoint = new GATTDefaultCharacteristic("Cycling Power Control Point", 0x2A66); CyclingPowerFeature = new GATTDefaultCharacteristic("Cycling Power Feature", 0x2A65); CyclingPowerMeasurement = new GATTDefaultCharacteristic("Cycling Power Measurement", 0x2A63); CyclingPowerVector = new GATTDefaultCharacteristic("Cycling Power Vector", 0x2A64); DatabaseChangeIncrement = new GATTDefaultCharacteristic("Database Change Increment", 0x2A99); DateofBirth = new GATTDefaultCharacteristic("Date of Birth", 0x2A85); DateofThresholdAssessment = new GATTDefaultCharacteristic("Date of Threshold Assessment", 0x2A86); DateTime = new GATTDefaultCharacteristic("Date Time", 0x2A08); DayDateTime = new GATTDefaultCharacteristic("Day Date Time", 0x2A0A); DayofWeek = new GATTDefaultCharacteristic("Day of Week", 0x2A09); DescriptorValueChanged = new GATTDefaultCharacteristic("Descriptor Value Changed", 0x2A7D); DeviceName = new GATTDefaultCharacteristic("Device Name", 0x2A00); DewPoint = new GATTDefaultCharacteristic("Dew Point", 0x2A7B); Digital = new GATTDefaultCharacteristic("Digital", 0x2A56); DSTOffset = new GATTDefaultCharacteristic("DST Offset", 0x2A0D); Elevation = new GATTDefaultCharacteristic("Elevation", 0x2A6C); EmailAddress = new GATTDefaultCharacteristic("Email Address", 0x2A87); ExactTime256 = new GATTDefaultCharacteristic("Exact Time 256", 0x2A0C); FatBurnHeartRateLowerLimit = new GATTDefaultCharacteristic("Fat Burn Heart Rate Lower Limit", 0x2A88); FatBurnHeartRateUpperLimit = new GATTDefaultCharacteristic("Fat Burn Heart Rate Upper Limit", 0x2A89); FirmwareRevisionString = new GATTDefaultCharacteristic("Firmware Revision String", 0x2A26); FirstName = new GATTDefaultCharacteristic("First Name", 0x2A8A); FiveZoneHeartRateLimits = new GATTDefaultCharacteristic("Five Zone Heart Rate Limits", 0x2A8B); FloorNumber = new GATTDefaultCharacteristic("Floor Number", 0x2AB2); Gender = new GATTDefaultCharacteristic("Gender", 0x2A8C); GlucoseFeature = new GATTDefaultCharacteristic("Glucose Feature", 0x2A51); GlucoseMeasurement = new GATTDefaultCharacteristic("Glucose Measurement", 0x2A18); GlucoseMeasurementContext = new GATTDefaultCharacteristic("Glucose Measurement Context", 0x2A34); GustFactor = new GATTDefaultCharacteristic("Gust Factor", 0x2A74); HardwareRevisionString = new GATTDefaultCharacteristic("Hardware Revision String", 0x2A27); HeartRateControlPoint = new GATTDefaultCharacteristic("Heart Rate Control Point", 0x2A39); HeartRateMax = new GATTDefaultCharacteristic("Heart Rate Max", 0x2A8D); HeartRateMeasurement = new GATTDefaultCharacteristic("Heart Rate Measurement", 0x2A37); HeatIndex = new GATTDefaultCharacteristic("Heat Index", 0x2A7A); Height = new GATTDefaultCharacteristic("Height", 0x2A8E); HIDControlPoint = new GATTDefaultCharacteristic("HID Control Point", 0x2A4C); HIDInformation = new GATTDefaultCharacteristic("HID Information", 0x2A4A); HipCircumference = new GATTDefaultCharacteristic("Hip Circumference", 0x2A8F); HTTPControlPoint = new GATTDefaultCharacteristic("HTTP Control Point", 0x2ABA); HTTPEntityBody = new GATTDefaultCharacteristic("HTTP Entity Body", 0x2AB9); HTTPHeaders = new GATTDefaultCharacteristic("HTTP Headers", 0x2AB7); HTTPStatusCode = new GATTDefaultCharacteristic("HTTP Status Code", 0x2AB8); HTTPSSecurity = new GATTDefaultCharacteristic("HTTPS Security", 0x2ABB); Humidity = new GATTDefaultCharacteristic("Humidity", 0x2A6F); IEEE11073_20601RegulatoryCertificationDataList = new GATTDefaultCharacteristic("20601 Regulatory Certification Data List", 0x2A2A); IndoorPositioningConfiguration = new GATTDefaultCharacteristic("Indoor Positioning Configuration", 0x2AAD); IntermediateCuffPressure = new GATTDefaultCharacteristic("Intermediate Cuff Pressure", 0x2A36); IntermediateTemperature = new GATTDefaultCharacteristic("Intermediate Temperature", 0x2A1E); Irradiance = new GATTDefaultCharacteristic("Irradiance", 0x2A77); Language = new GATTDefaultCharacteristic("Language", 0x2AA2); LastName = new GATTDefaultCharacteristic("Last Name", 0x2A90); Latitude = new GATTDefaultCharacteristic("Latitude", 0x2AAE); LNControlPoint = new GATTDefaultCharacteristic("LN Control Point", 0x2A6B); LNFeature = new GATTDefaultCharacteristic("LN Feature", 0x2A6A); LocalEastCoordinate = new GATTDefaultCharacteristic("Local East Coordinate", 0x2AB1); LocalNorthCoordinate = new GATTDefaultCharacteristic("Local North Coordinate", 0x2AB0); LocalTimeInformation = new GATTDefaultCharacteristic("Local Time Information", 0x2A0F); LocationandSpeed = new GATTDefaultCharacteristic("Location and Speed", 0x2A67); LocationName = new GATTDefaultCharacteristic("Location Name", 0x2AB5); Longitude = new GATTDefaultCharacteristic("Longitude", 0x2AAF); MagneticDeclination = new GATTDefaultCharacteristic("Magnetic Declination", 0x2A2C); MagneticFluxDensity2D = new GATTDefaultCharacteristic("Magnetic Flux Density - 2D", 0x2AA0); MagneticFluxDensity3D = new GATTDefaultCharacteristic("Magnetic Flux Density - 3D", 0x2AA1); ManufacturerNameString = new GATTDefaultCharacteristic("Manufacturer Name String", 0x2A29); MaximumRecommendedHeartRate = new GATTDefaultCharacteristic("Maximum Recommended Heart Rate", 0x2A91); MeasurementInterval = new GATTDefaultCharacteristic("Measurement Interval", 0x2A21); ModelNumberString = new GATTDefaultCharacteristic("Model Number String", 0x2A24); Navigation = new GATTDefaultCharacteristic("Navigation", 0x2A68); NewAlert = new GATTDefaultCharacteristic("New Alert", 0x2A46); ObjectActionControlPoint = new GATTDefaultCharacteristic("Object Action Control Point", 0x2AC5); ObjectChanged = new GATTDefaultCharacteristic("Object Changed", 0x2AC8); ObjectFirst_Created = new GATTDefaultCharacteristic("Object First-Created", 0x2AC1); ObjectID = new GATTDefaultCharacteristic("Object ID", 0x2AC3); ObjectLast_Modified = new GATTDefaultCharacteristic("Object Last-Modified", 0x2AC2); ObjectListControlPoint = new GATTDefaultCharacteristic("Object List Control Point", 0x2AC6); ObjectListFilter = new GATTDefaultCharacteristic("Object List Filter", 0x2AC7); ObjectName = new GATTDefaultCharacteristic("Object Name", 0x2ABE); ObjectProperties = new GATTDefaultCharacteristic("Object Properties", 0x2AC4); ObjectSize = new GATTDefaultCharacteristic("Object Size", 0x2AC0); ObjectType = new GATTDefaultCharacteristic("Object Type", 0x2ABF); OTSFeature = new GATTDefaultCharacteristic("OTS Feature", 0x2ABD); PeripheralPreferredConnectionParameters = new GATTDefaultCharacteristic("Peripheral Preferred Connection Parameters", 0x2A04); PeripheralPrivacyFlag = new GATTDefaultCharacteristic("Peripheral Privacy Flag", 0x2A02); PLXContinuousMeasurement = new GATTDefaultCharacteristic("PLX Continuous Measurement", 0x2A5F); PLXFeatures = new GATTDefaultCharacteristic("PLX Features", 0x2A60); PLXSpot_CheckMeasurement = new GATTDefaultCharacteristic("PLX Spot-Check Measurement", 0x2A5E); PnPID = new GATTDefaultCharacteristic("PnP ID", 0x2A50); PollenConcentration = new GATTDefaultCharacteristic("Pollen Concentration", 0x2A75); PositionQuality = new GATTDefaultCharacteristic("Position Quality", 0x2A69); Pressure = new GATTDefaultCharacteristic("Pressure", 0x2A6D); ProtocolMode = new GATTDefaultCharacteristic("Protocol Mode", 0x2A4E); Rainfall = new GATTDefaultCharacteristic("Rainfall", 0x2A78); ReconnectionAddress = new GATTDefaultCharacteristic("Reconnection Address", 0x2A03); RecordAccessControlPoint = new GATTDefaultCharacteristic("Record Access Control Point", 0x2A52); ReferenceTimeInformation = new GATTDefaultCharacteristic("Reference Time Information", 0x2A14); Report = new GATTDefaultCharacteristic("Report", 0x2A4D); ReportMap = new GATTDefaultCharacteristic("Report Map", 0x2A4B); ResolvablePrivateAddressOnly = new GATTDefaultCharacteristic("Resolvable Private Address Only", 0x2AC9); RestingHeartRate = new GATTDefaultCharacteristic("Resting Heart Rate", 0x2A92); RingerControlPoint = new GATTDefaultCharacteristic("Ringer Control Point", 0x2A40); RingerSetting = new GATTDefaultCharacteristic("Ringer Setting", 0x2A41); RSCFeature = new GATTDefaultCharacteristic("RSC Feature", 0x2A54); RSCMeasurement = new GATTDefaultCharacteristic("RSC Measurement", 0x2A53); SCControlPoint = new GATTDefaultCharacteristic("SC Control Point", 0x2A55); ScanIntervalWindow = new GATTDefaultCharacteristic("Scan Interval Window", 0x2A4F); ScanRefresh = new GATTDefaultCharacteristic("Scan Refresh", 0x2A31); SensorLocation = new GATTDefaultCharacteristic("Sensor Location", 0x2A5D); SerialNumberString = new GATTDefaultCharacteristic("Serial Number String", 0x2A25); ServiceChanged = new GATTDefaultCharacteristic("Service Changed", 0x2A05); SoftwareRevisionString = new GATTDefaultCharacteristic("Software Revision String", 0x2A28); SportTypeforAerobicandAnaerobicThresholds = new GATTDefaultCharacteristic("Sport Type for Aerobic and Anaerobic Thresholds", 0x2A93); SupportedNewAlertCategory = new GATTDefaultCharacteristic("Supported New Alert Category", 0x2A47); SupportedUnreadAlertCategory = new GATTDefaultCharacteristic("Supported Unread Alert Category", 0x2A48); SystemID = new GATTDefaultCharacteristic("System ID", 0x2A23); TDSControlPoint = new GATTDefaultCharacteristic("TDS Control Point", 0x2ABC); Temperature = new GATTDefaultCharacteristic("Temperature", 0x2A6E); TemperatureMeasurement = new GATTDefaultCharacteristic("Temperature Measurement", 0x2A1C); TemperatureType = new GATTDefaultCharacteristic("Temperature Type", 0x2A1D); ThreeZoneHeartRateLimits = new GATTDefaultCharacteristic("Three Zone Heart Rate Limits", 0x2A94); TimeAccuracy = new GATTDefaultCharacteristic("Time Accuracy", 0x2A12); TimeSource = new GATTDefaultCharacteristic("Time Source", 0x2A13); TimeUpdateControlPoint = new GATTDefaultCharacteristic("Time Update Control Point", 0x2A16); TimeUpdateState = new GATTDefaultCharacteristic("Time Update State", 0x2A17); TimewithDST = new GATTDefaultCharacteristic("Time with DST", 0x2A11); TimeZone = new GATTDefaultCharacteristic("Time Zone", 0x2A0E); TrueWindDirection = new GATTDefaultCharacteristic("True Wind Direction", 0x2A71); TrueWindSpeed = new GATTDefaultCharacteristic("True Wind Speed", 0x2A70); TwoZoneHeartRateLimit = new GATTDefaultCharacteristic("Two Zone Heart Rate Limit", 0x2A95); TxPowerLevel = new GATTDefaultCharacteristic("Tx Power Level", 0x2A07); Uncertainty = new GATTDefaultCharacteristic("Uncertainty", 0x2AB4); UnreadAlertStatus = new GATTDefaultCharacteristic("Unread Alert Status", 0x2A45); URI = new GATTDefaultCharacteristic("URI", 0x2AB6); UserControlPoint = new GATTDefaultCharacteristic("User Control Point", 0x2A9F); UserIndex = new GATTDefaultCharacteristic("User Index", 0x2A9A); UVIndex = new GATTDefaultCharacteristic("UV Index", 0x2A76); VO2Max = new GATTDefaultCharacteristic("VO2 Max", 0x2A96); WaistCircumference = new GATTDefaultCharacteristic("Waist Circumference", 0x2A97); Weight = new GATTDefaultCharacteristic("Weight", 0x2A98); WeightMeasurement = new GATTDefaultCharacteristic("Weight Measurement", 0x2A9D); WeightScaleFeature = new GATTDefaultCharacteristic("Weight Scale Feature", 0x2A9E); WindChill = new GATTDefaultCharacteristic("Wind Chill", 0x2A79); CharacteristicAggregateFormat = new GATTDefaultCharacteristic("Characteristic Aggregate Format", 0x2905); CharacteristicExtendedProperties = new GATTDefaultCharacteristic("Characteristic Extended Properties", 0x2900); CharacteristicPresentationFormat = new GATTDefaultCharacteristic("Characteristic Presentation Format", 0x2904); CharacteristicUserDescription = new GATTDefaultCharacteristic("Characteristic User Description", 0x2901); ClientCharacteristicConfiguration = new GATTDefaultCharacteristic("Client Characteristic Configuration", 0x2902); EnvironmentalSensingConfiguration = new GATTDefaultCharacteristic("Environmental Sensing Configuration", 0x290B); EnvironmentalSensingMeasurement = new GATTDefaultCharacteristic("Environmental Sensing Measurement", 0x290C); EnvironmentalSensingTriggerSetting = new GATTDefaultCharacteristic("Environmental Sensing Trigger Setting", 0x290D); ExternalReportReference = new GATTDefaultCharacteristic("External Report Reference", 0x2907); NumberofDigitals = new GATTDefaultCharacteristic("Number of Digitals", 0x2909); ReportReference = new GATTDefaultCharacteristic("Report Reference", 0x2908); ServerCharacteristicConfiguration = new GATTDefaultCharacteristic("Server Characteristic Configuration", 0x2903); TimeTriggerSetting = new GATTDefaultCharacteristic("Time Trigger Setting", 0x290E); ValidRange = new GATTDefaultCharacteristic("Valid Range", 0x2906); ValueTriggerSetting = new GATTDefaultCharacteristic("Value Trigger Setting", 0x290A); }