├── .gitignore ├── .travis.yml ├── CGMBLEKit Example ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── CommandQueue.swift ├── Info.plist ├── NSUserDefaults.swift ├── ViewController.swift ├── da.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── de.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── en.lproj │ ├── Localizable.strings │ └── Main.strings ├── es.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── fi.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── fr.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── he.lproj │ ├── InfoPlist.strings │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Main.strings ├── it.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── ja.lproj │ ├── Localizable.strings │ └── Main.strings ├── nb.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── nl.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── pl.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── pt-BR.lproj │ ├── Localizable.strings │ └── Main.strings ├── ro.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── ru.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── sk.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── sv.lproj │ ├── InfoPlist.strings │ ├── Localizable.strings │ └── Main.strings ├── tr.lproj │ ├── InfoPlist.strings │ ├── LaunchScreen.strings │ ├── Localizable.strings │ └── Main.strings ├── vi.lproj │ ├── Localizable.strings │ └── Main.strings └── zh-Hans.lproj │ ├── Localizable.strings │ └── Main.strings ├── CGMBLEKit.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── xcshareddata │ └── xcschemes │ ├── CGMBLEKit Example.xcscheme │ ├── ResetTransmitter.xcscheme │ ├── Shared-watchOS.xcscheme │ └── Shared.xcscheme ├── CGMBLEKit ├── AESCrypt.h ├── AESCrypt.m ├── Base.lproj │ └── Localizable.strings ├── BluetoothManager.swift ├── BluetoothServices.swift ├── CBPeripheral.swift ├── CGMBLEKit.h ├── Calibration.swift ├── CalibrationState.swift ├── Command.swift ├── Glucose+SensorDisplayable.swift ├── Glucose.swift ├── Info.plist ├── Messages │ ├── AuthChallengeRxMessage.swift │ ├── AuthChallengeTxMessage.swift │ ├── AuthRequestRxMessage.swift │ ├── AuthRequestTxMessage.swift │ ├── BatteryStatusTxMessage.swift │ ├── BondRequestTxMessage.swift │ ├── CalibrateGlucoseRxMessage.swift │ ├── CalibrateGlucoseTxMessage.swift │ ├── CalibrationDataRxMessage.swift │ ├── CalibrationDataTxMessage.swift │ ├── DisconnectTxMessage.swift │ ├── FirmwareVersionTxMessage.swift │ ├── GlucoseBackfillMessage.swift │ ├── GlucoseHistoryTxMessage.swift │ ├── GlucoseRxMessage.swift │ ├── GlucoseTxMessage.swift │ ├── KeepAliveTxMessage.swift │ ├── ResetMessage.swift │ ├── SessionStartRxMessage.swift │ ├── SessionStartTxMessage.swift │ ├── SessionStopRxMessage.swift │ ├── SessionStopTxMessage.swift │ ├── TransmitterMessage.swift │ ├── TransmitterTimeRxMessage.swift │ ├── TransmitterTimeTxMessage.swift │ ├── TransmitterVersionRxMessage.swift │ └── TransmitterVersionTxMessage.swift ├── NSData+CRC.swift ├── OSLog.swift ├── Opcode.swift ├── PeripheralManager+G5.swift ├── PeripheralManager.swift ├── PeripheralManagerError.swift ├── Transmitter.swift ├── TransmitterManager.swift ├── TransmitterManagerState.swift ├── TransmitterStatus.swift ├── ar.lproj │ └── Localizable.strings ├── cs.lproj │ └── Localizable.strings ├── da.lproj │ └── Localizable.strings ├── de.lproj │ └── Localizable.strings ├── es.lproj │ └── Localizable.strings ├── fi.lproj │ └── Localizable.strings ├── fr.lproj │ └── Localizable.strings ├── he.lproj │ └── Localizable.strings ├── hi.lproj │ └── Localizable.strings ├── it.lproj │ └── Localizable.strings ├── ja.lproj │ └── Localizable.strings ├── nb.lproj │ └── Localizable.strings ├── nl.lproj │ └── Localizable.strings ├── pl.lproj │ └── Localizable.strings ├── pt-BR.lproj │ └── Localizable.strings ├── ro.lproj │ └── Localizable.strings ├── ru.lproj │ └── Localizable.strings ├── sk.lproj │ └── Localizable.strings ├── sv.lproj │ └── Localizable.strings ├── tr.lproj │ └── Localizable.strings ├── vi.lproj │ └── Localizable.strings └── zh-Hans.lproj │ └── Localizable.strings ├── CGMBLEKitG5Plugin ├── CGMBLEKitG5Plugin-Bridging-Header.h ├── CGMBLEKitG5Plugin.swift └── Info.plist ├── CGMBLEKitG6Plugin ├── CGMBLEKitG6Plugin-Bridging-Header.h ├── CGMBLEKitG6Plugin.swift └── Info.plist ├── CGMBLEKitTests ├── CalibrationDataRxMessageTests.swift ├── GlucoseBackfillMessageTests.swift ├── GlucoseRxMessageTests.swift ├── GlucoseTests.swift ├── Info.plist ├── SessionStartRxMessageTests.swift ├── SessionStopRxMessageTests.swift ├── TransmitterIDTests.swift ├── TransmitterTimeRxMessageTests.swift └── TransmitterVersionRxMessageTests.swift ├── CGMBLEKitUI ├── Assets.xcassets │ ├── Contents.json │ └── g6.imageset │ │ ├── Contents.json │ │ └── g6.png ├── Base.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.storyboard ├── CGMBLEKitUI.h ├── IdentifiableClass.swift ├── Info.plist ├── TransmitterIDSetupViewController.swift ├── TransmitterManager+UI.swift ├── TransmitterSettingsViewController.swift ├── TransmitterSetupViewController.swift ├── UIColor.swift ├── ar.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── cs.lproj │ └── Localizable.strings ├── da.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── de.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── en.lproj │ └── TransmitterManagerSetup.strings ├── es.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── fi.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── fr.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── he.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── hi.lproj │ └── Localizable.strings ├── it.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── ja.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── nb.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── nl.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── pl.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── pt-BR.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── ro.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── ru.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── sk.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── sv.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── tr.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── vi.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings └── zh-Hans.lproj │ ├── Localizable.strings │ └── TransmitterManagerSetup.strings ├── CODE_OF_CONDUCT.md ├── Common ├── Data.swift ├── HKUnit.swift ├── LocalizedString.swift ├── Locked.swift └── TimeInterval.swift ├── LICENSE ├── Pod └── CGMBLEKit.h ├── README.md └── ResetTransmitter ├── AppDelegate.swift ├── Assets.xcassets ├── AppIcon.appiconset │ ├── Contents.json │ ├── Icon-24@2x.png │ ├── Icon-27.5@2x.png │ ├── Icon-29@2x.png │ ├── Icon-29@3x.png │ ├── Icon-40@2x.png │ ├── Icon-44@2x.png │ ├── Icon-86@2x.png │ ├── Icon-98@2x.png │ ├── Icon-App-20x20@1x.png │ ├── Icon-App-20x20@2x-1.png │ ├── Icon-App-20x20@2x.png │ ├── Icon-App-20x20@3x.png │ ├── Icon-App-29x29@1x.png │ ├── Icon-App-29x29@2x-1.png │ ├── Icon-App-29x29@2x.png │ ├── Icon-App-29x29@3x.png │ ├── Icon-App-40x40@1x.png │ ├── Icon-App-40x40@2x-1.png │ ├── Icon-App-40x40@2x.png │ ├── Icon-App-40x40@3x.png │ ├── Icon-App-60x60@2x.png │ ├── Icon-App-60x60@3x.png │ ├── Icon-App-76x76@1x.png │ ├── Icon-App-76x76@2x.png │ ├── Icon-App-83.5x83.5@2x.png │ └── ItunesArtwork@2x.png └── Contents.json ├── Base.lproj ├── LaunchScreen.storyboard └── Main.storyboard ├── CompletionViewController.swift ├── Info.plist ├── ResetManager.swift ├── ResetViewController.swift ├── Views ├── Button.swift ├── ParagraphView.swift └── TextField.swift ├── ar.lproj └── Localizable.strings ├── cs.lproj └── Localizable.strings ├── da.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── de.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── en.lproj ├── Localizable.strings └── Main.strings ├── es.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── fi.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── fr.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── he.lproj ├── InfoPlist.strings ├── LaunchScreen.strings ├── Localizable.strings └── Main.strings ├── hi.lproj └── Localizable.strings ├── it.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── ja.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── nb.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── nl.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── pl.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── pt-BR.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── ro.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── ru.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── sk.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── sv.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings ├── tr.lproj ├── InfoPlist.strings ├── LaunchScreen.strings ├── Localizable.strings └── Main.strings ├── vi.lproj ├── InfoPlist.strings ├── Localizable.strings └── Main.strings └── zh-Hans.lproj ├── Localizable.strings └── Main.strings /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | 34 | Pods/ 35 | Carthage/ 36 | .gitmodules 37 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode12.2 3 | 4 | before_script: 5 | - ./Scripts/carthage.sh bootstrap 6 | 7 | script: 8 | # Build frameworks and run tests 9 | - travis_wait 25 xcodebuild -project CGMBLEKit.xcodeproj -scheme Shared build -destination name="iPhone 8" test | xcpretty 10 | # Build apps 11 | - xcodebuild -project CGMBLEKit.xcodeproj -scheme "CGMBLEKit Example" build -destination name="iPhone 8" | xcpretty 12 | - xcodebuild -project CGMBLEKit.xcodeproj -scheme ResetTransmitter build -destination name="iPhone 8" 13 | 14 | -------------------------------------------------------------------------------- /CGMBLEKit Example/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CGMBLEKit Example/CommandQueue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommandQueue.swift 3 | // CGMBLEKit Example 4 | // 5 | // Created by Paul Dickens on 25/03/2018. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CGMBLEKit 11 | 12 | 13 | class CommandQueue { 14 | private var list = Array() 15 | private var lock = os_unfair_lock() 16 | 17 | func enqueue(_ element: Command) { 18 | os_unfair_lock_lock(&lock) 19 | list.append(element) 20 | os_unfair_lock_unlock(&lock) 21 | } 22 | 23 | func dequeue() -> Command? { 24 | os_unfair_lock_lock(&lock) 25 | defer { 26 | os_unfair_lock_unlock(&lock) 27 | } 28 | if !list.isEmpty { 29 | return list.removeFirst() 30 | } else { 31 | return nil 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /CGMBLEKit Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 3.2 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIBackgroundModes 24 | 25 | bluetooth-central 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /CGMBLEKit Example/NSUserDefaults.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSUserDefaults.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 11/24/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | extension UserDefaults { 13 | var passiveModeEnabled: Bool { 14 | get { 15 | return bool(forKey: "passiveModeEnabled") 16 | } 17 | set { 18 | set(newValue, forKey: "passiveModeEnabled") 19 | } 20 | } 21 | 22 | var stayConnected: Bool { 23 | get { 24 | return object(forKey: "stayConnected") != nil ? bool(forKey: "stayConnected") : true 25 | } 26 | set { 27 | set(newValue, forKey: "stayConnected") 28 | } 29 | } 30 | 31 | var transmitterID: String { 32 | get { 33 | return string(forKey: "transmitterID") ?? "500000" 34 | } 35 | set { 36 | set(newValue, forKey: "transmitterID") 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /CGMBLEKit Example/da.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Eksempel på CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Backfill"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Fejl"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Ukendte data"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/da.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Kør sammen med G5-appen"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Sender ID"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Venter på første aflæsning"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Start"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrer"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Forbliv forbundet"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/de.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Beispiel"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Auffüllen"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Fehler"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Unbekannte Daten"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/de.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Neben G5-App ausführen"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Transmitter-ID"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Warte auf den ersten Wert"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Start"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrieren"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stopp"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Verbunden bleiben"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Backfill"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Error"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Unknown Data"; 9 | -------------------------------------------------------------------------------- /CGMBLEKit Example/en.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 3 | "3i8-2m-QFG.text" = "Run alongside G5 app"; 4 | 5 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 6 | "5y6-vU-qC3.text" = "Transmitter ID"; 7 | 8 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 9 | "9p7-LX-EMK.text" = "Waiting for first reading"; 10 | 11 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 12 | "HEQ-Bp-kx7.normalTitle" = "Start"; 13 | 14 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 15 | "HYW-Ex-7LC.normalTitle" = "Calibrate"; 16 | 17 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 18 | "JAM-9K-KeE.normalTitle" = "Stop"; 19 | 20 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 21 | "NSs-9e-3Sl.text" = "Stay connected"; 22 | 23 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 24 | "e0T-ru-tWD.text" = "500000"; 25 | 26 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 27 | "zAF-A7-1Oc.text" = "––"; 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/es.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Ejemplo de CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Rellenar"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Error"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Datos desconocidos"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/es.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Ejecutar junto con la aplicación del G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Identificación del transmisor"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Esperando el primero dato"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Comenzar"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Calibrar"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Parar"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Mantenerse conectado"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit esimerkki"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Täyttö"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Virhe"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Tuntematon tieto"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fi.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Käytä G5-sovelluksen rinnalla"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Lähettimen tunniste"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Odotetaan ensimmäistä lukemaa"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Aloita"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibroi"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Pysäytä"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Pidä yhdistettynä"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Exemple CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Récupération des données antérieures"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Erreur"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Donnée inconnue"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/fr.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Exécuter en même temps que l'application G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID du transmetteur"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "En attente de la première mesure"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Commencer"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Étalonner"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Arrêter"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Rester connecté"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/he.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Example"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/he.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /CGMBLEKit Example/he.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "מילוי לאחור"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "שגיאה"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "מידע לא ידוע"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/he.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "רוץ לצד אפליקציית G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "מזהה משדר"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "ממתין לקריאה ראשונה"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "התחל"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "כייל"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "עצור"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "הישאר מחובר"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/it.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "esempio CGMBLE kit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Riempimento"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Errore"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Unknown Data"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/it.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Esegui insieme all’app G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID trasmettitore"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "In attesa della prima lettura"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Avvia"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Calibra"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Interrompi"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Rimani connesso"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "埋め戻し"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "エラー"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "不明なデータ"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ja.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "G5アプリのそばで使用してください"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "トランスミッタ ID"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "最初の読み取りを待っています"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "開始"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "較正"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "停止"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "接続を維持"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nb.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Eksempel"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nb.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Hent historikk"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Feil"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Ukjent data"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nb.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Kjør parallelt med G5 app"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Sender ID"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Venter på første måling"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Start"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrer"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Vær tilkoblet"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Voorbeeld"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Aanvullen"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Fout"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Onbekende Gegevens"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/nl.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Gebruik tegelijk met G5 app"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Zenderserienummer"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Wachten op eerste meting"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Start"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibreren"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Blijf verbonden"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/pl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Example"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Backfill"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Błąd"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Unknown Data"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/pl.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Uruchom aplikację G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID nadajnika"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Czekam na pierwszy odczyt"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Start"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibruj"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Nie rozłączaj się"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/pt-BR.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Preenchimento"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Erro"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Dados Desconhecidos"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/pt-BR.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Executa em paralelo com o aplicativo G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID do Transmissor"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Esperando a primeira leitura"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Iniciar"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Calibrar"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Parar"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Permanecer conectado"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ro.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Exemplu CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ro.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Completare retroactivă"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Eroare"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Date necunoscute"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ro.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Rulează împreună cu aplicația G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID transmițător"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Se așteaptă prima citire"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Pornește"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Calibrează"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Păstrează conexiunea"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ru.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Пример CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Заполнение данными"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Ошибка"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Неизвестные данные"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/ru.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Запустить совместно с приложением G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID трансмиттера"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Ожидание первого показания"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Начать"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Калибровка"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Стоп"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Оставайтесь подключенными"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "Príklad CGMBLEKit"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sk.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during error response */ 2 | "Error" = "Chyba"; 3 | 4 | /* Title displayed during unknown data response */ 5 | "Unknown Data" = "Neznáme dáta"; 6 | 7 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sk.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Beží spolu s aplikáciou G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "ID vysielača"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Čaká sa na prvé načítanie"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Štart"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrovať"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stop"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Zostať pripojený"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sv.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Example"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sv.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Fyller i historisk data"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Fel"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Okänd data"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/sv.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Kör samtidigt som G5-appen"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Sändari-ID"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Väntar på första värdet"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Starta"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrera"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Stoppa"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Fortsätt att vara ansluten"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/tr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle name */ 2 | "CFBundleName" = "CGMBLEKit Örneği"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit Example/tr.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /CGMBLEKit Example/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Dolgu"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Hata"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Bilinmeyen Veri"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/tr.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "G5 uygulamasıyla birlikte çalıştırın"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Verici Kimliği"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "İlk okuma bekleniyor.."; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Başlat"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Kalibrasyon"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Durdur"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Bağlı kalın"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "Lấp đầy"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "Lỗi"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "Không nhận biết dữ liệu"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/vi.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "Chạy song song cùng ứng dụng G5"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "Số ID của Transmitter"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "Đang đợi đọc kết quả đầu tiên"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "Bắt đầu"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "Hiệu chỉnh"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "Dừng lại"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "Giữ kết nối"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit Example/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title displayed during backfill response */ 2 | "Backfill" = "数据回填"; 3 | 4 | /* Title displayed during error response */ 5 | "Error" = "错误"; 6 | 7 | /* Title displayed during unknown data response */ 8 | "Unknown Data" = "未知数据"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit Example/zh-Hans.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */ 2 | "3i8-2m-QFG.text" = "与G5 App同时使用"; 3 | 4 | /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */ 5 | "5y6-vU-qC3.text" = "发射器编号"; 6 | 7 | /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */ 8 | "9p7-LX-EMK.text" = "输入第一个校准值"; 9 | 10 | /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */ 11 | "e0T-ru-tWD.text" = "500000"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */ 14 | "HEQ-Bp-kx7.normalTitle" = "启动"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */ 17 | "HYW-Ex-7LC.normalTitle" = "校准"; 18 | 19 | /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */ 20 | "JAM-9K-KeE.normalTitle" = "停止"; 21 | 22 | /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */ 23 | "NSs-9e-3Sl.text" = "保持连接"; 24 | 25 | /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */ 26 | "zAF-A7-1Oc.text" = "––"; 27 | 28 | -------------------------------------------------------------------------------- /CGMBLEKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CGMBLEKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CGMBLEKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CGMBLEKit/AESCrypt.h: -------------------------------------------------------------------------------- 1 | // 2 | // AESCrypt.h 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 6/17/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AESCrypt : NSObject 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | + (nullable NSData *)encryptData:(NSData *)data usingKey:(NSData *)key error:(NSError **)error; 16 | 17 | NS_ASSUME_NONNULL_END 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /CGMBLEKit/AESCrypt.m: -------------------------------------------------------------------------------- 1 | // 2 | // AESCrypt.m 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 6/17/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | #import "AESCrypt.h" 10 | #import 11 | 12 | @implementation AESCrypt 13 | 14 | + (NSData *)encryptData:(NSData *)data usingKey:(NSData *)key error:(NSError * _Nullable __autoreleasing *)error 15 | { 16 | NSMutableData *dataOut = [NSMutableData dataWithLength: data.length + kCCBlockSizeAES128]; 17 | 18 | CCCryptorStatus status = CCCrypt(kCCEncrypt, 19 | kCCAlgorithmAES, 20 | kCCOptionECBMode, 21 | key.bytes, 22 | key.length, 23 | NULL, 24 | data.bytes, 25 | data.length, 26 | dataOut.mutableBytes, 27 | dataOut.length, 28 | NULL); 29 | 30 | return status == kCCSuccess ? dataOut : nil; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CGMBLEKit/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Glucose data is unavailable"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Low Battery"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* Timeout error description */ 17 | "Peripheral did not respond in time" = "Peripheral did not respond in time"; 18 | 19 | /* Not ready error description */ 20 | "Peripheral isnʼt connected" = "Peripheral isnʼt connected"; 21 | 22 | /* The description of sensor calibration state when sensor calibration is ok. */ 23 | "Sensor calibration is OK" = "Sensor calibration is OK"; 24 | 25 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 26 | "Sensor is in unknown state %1$d" = "Sensor is in unknown state %1$d"; 27 | 28 | /* The description of sensor calibration state when sensor sensor is stopped. */ 29 | "Sensor is stopped" = "Sensor is stopped"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is warming up. */ 32 | "Sensor is warming up" = "Sensor is warming up"; 33 | 34 | /* The description of sensor calibration state when sensor needs calibration. */ 35 | "Sensor needs calibration" = "Sensor needs calibration"; 36 | 37 | /* Error description */ 38 | "Unknown characteristic" = "Unknown characteristic"; 39 | 40 | -------------------------------------------------------------------------------- /CGMBLEKit/CBPeripheral.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CBPeripheral.swift 3 | // xDripG5 4 | // 5 | // Copyright © 2017 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import CoreBluetooth 9 | 10 | 11 | // MARK: - Discovery helpers. 12 | extension CBPeripheral { 13 | func servicesToDiscover(from serviceUUIDs: [CBUUID]) -> [CBUUID] { 14 | let knownServiceUUIDs = services?.compactMap({ $0.uuid }) ?? [] 15 | return serviceUUIDs.filter({ !knownServiceUUIDs.contains($0) }) 16 | } 17 | 18 | func characteristicsToDiscover(from characteristicUUIDs: [CBUUID], for service: CBService) -> [CBUUID] { 19 | let knownCharacteristicUUIDs = service.characteristics?.compactMap({ $0.uuid }) ?? [] 20 | return characteristicUUIDs.filter({ !knownCharacteristicUUIDs.contains($0) }) 21 | } 22 | } 23 | 24 | 25 | extension Collection where Element: CBAttribute { 26 | func itemWithUUID(_ uuid: CBUUID) -> Element? { 27 | for attribute in self { 28 | if attribute.uuid == uuid { 29 | return attribute 30 | } 31 | } 32 | 33 | return nil 34 | } 35 | 36 | func itemWithUUIDString(_ uuidString: String) -> Element? { 37 | for attribute in self { 38 | if attribute.uuid.uuidString == uuidString { 39 | return attribute 40 | } 41 | } 42 | 43 | return nil 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /CGMBLEKit/CGMBLEKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // CGMBLEKit.h 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 12/30/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | //! Project version number for CGMBLEKIt. 13 | FOUNDATION_EXPORT double CGMBLEKitVersionNumber; 14 | 15 | //! Project version string for CGMBLEKit. 16 | FOUNDATION_EXPORT const unsigned char CGMBLEKitVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /CGMBLEKit/Calibration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Calibration.swift 3 | // xDripG5 4 | // 5 | // Created by Paul Dickens on 17/03/2018. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import HealthKit 11 | 12 | 13 | public struct Calibration { 14 | init?(calibrationMessage: CalibrationDataRxMessage, activationDate: Date) { 15 | guard calibrationMessage.glucose > 0 else { 16 | return nil 17 | } 18 | 19 | let unit = HKUnit.milligramsPerDeciliter 20 | 21 | glucose = HKQuantity(unit: unit, doubleValue: Double(calibrationMessage.glucose)) 22 | date = activationDate.addingTimeInterval(TimeInterval(calibrationMessage.timestamp)) 23 | } 24 | 25 | public let glucose: HKQuantity 26 | public let date: Date 27 | } 28 | -------------------------------------------------------------------------------- /CGMBLEKit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/AuthChallengeRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthChallengeRxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/22/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct AuthChallengeRxMessage: TransmitterRxMessage { 13 | let isAuthenticated: Bool 14 | let isBonded: Bool 15 | 16 | init?(data: Data) { 17 | guard data.count >= 3 else { 18 | return nil 19 | } 20 | 21 | guard data.starts(with: .authChallengeRx) else { 22 | return nil 23 | } 24 | 25 | isAuthenticated = data[1] == 0x1 26 | isBonded = data[2] == 0x1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/AuthChallengeTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthChallengeTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/22/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct AuthChallengeTxMessage: TransmitterTxMessage { 13 | let challengeHash: Data 14 | 15 | var data: Data { 16 | var data = Data(for: .authChallengeTx) 17 | data.append(challengeHash) 18 | return data 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/AuthRequestRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthRequestRxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/22/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct AuthRequestRxMessage: TransmitterRxMessage { 13 | let tokenHash: Data 14 | let challenge: Data 15 | 16 | init?(data: Data) { 17 | guard data.count >= 17 else { 18 | return nil 19 | } 20 | 21 | guard data.starts(with: .authRequestRx) else { 22 | return nil 23 | } 24 | 25 | tokenHash = data.subdata(in: 1..<9) 26 | challenge = data.subdata(in: 9..<17) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/AuthRequestTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthRequestTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/22/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct AuthRequestTxMessage: TransmitterTxMessage { 13 | let singleUseToken: Data 14 | let endByte: UInt8 = 0x2 15 | 16 | init() { 17 | let uuid = UUID().uuid 18 | 19 | singleUseToken = Data([uuid.0, uuid.1, uuid.2, uuid.3, 20 | uuid.4, uuid.5, uuid.6, uuid.7]) 21 | } 22 | 23 | var data: Data { 24 | var data = Data(for: .authRequestTx) 25 | data.append(singleUseToken) 26 | data.append(endByte) 27 | return data 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/BatteryStatusTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BatteryStatusTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct BatteryStatusTxMessage { 13 | let opcode: Opcode = .batteryStatusTx 14 | 15 | // Response: 23003c012f01cd021f247bae 16 | } 17 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/BondRequestTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BondRequestTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | /// Initiates a bond with the central 13 | struct BondRequestTxMessage: TransmitterTxMessage { 14 | var data: Data { 15 | return Data(for: .bondRequest) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/CalibrateGlucoseRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CalibrateGlucoseRxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Paul Dickens on 25/02/2018. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | public struct CalibrateGlucoseRxMessage: TransmitterRxMessage { 13 | init?(data: Data) { 14 | guard data.count == 5 && data.isCRCValid else { 15 | return nil 16 | } 17 | 18 | guard data.starts(with: .calibrateGlucoseRx) else { 19 | return nil 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/CalibrateGlucoseTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CalibrateGlucoseTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct CalibrateGlucoseTxMessage: RespondableMessage { 13 | typealias Response = CalibrateGlucoseRxMessage 14 | 15 | let time: UInt32 16 | let glucose: UInt16 17 | 18 | var data: Data { 19 | var data = Data(for: .calibrateGlucoseTx) 20 | data.append(glucose) 21 | data.append(time) 22 | return data.appendingCRC() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/CalibrationDataRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CalibrationDataRxMessage.swift 3 | // Pods 4 | // 5 | // Created by Nate Racklyeft on 9/18/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct CalibrationDataRxMessage: TransmitterRxMessage { 13 | let glucose: UInt16 14 | let timestamp: UInt32 15 | 16 | init?(data: Data) { 17 | guard data.count == 19 && data.isCRCValid else { 18 | return nil 19 | } 20 | 21 | guard data.starts(with: .calibrationDataRx) else { 22 | return nil 23 | } 24 | 25 | glucose = data[11..<13].toInt() & 0xfff 26 | timestamp = data[13..<17].toInt() 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/CalibrationDataTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CalibrationDataTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Paul Dickens on 17/03/2018. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct CalibrationDataTxMessage: RespondableMessage { 13 | typealias Response = CalibrationDataRxMessage 14 | 15 | var data: Data { 16 | return Data(for: .calibrationDataTx).appendingCRC() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/DisconnectTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DisconnectTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct DisconnectTxMessage: TransmitterTxMessage { 13 | var data: Data { 14 | return Data(for: .disconnectTx) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/FirmwareVersionTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FirmwareVersionTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct FirmwareVersionTxMessage { 13 | let opcode: Opcode = .firmwareVersionTx 14 | } 15 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/GlucoseHistoryTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GlucoseHistoryTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct GlucoseHistoryTxMessage { 13 | let opcode: Opcode = .glucoseHistoryTx 14 | } 15 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/GlucoseTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GlucoseTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct GlucoseTxMessage: RespondableMessage { 13 | typealias Response = GlucoseRxMessage 14 | 15 | var data: Data { 16 | return Data(for: .glucoseTx).appendingCRC() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/KeepAliveTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeepAliveTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct KeepAliveTxMessage: TransmitterTxMessage { 13 | let time: UInt8 14 | 15 | var data: Data { 16 | var data = Data(for: .keepAlive) 17 | data.append(time) 18 | return data 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/ResetMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ResetMessage.swift 3 | // xDripG5 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import Foundation 9 | 10 | 11 | struct ResetTxMessage: RespondableMessage { 12 | typealias Response = ResetRxMessage 13 | 14 | var data: Data { 15 | return Data(for: .resetTx).appendingCRC() 16 | } 17 | } 18 | 19 | 20 | struct ResetRxMessage: TransmitterRxMessage { 21 | let status: UInt8 22 | 23 | init?(data: Data) { 24 | guard data.count >= 2, data.starts(with: .resetRx) else { 25 | return nil 26 | } 27 | 28 | status = data[1] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/SessionStartRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStartRxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 6/4/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct SessionStartRxMessage: TransmitterRxMessage { 13 | let status: UInt8 14 | let received: UInt8 15 | 16 | // I've only seen examples of these 2 values matching 17 | let requestedStartTime: UInt32 18 | let sessionStartTime: UInt32 19 | 20 | let transmitterTime: UInt32 21 | 22 | init?(data: Data) { 23 | guard data.count == 17 && data.isCRCValid else { 24 | return nil 25 | } 26 | 27 | guard data.starts(with: .sessionStartRx) else { 28 | return nil 29 | } 30 | 31 | status = data[1] 32 | received = data[2] 33 | requestedStartTime = data[3..<7].toInt() 34 | sessionStartTime = data[7..<11].toInt() 35 | transmitterTime = data[11..<15].toInt() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/SessionStartTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStartTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct SessionStartTxMessage: RespondableMessage { 13 | typealias Response = SessionStartRxMessage 14 | 15 | /// Time since activation in Dex seconds 16 | let startTime: UInt32 17 | 18 | /// Time in seconds since Unix Epoch 19 | let secondsSince1970: UInt32 20 | 21 | var data: Data { 22 | var data = Data(for: .sessionStartTx) 23 | data.append(startTime) 24 | data.append(secondsSince1970) 25 | return data.appendingCRC() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/SessionStopRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStopRxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 6/4/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct SessionStopRxMessage: TransmitterRxMessage { 13 | let status: UInt8 14 | let received: UInt8 15 | let sessionStopTime: UInt32 16 | let sessionStartTime: UInt32 17 | let transmitterTime: UInt32 18 | 19 | init?(data: Data) { 20 | guard data.count == 17 && data.isCRCValid else { 21 | return nil 22 | } 23 | 24 | guard data.starts(with: .sessionStopRx) else { 25 | return nil 26 | } 27 | 28 | status = data[1] 29 | received = data[2] 30 | sessionStopTime = data[3..<7].toInt() 31 | sessionStartTime = data[7..<11].toInt() 32 | transmitterTime = data[11..<15].toInt() 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/SessionStopTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStopTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct SessionStopTxMessage: RespondableMessage { 13 | typealias Response = SessionStopRxMessage 14 | 15 | let stopTime: UInt32 16 | 17 | var data: Data { 18 | var data = Data(for: .sessionStopTx) 19 | data.append(stopTime) 20 | return data.appendingCRC() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/TransmitterMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterCommand.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/22/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | /// A data sequence written to the transmitter 13 | protocol TransmitterTxMessage { 14 | 15 | /// The data to write 16 | var data: Data { get } 17 | 18 | } 19 | 20 | 21 | protocol RespondableMessage: TransmitterTxMessage { 22 | associatedtype Response: TransmitterRxMessage 23 | } 24 | 25 | 26 | /// A data sequence received by the transmitter 27 | protocol TransmitterRxMessage { 28 | 29 | 30 | init?(data: Data) 31 | 32 | } 33 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/TransmitterTimeRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterTimeRxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct TransmitterTimeRxMessage: TransmitterRxMessage { 13 | let status: UInt8 14 | let currentTime: UInt32 15 | let sessionStartTime: UInt32 16 | 17 | init?(data: Data) { 18 | guard data.count == 16 && data.isCRCValid else { 19 | return nil 20 | } 21 | 22 | guard data.starts(with: .transmitterTimeRx) else { 23 | return nil 24 | } 25 | 26 | status = data[1] 27 | currentTime = data[2..<6].toInt() 28 | sessionStartTime = data[6..<10].toInt() 29 | 30 | } 31 | } 32 | 33 | extension TransmitterTimeRxMessage: Equatable { } 34 | 35 | func ==(lhs: TransmitterTimeRxMessage, rhs: TransmitterTimeRxMessage) -> Bool { 36 | return lhs.currentTime == rhs.currentTime 37 | } 38 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/TransmitterTimeTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterTimeTxMessage.swift 3 | // xDrip5 4 | // 5 | // Created by Nathan Racklyeft on 11/23/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct TransmitterTimeTxMessage: RespondableMessage { 13 | typealias Response = TransmitterTimeRxMessage 14 | 15 | var data: Data { 16 | return Data(for: .transmitterTimeTx).appendingCRC() 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/TransmitterVersionRxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterVersionRxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 9/29/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct TransmitterVersionRxMessage: TransmitterRxMessage { 13 | let status: UInt8 14 | let firmwareVersion: [UInt8] 15 | 16 | init?(data: Data) { 17 | guard data.count == 19 && data.isCRCValid else { 18 | return nil 19 | } 20 | 21 | guard data.starts(with: .transmitterVersionRx) else { 22 | return nil 23 | } 24 | 25 | status = data[1] 26 | firmwareVersion = data[2..<6].map { $0 } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /CGMBLEKit/Messages/TransmitterVersionTxMessage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterVersionTxMessage.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct TransmitterVersionTxMessage { 13 | typealias Response = TransmitterVersionRxMessage 14 | 15 | let opcode: Opcode = .transmitterVersionTx 16 | } 17 | -------------------------------------------------------------------------------- /CGMBLEKit/NSData+CRC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+CRC.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 4/7/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | /** 13 | CRC-CCITT (XModem) 14 | 15 | [http://www.lammertbies.nl/comm/info/crc-calculation.html]() 16 | 17 | [http://web.mit.edu/6.115/www/amulet/xmodem.htm]() 18 | */ 19 | extension Collection where Element == UInt8 { 20 | private var crcCCITTXModem: UInt16 { 21 | var crc: UInt16 = 0 22 | 23 | for byte in self { 24 | crc ^= UInt16(byte) << 8 25 | 26 | for _ in 0..<8 { 27 | if crc & 0x8000 != 0 { 28 | crc = crc << 1 ^ 0x1021 29 | } else { 30 | crc = crc << 1 31 | } 32 | } 33 | } 34 | 35 | return crc 36 | } 37 | 38 | var crc16: UInt16 { 39 | return crcCCITTXModem 40 | } 41 | } 42 | 43 | 44 | extension UInt8 { 45 | var crc16: UInt16 { 46 | return [self].crc16 47 | } 48 | } 49 | 50 | 51 | extension Data { 52 | var isCRCValid: Bool { 53 | return dropLast(2).crc16 == suffix(2).toInt() 54 | } 55 | 56 | func appendingCRC() -> Data { 57 | var data = self 58 | data.append(crc16) 59 | return data 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /CGMBLEKit/OSLog.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OSLog.swift 3 | // Loop 4 | // 5 | // Copyright © 2017 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import os.log 9 | 10 | 11 | extension OSLog { 12 | convenience init(category: String) { 13 | self.init(subsystem: "com.loopkit.CGMBLEKit", category: category) 14 | } 15 | 16 | func debug(_ message: StaticString, _ args: CVarArg...) { 17 | log(message, type: .debug, args) 18 | } 19 | 20 | func info(_ message: StaticString, _ args: CVarArg...) { 21 | log(message, type: .info, args) 22 | } 23 | 24 | func `default`(_ message: StaticString, _ args: CVarArg...) { 25 | log(message, type: .default, args) 26 | } 27 | 28 | func error(_ message: StaticString, _ args: CVarArg...) { 29 | log(message, type: .error, args) 30 | } 31 | 32 | private func log(_ message: StaticString, type: OSLogType, _ args: [CVarArg]) { 33 | switch args.count { 34 | case 0: 35 | os_log(message, log: self, type: type) 36 | case 1: 37 | os_log(message, log: self, type: type, args[0]) 38 | case 2: 39 | os_log(message, log: self, type: type, args[0], args[1]) 40 | case 3: 41 | os_log(message, log: self, type: type, args[0], args[1], args[2]) 42 | case 4: 43 | os_log(message, log: self, type: type, args[0], args[1], args[2], args[3]) 44 | case 5: 45 | os_log(message, log: self, type: type, args[0], args[1], args[2], args[3], args[4]) 46 | default: 47 | os_log(message, log: self, type: type, args) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /CGMBLEKit/PeripheralManagerError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PeripheralManagerError.swift 3 | // xDripG5 4 | // 5 | // Copyright © 2017 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import CoreBluetooth 9 | 10 | 11 | enum PeripheralManagerError: Error { 12 | case cbPeripheralError(Error) 13 | case notReady 14 | case invalidConfiguration 15 | case timeout 16 | case unknownCharacteristic 17 | } 18 | 19 | 20 | extension PeripheralManagerError: LocalizedError { 21 | var errorDescription: String? { 22 | switch self { 23 | case .cbPeripheralError(let error): 24 | return error.localizedDescription 25 | case .notReady: 26 | return LocalizedString("Peripheral isnʼt connected", comment: "Not ready error description") 27 | case .invalidConfiguration: 28 | return LocalizedString("Peripheral command was invalid", comment: "invlid config error description") 29 | case .timeout: 30 | return LocalizedString("Peripheral did not respond in time", comment: "Timeout error description") 31 | case .unknownCharacteristic: 32 | return LocalizedString("Unknown characteristic", comment: "Error description") 33 | } 34 | } 35 | 36 | var failureReason: String? { 37 | switch self { 38 | case .cbPeripheralError(let error as NSError): 39 | return error.localizedFailureReason 40 | default: 41 | return errorDescription 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /CGMBLEKit/TransmitterStatus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterStatus.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 3/26/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | public enum TransmitterStatus { 13 | public typealias RawValue = UInt8 14 | 15 | case ok 16 | case lowBattery 17 | case unknown(RawValue) 18 | 19 | init(rawValue: RawValue) { 20 | switch rawValue { 21 | case 0: 22 | self = .ok 23 | case 0x81: 24 | self = .lowBattery 25 | default: 26 | self = .unknown(rawValue) 27 | } 28 | } 29 | } 30 | 31 | 32 | extension TransmitterStatus: Equatable { } 33 | 34 | public func ==(lhs: TransmitterStatus, rhs: TransmitterStatus) -> Bool { 35 | switch (lhs, rhs) { 36 | case (.ok, .ok), (.lowBattery, .lowBattery): 37 | return true 38 | case (.unknown(let left), .unknown(let right)) where left == right: 39 | return true 40 | default: 41 | return false 42 | } 43 | } 44 | 45 | 46 | extension TransmitterStatus { 47 | public var localizedDescription: String { 48 | switch self { 49 | case .ok: 50 | return LocalizedString("OK", comment: "Describes a functioning transmitter") 51 | case .lowBattery: 52 | return LocalizedString("Low Battery", comment: "Describes a low battery") 53 | case .unknown(let value): 54 | return "TransmitterStatus.unknown(\(value))" 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /CGMBLEKit/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Describes a functioning transmitter */ 2 | "OK" = "موافق"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKit/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Error description for unreliable state */ 2 | "Glucose data is unavailable" = "Údaje o glukóze nejsou k dispozici"; 3 | 4 | /* Describes a low battery */ 5 | "Low Battery" = "Vybitá baterie"; 6 | 7 | /* Describes a functioning transmitter */ 8 | "OK" = "OK"; 9 | 10 | /* Timeout error description */ 11 | "Peripheral did not respond in time" = "Periferní zařízení nereagovalo včas"; 12 | 13 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 14 | "Sensor is in unknown state %1$d" = "Senzor je v neznámém stavu %1$d"; 15 | 16 | /* The description of sensor calibration state when sensor sensor is stopped. */ 17 | "Sensor is stopped" = "Senzor je zastaven"; 18 | 19 | /* The description of sensor calibration state when sensor sensor is warming up. */ 20 | "Sensor is warming up" = "Senzor se zahřívá"; 21 | 22 | -------------------------------------------------------------------------------- /CGMBLEKit/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Glukosedata ikke tilgængeligt"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "lavt batteri"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Kommando for ekstern enhed var ugyldig"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Ekstern enhed svarede ikke i tide"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Ekstern enhed er ikke forbundet"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensorkalibrering er OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensor i ukendt tilstand %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensor er stoppet"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensor varmer op"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensoren har brug for kalibrering"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Ukendt karakteristik"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Blutzuckerdaten sind nicht verfügbar"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Batterie niedrig"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Peripheriebefehl war ungültig"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Peripherie antwortet nicht rechtzeitig"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Gerät ist nicht verbunden"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensorkalibrierung ist OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensor befindet sich in unbekanntem Zustand %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensor ist gestoppt"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensor befindet sich in der Aufwärmphase"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensor benötigt Kalibrierung"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Unbekannte Charakteristik"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Los datos de glucosa no están disponibles"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Batería Baja"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "El comando del dispositivo periférico no es válido"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "El dispositivo periférico no respondió a tiempo"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "El dispositivo periférico no está conectado"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Calibración de sensor está OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "El sensor está en estado desconocido %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "El sensor está en pausa"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "El sensor se está calentando"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensor se necesita de calibración"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Característica desconocida"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Glukoositietoja ei ole saatavilla"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Akku lähes tyhjä"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Oheislaitekomento oli virheellinen"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Ulkoinen laite ei vastannut ajoissa"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Ulkoinen laite ei ole yhdistetty"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Anturin kalibrointi onnistui"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Anturi on tuntemattomassa tilassa %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Anturi on pysäytetty"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Anturi lämpenee"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Anturi tarvitsee kalibroinnin"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Tuntematon ominaisuus"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Les données de glycémie ne sont pas disponibles"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Batterie faible"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "La commande périphérique a retourné une commande invalide"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Le périphérique n’a pas répondu à temps"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Le périphérique n’est pas connecté"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Étalonnage de capteur OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Le capteur est dans un état inconnu %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Le capteur est arrêté"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Le capteur est en préchauffage"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Capteur doit être étalonné"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Caractéristique inconnue"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/he.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "מידע גלוקוז לא זמין"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "סוללה חלשה"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "תקין"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "פעולה לא חוקית"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "לא הגיב בזמן"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "לא מחובר"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "כיול חיישן הצליח"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "מצב החיישן אינו ידוע %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "חיישן נעצר"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "חיישן מתכונן"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "נדרש כיול לחיישן"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "מאפיין לא ידוע"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/hi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Error description for unreliable state */ 2 | "Glucose data is unavailable" = "ग्लूकोस डेटा उपलब्ध नहीं है"; 3 | 4 | /* The description of sensor calibration state when sensor sensor is stopped. */ 5 | "Sensor is stopped" = "सेन्सर समाप्त हो गया"; 6 | 7 | /* The description of sensor calibration state when sensor sensor is warming up. */ 8 | "Sensor is warming up" = "सेन्सर अपने शुरुआती समय में है"; 9 | 10 | -------------------------------------------------------------------------------- /CGMBLEKit/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "I dati della glicemia non sono disponibili"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Batteria Bassa"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Il comando della periferica non era valido"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "La periferica non ha risposto nel tempo limite"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "La periferica non e' connessa"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "La calibrazione del sensore e' valida"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Il Sensore e' in un stato%1$d sconosciuto"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Il sensore è fermo"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Il Sensore si sta riscaldando"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Il sensore necessita di calibrazione"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Caratteristica sconosciuta"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "グルコースデータがありません"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "電池残量低下"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* Timeout error description */ 17 | "Peripheral did not respond in time" = "危機が時間内に反応しませんでした"; 18 | 19 | /* Not ready error description */ 20 | "Peripheral isnʼt connected" = "危機が接続されていません"; 21 | 22 | /* The description of sensor calibration state when sensor calibration is ok. */ 23 | "Sensor calibration is OK" = "センサーの較正はできています"; 24 | 25 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 26 | "Sensor is in unknown state %1$d" = "センサーの状態が不明です %1$d"; 27 | 28 | /* The description of sensor calibration state when sensor sensor is stopped. */ 29 | "Sensor is stopped" = "センサーが停止しています"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is warming up. */ 32 | "Sensor is warming up" = "センサーが準備中です"; 33 | 34 | /* The description of sensor calibration state when sensor needs calibration. */ 35 | "Sensor needs calibration" = "センサーの較正が必要です"; 36 | 37 | /* Error description */ 38 | "Unknown characteristic" = "エラー不明"; 39 | 40 | -------------------------------------------------------------------------------- /CGMBLEKit/nb.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Blodsukker er utilgjengelig"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Lavt batterinivå"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Perifer kommando var ugyldig"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Tilbehøret svarte ikke i tide"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Tilbehøret er ikke tilkoblet"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensorkalibrering er OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensor er i ukjent tilstand %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensor er stoppet"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensor varmer opp"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensor trenger kalibrering"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Ukjent karakteristikk"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Glucosegegevens zijn niet beschikbaar"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Batterij Bijna Leeg"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "Ok"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Perifere commando was ongeldig"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Apparaat reageerde niet op tijd"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Apparaat is niet verbonden"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensorkalibratie is OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Onbekende sensorstatus %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensor gestopt"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensor aan het opwarmen"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensor moet worden gekalibreerd"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Onbekende eigenschap"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Dane o poziomie glukozy są niedostępne"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Słaba bateria"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Polecenie urządzenia peryferyjnego było nieprawidłowe"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Urządzenie peryferyjne nie odpowiada"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Urządzenie peryferyjne nie jest podłączone"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Kalibracja sensora powiodła się"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensor jest w nieznanym stanie %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensor został zatrzymany"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensor jest w fazie rozruchu"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensor wymaga kalibracji"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Nieznany błąd"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/pt-BR.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Os dados de glicose não estão disponíveis"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Bateria Fraca"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* Timeout error description */ 17 | "Peripheral did not respond in time" = "Acessório não respondeu a tempo"; 18 | 19 | /* Not ready error description */ 20 | "Peripheral isnʼt connected" = "Acessório não está conectado"; 21 | 22 | /* The description of sensor calibration state when sensor calibration is ok. */ 23 | "Sensor calibration is OK" = "A calibração do sensor está OK"; 24 | 25 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 26 | "Sensor is in unknown state %1$d" = "O sensor está em um estado desconhecido %1$d"; 27 | 28 | /* The description of sensor calibration state when sensor sensor is stopped. */ 29 | "Sensor is stopped" = "O sensor está parado"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is warming up. */ 32 | "Sensor is warming up" = "O sensor está aquecendo"; 33 | 34 | /* The description of sensor calibration state when sensor needs calibration. */ 35 | "Sensor needs calibration" = "O sensor precisa de calibração"; 36 | 37 | /* Error description */ 38 | "Unknown characteristic" = "Característica Desconhecida"; 39 | 40 | -------------------------------------------------------------------------------- /CGMBLEKit/ro.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Datele despre glucoză nu sunt disponibile"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Baterie descărcată"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Comanda dispozitivului este nevalidă"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Dispozitivul periferic nu a răspuns în timp util"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Dispozitivul periferic nu este conectat"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Calibrarea senzorului este OK"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Starea senzorului este necunoscută"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Senzorul e oprit"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Senzorul se pregătește"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Senzorul are nevoie de calibrare"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Caracteristică necunoscută"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Данные глюкозы недоступны"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Низкий заряд батарейки"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Неправильно сформирован запрос."; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Периферийное устройство не отозвалось вовремя"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Соединение с периферийным устройством не установлено"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Калибровка сенсора ОК"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Неизвестное состояние сенсора%1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Сенсор остановлен"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Сенсор прогревается"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Сенсор требует калибровки"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Неизвестная характеристика"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/sk.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Údaje o glykémii nie sú k dispozícii"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Slabá batéria"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Periférny príkaz bol neplatný"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Periférne zariadenie nereagovalo načas"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Periférne zariadenie nie je pripojené"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Kalibrácia senzora je vporiadku"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Senzor je v neznámom stave %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Senzor je zastavený"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Senzor sa zahrieva"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Senzor potrebuje kalibráciu"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Neznáma charakteristika"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/sv.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Glukosvärden är inte tillgängliga"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Lågt batteri"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Perifert kommando var ogiltigt"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Enhet svarade inte inom utsatt tid"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Enheten är inte ansluten"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensorkalibrering lyckades"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensorns status är okänd %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensorn har stoppats"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensorn värmer upp"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensorn behöver kalibreras"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Okänd data"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "KŞ verileri mevcut değil"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "Düşük Pil"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "Tamam"; 15 | 16 | /* invlid config error description */ 17 | "Peripheral command was invalid" = "Çevre birimi komutu geçersiz"; 18 | 19 | /* Timeout error description */ 20 | "Peripheral did not respond in time" = "Çevre birimi zamanında yanıt vermedi"; 21 | 22 | /* Not ready error description */ 23 | "Peripheral isnʼt connected" = "Çevre birimi bağlı değil"; 24 | 25 | /* The description of sensor calibration state when sensor calibration is ok. */ 26 | "Sensor calibration is OK" = "Sensör kalibrasyonu tamam"; 27 | 28 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 29 | "Sensor is in unknown state %1$d" = "Sensör bilinmeyen durumda %1$d"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is stopped. */ 32 | "Sensor is stopped" = "Sensör durdu"; 33 | 34 | /* The description of sensor calibration state when sensor sensor is warming up. */ 35 | "Sensor is warming up" = "Sensör ısınıyor"; 36 | 37 | /* The description of sensor calibration state when sensor needs calibration. */ 38 | "Sensor needs calibration" = "Sensörün kalibrasyona ihtiyacı var"; 39 | 40 | /* Error description */ 41 | "Unknown characteristic" = "Bilinmeyen karakteristik"; 42 | 43 | -------------------------------------------------------------------------------- /CGMBLEKit/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* CGM display title */ 2 | "Dexcom G5" = "Dexcom G5"; 3 | 4 | /* CGM display title */ 5 | "Dexcom G6" = "Dexcom G6"; 6 | 7 | /* Error description for unreliable state */ 8 | "Glucose data is unavailable" = "Dữ liệu glucose không có sẵn"; 9 | 10 | /* Describes a low battery */ 11 | "Low Battery" = "pin yếu"; 12 | 13 | /* Describes a functioning transmitter */ 14 | "OK" = "OK"; 15 | 16 | /* Timeout error description */ 17 | "Peripheral did not respond in time" = "Ngoại vi không đáp ứng kịp thời"; 18 | 19 | /* Not ready error description */ 20 | "Peripheral isnʼt connected" = "Ngoại vi không được kết nối"; 21 | 22 | /* The description of sensor calibration state when sensor calibration is ok. */ 23 | "Sensor calibration is OK" = "Hiệu chuẩn cảm biến là OK"; 24 | 25 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 26 | "Sensor is in unknown state %1$d" = "Cảm biến ở trạng thái không xác định %1$d"; 27 | 28 | /* The description of sensor calibration state when sensor sensor is stopped. */ 29 | "Sensor is stopped" = "Cảm biến bị dừng"; 30 | 31 | /* The description of sensor calibration state when sensor sensor is warming up. */ 32 | "Sensor is warming up" = "Cảm biến đang nóng lên"; 33 | 34 | /* The description of sensor calibration state when sensor needs calibration. */ 35 | "Sensor needs calibration" = "Cảm biến cần hiệu chuẩn"; 36 | 37 | /* Error description */ 38 | "Unknown characteristic" = "Đặc điểm không xác định"; 39 | 40 | -------------------------------------------------------------------------------- /CGMBLEKit/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Error description for unreliable state */ 2 | "Glucose data is unavailable" = "葡萄糖数据不可用"; 3 | 4 | /* Describes a low battery */ 5 | "Low Battery" = "电量低"; 6 | 7 | /* Timeout error description */ 8 | "Peripheral did not respond in time" = "外设没有及时响应"; 9 | 10 | /* Not ready error description */ 11 | "Peripheral isnʼt connected" = "外围设备未连接"; 12 | 13 | /* The description of sensor calibration state when sensor calibration is ok. */ 14 | "Sensor calibration is OK" = "传感器校准成功"; 15 | 16 | /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */ 17 | "Sensor is in unknown state %1$d" = "传感器处于未知状态 %1$d"; 18 | 19 | /* The description of sensor calibration state when sensor sensor is stopped. */ 20 | "Sensor is stopped" = "传感器停止"; 21 | 22 | /* The description of sensor calibration state when sensor sensor is warming up. */ 23 | "Sensor is warming up" = "传感器在启动中"; 24 | 25 | /* The description of sensor calibration state when sensor needs calibration. */ 26 | "Sensor needs calibration" = "传感器需要校准"; 27 | 28 | /* Error description */ 29 | "Unknown characteristic" = "未知特性"; 30 | 31 | -------------------------------------------------------------------------------- /CGMBLEKitG5Plugin/CGMBLEKitG5Plugin-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /CGMBLEKitG5Plugin/CGMBLEKitG5Plugin.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGMBLEKitG5Plugin.swift 3 | // CGMBLEKitG5Plugin 4 | // 5 | // Created by Nathaniel Hamming on 2019-12-19. 6 | // Copyright © 2019 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import os.log 10 | import LoopKitUI 11 | import CGMBLEKit 12 | import CGMBLEKitUI 13 | 14 | class CGMBLEKitG5Plugin: NSObject, CGMManagerUIPlugin { 15 | private let log = OSLog(category: "CGMBLEKitG5Plugin") 16 | 17 | public var cgmManagerType: CGMManagerUI.Type? { 18 | return G5CGMManager.self 19 | } 20 | 21 | override init() { 22 | super.init() 23 | log.default("Instantiated") 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /CGMBLEKitG5Plugin/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | NSHumanReadableCopyright 22 | Copyright © 2019 LoopKit Authors. All rights reserved. 23 | NSPrincipalClass 24 | CGMBLEKitG5Plugin 25 | com.loopkit.Loop.CGMManagerDisplayName 26 | Dexcom G5 27 | com.loopkit.Loop.CGMManagerIdentifier 28 | DexG5Transmitter 29 | 30 | 31 | -------------------------------------------------------------------------------- /CGMBLEKitG6Plugin/CGMBLEKitG6Plugin-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /CGMBLEKitG6Plugin/CGMBLEKitG6Plugin.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGMBLEKitG6Plugin.swift 3 | // CGMBLEKitG6Plugin 4 | // 5 | // Created by Nathaniel Hamming on 2019-12-13. 6 | // Copyright © 2019 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import os.log 10 | import LoopKitUI 11 | import CGMBLEKit 12 | import CGMBLEKitUI 13 | 14 | class CGMBLEKitG6Plugin: NSObject, CGMManagerUIPlugin { 15 | private let log = OSLog(category: "CGMBLEKitG6Plugin") 16 | 17 | public var cgmManagerType: CGMManagerUI.Type? { 18 | return G6CGMManager.self 19 | } 20 | 21 | override init() { 22 | super.init() 23 | log.default("Instantiated") 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /CGMBLEKitG6Plugin/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | NSHumanReadableCopyright 22 | Copyright © 2019 LoopKit Authors. All rights reserved. 23 | NSPrincipalClass 24 | CGMBLEKitG6Plugin 25 | com.loopkit.Loop.CGMManagerDisplayName 26 | Dexcom G6 / ONE 27 | com.loopkit.Loop.CGMManagerIdentifier 28 | DexG6Transmitter 29 | 30 | 31 | -------------------------------------------------------------------------------- /CGMBLEKitTests/CalibrationDataRxMessageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CalibrationDataRxMessageTests.swift 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 9/18/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import CGMBLEKit 11 | 12 | 13 | class CalibrationDataRxMessageTests: XCTestCase { 14 | 15 | func testMessage() { 16 | let data = Data(hexadecimalString: "33002b290090012900ae00800050e929001225")! 17 | XCTAssertNotNil(CalibrationDataRxMessage(data: data)) 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /CGMBLEKitTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 3.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitTests/SessionStartRxMessageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStartRxMessageTests.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 6/4/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import CGMBLEKit 11 | 12 | /// Thanks to https://github.com/mthatcher for the fixtures! 13 | class SessionStartRxMessageTests: XCTestCase { 14 | 15 | func testSuccessfulStart() { 16 | var data = Data(hexadecimalString: "2700014bf871004bf87100e9f8710095d9")! 17 | var message = SessionStartRxMessage(data: data)! 18 | 19 | XCTAssertEqual(0, message.status) 20 | XCTAssertEqual(1, message.received) 21 | XCTAssertEqual(7469131, message.requestedStartTime) 22 | XCTAssertEqual(7469131, message.sessionStartTime) 23 | XCTAssertEqual(7469289, message.transmitterTime) 24 | 25 | data = Data(hexadecimalString: "2700012bfd71002bfd710096fd71000f6a")! 26 | message = SessionStartRxMessage(data: data)! 27 | 28 | XCTAssertEqual(0, message.status) 29 | XCTAssertEqual(1, message.received) 30 | XCTAssertEqual(7470379, message.requestedStartTime) 31 | XCTAssertEqual(7470379, message.sessionStartTime) 32 | XCTAssertEqual(7470486, message.transmitterTime) 33 | 34 | data = Data(hexadecimalString: "2700017cff71007cff7100eeff7100aeed")! 35 | message = SessionStartRxMessage(data: data)! 36 | 37 | XCTAssertEqual(0, message.status) 38 | XCTAssertEqual(1, message.received) 39 | XCTAssertEqual(7470972, message.requestedStartTime) 40 | XCTAssertEqual(7470972, message.sessionStartTime) 41 | XCTAssertEqual(7471086, message.transmitterTime) 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /CGMBLEKitTests/SessionStopRxMessageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SessionStopRxMessageTests.swift 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 6/4/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import CGMBLEKit 11 | 12 | /// Thanks to https://github.com/mthatcher for the fixtures! 13 | class SessionStopRxMessageTests: XCTestCase { 14 | 15 | func testSuccessfulStop() { 16 | var data = Data(hexadecimalString: "29000128027200ffffffff47027200ba85")! 17 | var message = SessionStopRxMessage(data: data)! 18 | 19 | XCTAssertEqual(0, message.status) 20 | XCTAssertEqual(1, message.received) 21 | XCTAssertEqual(7471656, message.sessionStopTime) 22 | XCTAssertEqual(0xffffffff, message.sessionStartTime) 23 | XCTAssertEqual(7471687, message.transmitterTime) 24 | 25 | data = Data(hexadecimalString: "2900013ffe7100ffffffffc2fe71008268")! 26 | message = SessionStopRxMessage(data: data)! 27 | 28 | XCTAssertEqual(0, message.status) 29 | XCTAssertEqual(1, message.received) 30 | XCTAssertEqual(7470655, message.sessionStopTime) 31 | XCTAssertEqual(0xffffffff, message.sessionStartTime) 32 | XCTAssertEqual(7470786, message.transmitterTime) 33 | 34 | data = Data(hexadecimalString: "290001f5fb7100ffffffff6afc7100fa8a")! 35 | message = SessionStopRxMessage(data: data)! 36 | 37 | XCTAssertEqual(0, message.status) 38 | XCTAssertEqual(1, message.received) 39 | XCTAssertEqual(7470069, message.sessionStopTime) 40 | XCTAssertEqual(0xffffffff, message.sessionStartTime) 41 | XCTAssertEqual(7470186, message.transmitterTime) 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /CGMBLEKitTests/TransmitterIDTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterIDTests.swift 3 | // xDripG5Tests 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import XCTest 9 | @testable import CGMBLEKit 10 | 11 | class TransmitterIDTests: XCTestCase { 12 | 13 | /// Sanity check the hash computation path 14 | func testComputeHash() { 15 | let id = TransmitterID(id: "123456") 16 | 17 | XCTAssertEqual("e60d4a7999b0fbb2", id.computeHash(of: Data(hexadecimalString: "0123456789abcdef")!)!.hexadecimalString) 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /CGMBLEKitTests/TransmitterVersionRxMessageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransmitterVersionRxMessageTests.swift 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 9/29/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import CGMBLEKit 11 | 12 | class TransmitterVersionRxMessageTests: XCTestCase { 13 | 14 | func testRxMessage() { 15 | let data = Data(hexadecimalString: "4b0001000011df2900005100037000f00009b6")! 16 | let message = TransmitterVersionRxMessage(data: data)! 17 | 18 | XCTAssertEqual(0, message.status) 19 | XCTAssertEqual([1, 0, 0, 17], message.firmwareVersion) 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /CGMBLEKitUI/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /CGMBLEKitUI/Assets.xcassets/g6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "g6.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /CGMBLEKitUI/Assets.xcassets/g6.imageset/g6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/CGMBLEKitUI/Assets.xcassets/g6.imageset/g6.png -------------------------------------------------------------------------------- /CGMBLEKitUI/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/min"; 3 | 4 | /* Confirmation message for deleting a CGM */ 5 | "Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?"; 6 | 7 | /* The title of the cancel action in an action sheet */ 8 | "Cancel" = "Cancel"; 9 | 10 | /* Title describing glucose date */ 11 | "Date" = "Date"; 12 | 13 | /* Button title to delete CGM 14 | Title text for the button to remove a CGM from Loop */ 15 | "Delete CGM" = "Delete CGM"; 16 | 17 | /* Title describing glucose value */ 18 | "Glucose" = "Glucose"; 19 | 20 | /* Describes a glucose value adjusted to reflect a recent calibration */ 21 | "Glucose (Adjusted)" = "Glucose (Adjusted)"; 22 | 23 | /* Section title for latest glucose calibration */ 24 | "Latest Calibration" = "Latest Calibration"; 25 | 26 | /* Section title for latest glucose reading */ 27 | "Latest Reading" = "Latest Reading"; 28 | 29 | /* Button title to open CGM app */ 30 | "Open App" = "Open App"; 31 | 32 | /* Title describing sensor session age */ 33 | "Session Age" = "Session Age"; 34 | 35 | /* Title describing sensor expiration */ 36 | "Sensor Expires" = "Sensor Expires"; 37 | 38 | /* Title describing past sensor expiration */ 39 | "Sensor Expired" = "Sensor Expired"; 40 | 41 | /* Title describing CGM calibration and battery state */ 42 | "Status" = "Status"; 43 | 44 | /* Title describing transmitter session age */ 45 | "Transmitter Age" = "Transmitter Age"; 46 | 47 | /* The title text for the Dexcom G5/G6 transmitter ID config value */ 48 | "Transmitter ID" = "Transmitter ID"; 49 | 50 | /* Title describing glucose trend */ 51 | "Trend" = "Trend"; 52 | -------------------------------------------------------------------------------- /CGMBLEKitUI/CGMBLEKitUI.h: -------------------------------------------------------------------------------- 1 | // 2 | // CGMBLEKitUI.h 3 | // CGMBLEKitUI 4 | // 5 | // Created by Nathan Racklyeft on 7/28/18. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for CGMBLEKitUI. 12 | FOUNDATION_EXPORT double CGMBLEKitUIVersionNumber; 13 | 14 | //! Project version string for CGMBLEKitUI. 15 | FOUNDATION_EXPORT const unsigned char CGMBLEKitUIVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /CGMBLEKitUI/IdentifiableClass.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IdentifiableClass.swift 3 | // Naterade 4 | // 5 | // Created by Nathan Racklyeft on 5/22/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | protocol IdentifiableClass: AnyObject { 13 | static var className: String { get } 14 | } 15 | 16 | 17 | extension IdentifiableClass { 18 | static var className: String { 19 | return NSStringFromClass(self).components(separatedBy: ".").last! 20 | } 21 | } 22 | 23 | 24 | extension UITableViewCell: IdentifiableClass { } 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.2 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/UIColor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor.swift 3 | // LoopKitUI 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | extension UIColor { 12 | static let delete = UIColor.higRed() 13 | } 14 | 15 | 16 | // MARK: - HIG colors 17 | // See: https://developer.apple.com/ios/human-interface-guidelines/visual-design/color/ 18 | extension UIColor { 19 | private static func higRed() -> UIColor { 20 | return UIColor(red: 1, green: 59 / 255, blue: 48 / 255, alpha: 1) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Confirmation message for deleting a CGM */ 2 | "Are you sure you want to delete this CGM?" = "هل أنت متأكد أنك تريد حذف هذا CGM؟"; 3 | 4 | /* The title of the cancel action in an action sheet */ 5 | "Cancel" = "إلغاء"; 6 | 7 | /* Button title to delete CGM 8 | Title text for the button to remove a CGM from Loop */ 9 | "Delete CGM" = "حذف CGM"; 10 | 11 | /* Title describing glucose value */ 12 | "Glucose" = "قراءات السكر"; 13 | 14 | /* Title describing CGM calibration and battery state */ 15 | "Status" = "الحالة"; 16 | 17 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ar.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 2 | "GOT-KQ-cEh.text" = "تفاصيل"; 3 | 4 | -------------------------------------------------------------------------------- /CGMBLEKitUI/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/min"; 3 | 4 | /* The title of the cancel action in an action sheet */ 5 | "Cancel" = "Zrušit"; 6 | 7 | /* Title describing glucose value */ 8 | "Glucose" = "Glukóza"; 9 | 10 | /* Title describing CGM calibration and battery state */ 11 | "Status" = "Status"; 12 | 13 | -------------------------------------------------------------------------------- /CGMBLEKitUI/da.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Legitimationsoplysninger"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Senderopsætning"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detalje"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Data kan downloades over internettet fra Share, når transmitterforbindelsen mislykkes."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Indtast det 6-cifrede sender-ID"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Sender-ID'et kan findes trykt på bagsiden af ​​enheden, på den side af boksen, den kom i, og fra indstillingsmenuerne på modtageren og mobilappen."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Sender ID"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/de.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Logindaten"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Transmitter-Setup"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Daten können über das Internet von Share heruntergeladen werden, wenn die Verbindung zum Transmitter unterbrochen ist."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Gib die 6-stellige Transmitter-ID ein"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Die Transmitter-ID befindet sich auf der Rückseite des Transmitters, an der Seite der Verpackung und in den Einstellungsmenüs des Empfängers sowie der Dexcom-App."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Transmitter-ID"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/en.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 3 | "5oU-vK-JHQ.text" = "Credentials"; 4 | 5 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 6 | "Dds-49-o7G.title" = "Transmitter Setup"; 7 | 8 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 9 | "GOT-KQ-cEh.text" = "Detail"; 10 | 11 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 12 | "Qub-6B-0aB.footerTitle" = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; 13 | 14 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 15 | "Qub-6B-0aB.headerTitle" = "Transmitter ID"; 16 | 17 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 18 | "k1N-Rg-XDy.footerTitle" = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; 19 | 20 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 21 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 22 | 23 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 24 | "nKX-TW-GhD.placeholder" = "Enter the 6-digit transmitter ID"; 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/es.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Credenciales"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Configuración del transmisor"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detalle"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Los datos pueden descargarse, vía internet, desde el Share cuando la conexión del transmisor falla."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Introduzca la identificación de 6 cifras del transmisor"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "La identificación del transmisor puede encontrarse en la parte trasera del dispositivo, en el lateral de la caja en la que venía, o en los menús de ajustes del receptor y la app del teléfono móvil. "; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Identificación del transmisor"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/fi.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Tunnukset"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Lähettimen asennus"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Tiedot voidaan ladata Internetistä Share-palvelimelta, kun yhteys lähettimeen epäonnistuu."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Syötä 6-numeroinen lähettimen tunniste"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Lähettimen tunniste on painettu lähettimen pohjaan ja tuotepakkauksen sivulle. Se löytyy myös vastaanottimen ja mobiilisovelluksen asetusvalikosta."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Lähettimen tunniste"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/fr.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Identifiant"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Configuration du transmetteur"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Détail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Les données peuvent être téléchargées depuis Internet avec Share quand la connexion au transmetteur échoue."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Entrez l’ID du transmetteur, composé de 6 lettres et chiffres"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "L’ID du transmetteur se trouve sur le dos de l’appareil, sur la boîte dans laquelle il est fourni, et depuis les menus de réglages du récepteur et de l’application mobile."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID du transmetteur"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/he.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "פרטי כניסה"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "הגדרת משדר"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "פרטים"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "אם תקשורת מהמשדר נכשלת, מידע יכול להגיע מהאינטרנט באמצעות Share."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "הכנס מזהה משדר בן 6 ספרות"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "ניתן למצוא את מזהה המשדר מודפס מאחוריו, לצד הקופסא שנארז בה או מתוך תפריט ההגדרות של הקורא או אפליקציית החיישן."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "מזהה משדר"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/hi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/मिनट"; 3 | 4 | /* The title of the cancel action in an action sheet */ 5 | "Cancel" = "निरस्त"; 6 | 7 | /* Title describing glucose value */ 8 | "Glucose" = "शुगर"; 9 | 10 | /* Title describing glucose trend */ 11 | "Trend" = "ट्रेंड"; 12 | 13 | /* The title text for the upload glucose switch cell */ 14 | "Upload Readings" = "अपलोड रीडिंग्स"; 15 | 16 | -------------------------------------------------------------------------------- /CGMBLEKitUI/it.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Credenziali"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Configurazione"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Dettaglio"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "In caso di problemi di connessione del trasmettitore, puoi scaricare i dati da Internet grazie alla funzionalità Condividi."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Inserisci ID a 6 cifre del trasmettitore"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "L'ID del trasmettitore è riportato sul retro del dispositivo, ai lati della confezione di imballaggio e nel menù Impostazioni del ricevitore e dell’app per dispositivi mobili."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID trasmettitore"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/分"; 3 | 4 | /* Confirmation message for deleting a CGM */ 5 | "Are you sure you want to delete this CGM?" = "このCGMを削除しますか?"; 6 | 7 | /* The title of the cancel action in an action sheet */ 8 | "Cancel" = "キャンセル"; 9 | 10 | /* Title describing glucose date */ 11 | "Date" = "日付"; 12 | 13 | /* Button title to delete CGM 14 | Title text for the button to remove a CGM from Loop */ 15 | "Delete CGM" = "CGMを削除"; 16 | 17 | /* Title describing glucose value */ 18 | "Glucose" = "血糖値"; 19 | 20 | /* Describes a glucose value adjusted to reflect a recent calibration */ 21 | "Glucose (Adjusted)" = "グルコース (調整後)"; 22 | 23 | /* Section title for latest glucose calibration */ 24 | "Latest Calibration" = "直近の較正"; 25 | 26 | /* Section title for latest glucose reading */ 27 | "Latest Reading" = "最新の読み取り"; 28 | 29 | /* Button title to open CGM app */ 30 | "Open App" = "アプリを開く"; 31 | 32 | /* Title describing sensor session age */ 33 | "Session Age" = "セッション経過時間"; 34 | 35 | /* Title describing CGM calibration and battery state */ 36 | "Status" = "ステータス"; 37 | 38 | /* Title describing transmitter session age */ 39 | "Transmitter Age" = "トランスミッター経過時間"; 40 | 41 | /* The title text for the Dexcom G5/G6 transmitter ID config value */ 42 | "Transmitter ID" = "トランスミッタ ID"; 43 | 44 | /* Title describing glucose trend */ 45 | "Trend" = "トレンド"; 46 | 47 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ja.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "証明"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "トランスミッター設定"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "トランスミッターの接続ができないときに、インターネットでShareからデータをダウンロードできます。"; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "6桁のトランスミッタIDを入力"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "トランスミッターIDは、トランスミッタ―の底面、パッケージの側面、またはレシーバとモバイルアプリの設定メニューで確認できます。"; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "トランスミッタ ID"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/nb.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Påloggingsinformasjon"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Sett opp sender"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detalj"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Data kan lastes ned over internett fra Share-server om tilkobling til sender ikke fungerer."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Skriv 6-siffret sender ID"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Sender ID finner du på baksiden av senderen, eller på siden av esken den kom i, eller under innstillinger i appen til senderen."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Sender ID"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/nl.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Toegangsgegevens"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Zender Instellen"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Gegevens kunnen via het internet van Share gedownload worden wanneer de verbinding met de zender uitvalt."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Vul de 6 cijferige zenderserienummer in"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "De zenderserienummer staat achter op het apparaat, op de zijkant van de verpakking en in het instellingenmenu van de ontvanger en de app."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Zenderserienummer"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/pl.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Dane uwierzytelniające"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Konfiguracja nadajnika"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Dane można pobrać przez internet z Share, kiedy połączenie nadajnika się nie powiedzie."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Wprowadź 6-cyfrowy ID nadajnika"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "ID nadajnika jest nadrukowany z tyłu urządzenia, z boku opakowania, w którym go dostarczono oraz jest dostępny w menu ustawień odbiornika i w aplikacji mobilnej."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID nadajnika"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/pt-BR.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/min"; 3 | 4 | /* Confirmation message for deleting a CGM */ 5 | "Are you sure you want to delete this CGM?" = "Você está certo que quer remover este CGM?"; 6 | 7 | /* The title of the cancel action in an action sheet */ 8 | "Cancel" = "Cancelar"; 9 | 10 | /* Title describing glucose date */ 11 | "Date" = "Data"; 12 | 13 | /* Button title to delete CGM 14 | Title text for the button to remove a CGM from Loop */ 15 | "Delete CGM" = "Remover CGM"; 16 | 17 | /* Title describing glucose value */ 18 | "Glucose" = "Glicose"; 19 | 20 | /* Describes a glucose value adjusted to reflect a recent calibration */ 21 | "Glucose (Adjusted)" = "Glicose (Ajustada)"; 22 | 23 | /* Section title for latest glucose calibration */ 24 | "Latest Calibration" = "Última Calibração"; 25 | 26 | /* Section title for latest glucose reading */ 27 | "Latest Reading" = "Leitura mais Recente"; 28 | 29 | /* Button title to open CGM app */ 30 | "Open App" = "Abrir App"; 31 | 32 | /* Title describing sensor session age */ 33 | "Session Age" = "Idade da Sessão"; 34 | 35 | /* Title describing CGM calibration and battery state */ 36 | "Status" = "Estado"; 37 | 38 | /* Title describing transmitter session age */ 39 | "Transmitter Age" = "Idade do Transmissor"; 40 | 41 | /* The title text for the Dexcom G5/G6 transmitter ID config value */ 42 | "Transmitter ID" = "ID do Transmissor"; 43 | 44 | /* Title describing glucose trend */ 45 | "Trend" = "Tendência"; 46 | 47 | -------------------------------------------------------------------------------- /CGMBLEKitUI/pt-BR.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Credenciais"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Configuração do Transmissor"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Os dados podem ser baixados pela Internet a partir do compartilhamento quando a conexão do transmissor falhar."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Digite o ID do transmissor de 6 dígitos"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "O ID do transmissor pode ser encontrado impresso na parte traseira do dispositivo, na parte lateral da caixa em que ele veio e nos menus de configurações do receptor e do aplicativo móvel."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID do Transmissor"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ro.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Autentificare"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Setare transmițător"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Pot fi transferate date prin Internet din Share atunci când eșuează conexiunea cu transmițătorul"; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Introduceți ID-ul din 6 cifre al transmițătorului"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "ID-ul transmițătorului poate fi găsit fie pe pe spatele dispozitivului sau pe cutia cu care a venit sau poate fi văzut în setările receiver-ului sau a aplicației mobile."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID transmițător"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/ru.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Учетные данные"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Настройка трансмиттера"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Данные могут быть загружены с серверов Share если не произойдет соединение трансмиттера."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Введите шестизначный идентификатор трансмиттера"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Номер трансмиттера находится на обратной стороне устройства, сбоку кпаковочной коробки, в настройках ресивера и мобильного приложения."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "ID трансмиттера"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/sk.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 2 | "Dds-49-o7G.title" = "Nastavenie vysielača"; 3 | 4 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 5 | "GOT-KQ-cEh.text" = "Detail"; 6 | 7 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 8 | "k1N-Rg-XDy.footerTitle" = "Údaje je možné stiahnuť cez internet zo Share, keď zlyhá pripojenie vysielača."; 9 | 10 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 12 | 13 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 14 | "nKX-TW-GhD.placeholder" = "Zadajte 6-miestne ID vysielača"; 15 | 16 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 17 | "Qub-6B-0aB.footerTitle" = "ID vysielača nájdete vytlačené na zadnej strane zariadenia, na boku škatule, v ktorej bol dodaný, a v ponuke nastavení prijímača a mobilnej aplikácie."; 18 | 19 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.headerTitle" = "ID vysielača"; 21 | 22 | -------------------------------------------------------------------------------- /CGMBLEKitUI/sv.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Inloggningsuppgifter"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Sändarinställning"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Data kan laddas ned från Share (via Internet) om sändaranslutningen skulle misslyckas."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Ange 6-siffrigt sändar-ID"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Sändar-ID kan hittas tryckt på baksidan av enheten, på sidan av lådan den kom in samt från inställningsmenyn för mottagaren och mobilappen."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Sändari-ID"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/tr.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Kimlik bilgileri"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Verici Kurulumu"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detay"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Verici bağlantısı başarısız olduğunda Dexcom Share üzerinden veriler indirilebilir."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "6 basamaklı verici kimliğini girin"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Verici kimliğini, cihazın arkasında, geldiği kutunun yan tarafında, alıcının mobil uygulamasının ayarlar menüsünde bulabilirsiniz."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Verici Kimliği"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/phút"; 3 | 4 | /* Confirmation message for deleting a CGM */ 5 | "Are you sure you want to delete this CGM?" = "Bạn có chắc sẽ xóa CGM này?"; 6 | 7 | /* The title of the cancel action in an action sheet */ 8 | "Cancel" = "Hủy bỏ"; 9 | 10 | /* Title describing glucose date */ 11 | "Date" = "Ngày"; 12 | 13 | /* Button title to delete CGM 14 | Title text for the button to remove a CGM from Loop */ 15 | "Delete CGM" = "Xóa CGM"; 16 | 17 | /* Title describing glucose value */ 18 | "Glucose" = "Đường huyết"; 19 | 20 | /* Describes a glucose value adjusted to reflect a recent calibration */ 21 | "Glucose (Adjusted)" = "Đường huyết (Được điều chỉnh)"; 22 | 23 | /* Section title for latest glucose calibration */ 24 | "Latest Calibration" = "Lần hiệu chỉnh gần nhất"; 25 | 26 | /* Section title for latest glucose reading */ 27 | "Latest Reading" = "Kết quả đọc mới nhất"; 28 | 29 | /* Button title to open CGM app */ 30 | "Open App" = "Mở ứng dụng"; 31 | 32 | /* Title describing sensor session age */ 33 | "Session Age" = "Thời gian sử dụng sensor"; 34 | 35 | /* Title describing CGM calibration and battery state */ 36 | "Status" = "Tình trạng"; 37 | 38 | /* Title describing transmitter session age */ 39 | "Transmitter Age" = "Thời gian sử dụng Transmitter"; 40 | 41 | /* The title text for the Dexcom G5/G6 transmitter ID config value */ 42 | "Transmitter ID" = "Số ID của Transmitter"; 43 | 44 | /* Title describing glucose trend */ 45 | "Trend" = "Xu hướng"; 46 | 47 | -------------------------------------------------------------------------------- /CGMBLEKitUI/vi.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "Thông tin xác thực"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "Cài đặt Transmitter"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "Detail"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "Dữ liệu có thể được tải xuống qua đường truyền Internet trên ứng dụng Share khi kết nối với transmitter bị đứt."; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom Share"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "Nhập 6 số ID của Transmitter"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "Số ID của Transmitter có thể được tìm thấy trên vỏ hộp hoặc bên hông hộp và trong phần Menu cài đặt cũng như trên ứng dụng của điện thoại."; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "Số ID của Transmitter"; 24 | 25 | -------------------------------------------------------------------------------- /CGMBLEKitUI/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Format string for glucose trend per minute. (1: glucose value and unit) */ 2 | "%@/min" = "%@/分钟"; 3 | 4 | /* Confirmation message for deleting a CGM */ 5 | "Are you sure you want to delete this CGM?" = "确认要删除该CGM吗?"; 6 | 7 | /* The title of the cancel action in an action sheet */ 8 | "Cancel" = "取消"; 9 | 10 | /* Title describing glucose date */ 11 | "Date" = "日期"; 12 | 13 | /* Button title to delete CGM 14 | Title text for the button to remove a CGM from Loop */ 15 | "Delete CGM" = "删除CGM"; 16 | 17 | /* Title describing glucose value */ 18 | "Glucose" = "葡萄糖"; 19 | 20 | /* Describes a glucose value adjusted to reflect a recent calibration */ 21 | "Glucose (Adjusted)" = "血糖"; 22 | 23 | /* Section title for latest glucose calibration */ 24 | "Latest Calibration" = "最近一次较准"; 25 | 26 | /* Section title for latest glucose reading */ 27 | "Latest Reading" = "最新血糖值"; 28 | 29 | /* Button title to open CGM app */ 30 | "Open App" = "打开软件"; 31 | 32 | /* Title describing sensor session age */ 33 | "Session Age" = "传感器启动天数"; 34 | 35 | /* Title describing CGM calibration and battery state */ 36 | "Status" = "状态"; 37 | 38 | /* Title describing transmitter session age */ 39 | "Transmitter Age" = "发射器使用天数"; 40 | 41 | /* The title text for the Dexcom G5/G6 transmitter ID config value */ 42 | "Transmitter ID" = "发射器编号"; 43 | 44 | /* Title describing glucose trend */ 45 | "Trend" = "趋势"; 46 | 47 | -------------------------------------------------------------------------------- /CGMBLEKitUI/zh-Hans.lproj/TransmitterManagerSetup.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */ 2 | "5oU-vK-JHQ.text" = "密钥"; 3 | 4 | /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */ 5 | "Dds-49-o7G.title" = "设置发射器"; 6 | 7 | /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */ 8 | "GOT-KQ-cEh.text" = "详情"; 9 | 10 | /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */ 11 | "k1N-Rg-XDy.footerTitle" = "当无法连接发射器时,可通过网络从Dexcom远程下载数据"; 12 | 13 | /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */ 14 | "k1N-Rg-XDy.headerTitle" = "Dexcom远程"; 15 | 16 | /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */ 17 | "nKX-TW-GhD.placeholder" = "请输入6位发射器编号"; 18 | 19 | /* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */ 20 | "Qub-6B-0aB.footerTitle" = "发射器编号可在发射器包装盒背面找到,或者可在Dexcom Moblie软件及接受器的“setting”-“Transmitter”中找到"; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */ 23 | "Qub-6B-0aB.headerTitle" = "发射器编号"; 24 | 25 | -------------------------------------------------------------------------------- /Common/HKUnit.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HKUnit.swift 3 | // xDripG5 4 | // 5 | // Created by Nate Racklyeft on 8/6/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import HealthKit 10 | 11 | 12 | extension HKUnit { 13 | static let milligramsPerDeciliter: HKUnit = { 14 | return HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci)) 15 | }() 16 | 17 | static let milligramsPerDeciliterPerMinute: HKUnit = { 18 | return HKUnit.milligramsPerDeciliter.unitDivided(by: .minute()) 19 | }() 20 | } 21 | -------------------------------------------------------------------------------- /Common/LocalizedString.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocalizedString.swift 3 | // LoopUI 4 | // 5 | // Created by Kathryn DiSimone on 8/15/18. 6 | // Copyright © 2018 LoopKit Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | internal class FrameworkBundle { 12 | static let main = Bundle(for: FrameworkBundle.self) 13 | } 14 | 15 | func LocalizedString(_ key: String, tableName: String? = nil, value: String? = nil, comment: String) -> String { 16 | if let value = value { 17 | return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, value: value, comment: comment) 18 | } else { 19 | return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, comment: comment) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Common/Locked.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Locked.swift 3 | // LoopKit 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import os.lock 9 | 10 | 11 | internal class Locked { 12 | private var lock = os_unfair_lock() 13 | private var _value: T 14 | 15 | init(_ value: T) { 16 | os_unfair_lock_lock(&lock) 17 | defer { os_unfair_lock_unlock(&lock) } 18 | _value = value 19 | } 20 | 21 | var value: T { 22 | get { 23 | os_unfair_lock_lock(&lock) 24 | defer { os_unfair_lock_unlock(&lock) } 25 | return _value 26 | } 27 | set { 28 | os_unfair_lock_lock(&lock) 29 | defer { os_unfair_lock_unlock(&lock) } 30 | _value = newValue 31 | } 32 | } 33 | 34 | func mutate(_ changes: (_ value: inout T) -> Void) -> T { 35 | os_unfair_lock_lock(&lock) 36 | defer { os_unfair_lock_unlock(&lock) } 37 | changes(&_value) 38 | return _value 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Common/TimeInterval.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimeInterval.swift 3 | // Naterade 4 | // 5 | // Created by Nathan Racklyeft on 1/9/16. 6 | // Copyright © 2016 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | extension TimeInterval { 13 | static func hours(_ hours: Double) -> TimeInterval { 14 | return self.init(hours: hours) 15 | } 16 | 17 | static func minutes(_ minutes: Int) -> TimeInterval { 18 | return self.init(minutes: Double(minutes)) 19 | } 20 | 21 | static func minutes(_ minutes: Double) -> TimeInterval { 22 | return self.init(minutes: minutes) 23 | } 24 | 25 | static func seconds(_ seconds: Double) -> TimeInterval { 26 | return self.init(seconds) 27 | } 28 | 29 | static func milliseconds(_ milliseconds: Double) -> TimeInterval { 30 | return self.init(milliseconds / 1000) 31 | } 32 | 33 | init(minutes: Double) { 34 | self.init(minutes * 60) 35 | } 36 | 37 | init(hours: Double) { 38 | self.init(minutes: hours * 60) 39 | } 40 | 41 | init(seconds: Double) { 42 | self.init(seconds) 43 | } 44 | 45 | init(milliseconds: Double) { 46 | self.init(milliseconds / 1000) 47 | } 48 | 49 | var milliseconds: Double { 50 | return self * 1000 51 | } 52 | 53 | var minutes: Double { 54 | return self / 60.0 55 | } 56 | 57 | var hours: Double { 58 | return minutes / 60.0 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Nathan Racklyeft 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Pod/CGMBLEKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // CGMBLEKit.h 3 | // xDripG5 4 | // 5 | // Created by Nathan Racklyeft on 12/31/15. 6 | // Copyright © 2015 Nathan Racklyeft. All rights reserved. 7 | // 8 | 9 | 10 | #import -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-24@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-27.5@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-44@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-44@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-86@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-98@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LoopKit/CGMBLEKit/4adef2662060f7d11d1abd8d099c3e022bf00cef/ResetTransmitter/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /ResetTransmitter/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ResetTransmitter/CompletionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CompletionViewController.swift 3 | // ResetTransmitter 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import UIKit 9 | import UserNotifications 10 | 11 | class CompletionViewController: UITableViewController { 12 | 13 | @IBOutlet weak var textView: UITextView! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | 18 | if UIApplication.shared.applicationState == .background { 19 | let content = UNMutableNotificationContent() 20 | content.badge = 1 21 | content.title = NSLocalizedString("Transmitter Reset Complete", comment: "Notification title for background completion notification") 22 | content.body = textView.text 23 | content.sound = .default 24 | 25 | let request = UNNotificationRequest(identifier: "Completion", content: content, trigger: nil) 26 | 27 | UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) 28 | } 29 | } 30 | 31 | override func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool { 32 | return false 33 | } 34 | 35 | override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { 36 | return nil 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ResetTransmitter/Views/Button.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Button.swift 3 | // ResetTransmitter 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | class Button: UIButton { 12 | 13 | required init?(coder aDecoder: NSCoder) { 14 | super.init(coder: aDecoder) 15 | } 16 | 17 | override func awakeFromNib() { 18 | super.awakeFromNib() 19 | 20 | backgroundColor = tintColor 21 | layer.cornerRadius = 6 22 | 23 | titleLabel?.adjustsFontForContentSizeCategory = true 24 | contentEdgeInsets.top = 14 25 | contentEdgeInsets.bottom = 14 26 | setTitleColor(.white, for: .normal) 27 | } 28 | 29 | override func tintColorDidChange() { 30 | super.tintColorDidChange() 31 | 32 | backgroundColor = tintColor 33 | } 34 | 35 | override func prepareForInterfaceBuilder() { 36 | super.prepareForInterfaceBuilder() 37 | 38 | tintColor = .blue 39 | tintColorDidChange() 40 | } 41 | 42 | override var isHighlighted: Bool { 43 | didSet { 44 | alpha = isHighlighted ? 0.5 : 1 45 | } 46 | } 47 | 48 | override var isEnabled: Bool { 49 | didSet { 50 | tintAdjustmentMode = isEnabled ? .automatic : .dimmed 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ResetTransmitter/Views/ParagraphView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ParagraphView.swift 3 | // ResetTransmitter 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class ParagraphView: UITextView { 11 | 12 | override func awakeFromNib() { 13 | super.awakeFromNib() 14 | 15 | textContainer.lineFragmentPadding = 0 16 | 17 | let paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle 18 | paragraphStyle.paragraphSpacing = 10 19 | 20 | attributedText = NSAttributedString( 21 | string: text, 22 | attributes: [ 23 | .paragraphStyle: paragraphStyle, 24 | .font: UIFont.preferredFont(forTextStyle: .body) 25 | ] 26 | ) 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ResetTransmitter/Views/TextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TextField.swift 3 | // ResetTransmitter 4 | // 5 | // Copyright © 2018 LoopKit Authors. All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class TextField: UITextField { 11 | 12 | private let textInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0) 13 | 14 | override func editingRect(forBounds bounds: CGRect) -> CGRect { 15 | return bounds.inset(by: textInset) 16 | } 17 | 18 | override func textRect(forBounds bounds: CGRect) -> CGRect { 19 | return bounds.inset(by: textInset) 20 | } 21 | 22 | override func placeholderRect(forBounds bounds: CGRect) -> CGRect { 23 | return bounds.inset(by: textInset) 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ResetTransmitter/ar.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of button to cancel reset */ 2 | "Cancel" = "إلغاء"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/cs.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of button to cancel reset */ 2 | "Cancel" = "Zrušit"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/da.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Nulstil"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "NulstilSender"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din blodsukkermonitor"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din blodsukkermonitor"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/da.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Er du sikker på, at du vil nulstille denne sender?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Annuller"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Det vil tage op til 10 minutter at gennemføre."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Nulstil"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Nulstilling af senderen er fuldført"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/de.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Reset"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "Transmitter zurücksetzen"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth wird verwendet für die Kommunikation mit CGM-Geräten"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth wird verwendet für die Kommunikation mit CGM-Geräten"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Möchtest Du das CGM wirklich löschen?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Abbrechen"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Der Vorgang kann bis zu 10 Minuten dauern."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Zurücksetzen"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Zurücksetzen des Transmitters abgeschlossen"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Are you sure you want to reset this transmitter?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Cancel"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "It will take up to 10 minutes to complete."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Reset"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Transmitter Reset Complete"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/es.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Reiniciar"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "Resetear Transmisor"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "El bluetooth se utiliza para la comunicación con dispositivos de monitoreo continuo de glucosa"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "El bluetooth se utiliza para la comunicación con dispositivos de monitoreo continuo de glucosa"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "¿Está usted seguro de querer reiniciar este transmisor?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Cancelar"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Puede tardar en completarse hasta 10 minutos."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Reiniciar"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Reinicio del transmisor completado"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/fi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Nollaa"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetoothia käytetään kommunikointiin glukoosinseurantalaitteiden kanssa."; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetoothia käytetään kommunikointiin glukoosinseurantalaitteiden kanssa."; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Haluatko varmasti nollata lähettimen?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Kumoa"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Valmistuminen voi kestää 10 minuuttia."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Nollaa"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Lähettimen nollaus valmis"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/fr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Réinitialiser"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth est utilisé pour communiquer avec les dispositifs de surveillance continue du glucose."; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth est utilisé pour communiquer avec les dispositifs de surveillance continue du glucose."; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Voulez-vous vraiment réinitialiser ce transmetteur?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Annuler"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Cela prendra jusqu’à 10 minutes pour terminer."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Réinitialiser"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Réinitialisation du transmetteur terminée"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/he.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "איתחול"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth משמש לתקשורת עם חיישן (מד סוכר רציף)"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth משמש לתקשורת עם חיישן (מד סוכר רציף)"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/he.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ResetTransmitter/he.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "בטוח שברצונך לאתחל את משדר זה?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "ביטול"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "התהליך יסתיים עד 10 דקות."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "איתחול"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "איתחול משדר הסתיים"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/hi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of button to cancel reset */ 2 | "Cancel" = "निरस्त"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/it.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Ripristina"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "Resetta trasmettitore"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con i dispositivi di monitoraggio continuo del glucosio"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con i dispositivi di monitoraggio continuo del glucosio"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Sei sicuro di voler resettare questo trasmettitore?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Annulla"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "L’operazione richiederà circa 10 minuti."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Ripristina"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Ripristino trasmettitore completato"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/ja.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "リセット"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "この送信機をリセットしてもよろしいですか?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "キャンセル"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "完了するまでに最大10分かかります。"; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "リセット"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "リセット完了"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/ja.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UINavigationItem"; title = "Reset Complete"; ObjectID = "3SD-s3-7OM"; */ 2 | "3SD-s3-7OM.title" = "リセット完了"; 3 | 4 | /* Class = "UINavigationItem"; title = "Reset Transmitter"; ObjectID = "7nc-6t-4hZ"; */ 5 | "7nc-6t-4hZ.title" = "トランスミッターをリセットする"; 6 | 7 | /* Class = "UITextView"; text = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk."; ObjectID = "cJ3-Gc-pnc"; */ 8 | "cJ3-Gc-pnc.text" = "このツールは、使用期限に達したトランスミッターの時刻をリセットし、新たにセンサーのセッションを始められるようにします。\nリセットされたトランスミッターを同じアカウントで使うときは特に、ClarityやShareなどのデータサービスに意図しない影響を及ぼすことがあります。\nリセットは元に戻すことができません。\nご自身の責任で使用してください。"; 9 | 10 | /* Class = "UITextField"; placeholder = "Enter the 6-digit ID"; ObjectID = "G4a-ia-wQC"; */ 11 | "G4a-ia-wQC.placeholder" = "6桁のトランスミッタIDを入力"; 12 | 13 | /* Class = "UILabel"; text = "[Error goes here. And it can get very long and that's OK]"; ObjectID = "gYy-Zz-y12"; */ 14 | "gYy-Zz-y12.text" = "[Error goes here. And it can get very long and that's OK]"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Reset"; ObjectID = "LBC-6R-q79"; */ 17 | "LBC-6R-q79.normalTitle" = "リセット"; 18 | 19 | /* Class = "UITextView"; text = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session."; ObjectID = "MbK-kj-ejl"; */ 20 | "MbK-kj-ejl.text" = "トランスミッターのリセットが完了しました。新たにセンサーのセッションを始めるにはアプリを接続してください。"; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "vNG-r7-RbP"; */ 23 | "vNG-r7-RbP.headerTitle" = "トランスミッタ ID"; 24 | 25 | -------------------------------------------------------------------------------- /ResetTransmitter/nb.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Nullstille"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth brukes til å kommunisere med kontinuerlige blodsukker monitorenheter"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth brukes til å kommunisere med kontinuerlige blodsukker monitorenheter"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/nb.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Er du sikker på at du vil nullstille denne senderen?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Avbryt"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Det kan ta opptil 10 minutter å gjennomføre."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Nullstille"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Nullstilling av sender er ferdig"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/nl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Reset"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetZender"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met continue glucosemeters"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met continue glucosemeters"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Weet je zeker dat je deze zender wilt resetten?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Annuleer"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Voltooiing kan tot 10 minuten duren."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Reset"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Reset Zender Compleet"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/pl.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Resetuj"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "Zresetuj transmiter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth służy do komunikacji z urządzeniami do ciągłego monitorowania glukozy"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth służy do komunikacji z urządzeniami do ciągłego monitorowania glukozy"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/pl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Czy na pewno chcesz zresetować ten nadajnik?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Anuluj"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Procedura zajmie do 10 minut."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Resetuj"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Resetowanie nadajnika zakończone"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/pt-BR.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Restabelecer"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/pt-BR.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Tem certeza de que deseja redefinir este transmissor?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Cancelar"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Levará 10 minutos para concluir."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Restabelecer"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Redefinição do Transmissor Concluída"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/ro.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Resetare"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth este utilizat pentru a comunica cu dispozitivele de monitorizare continuă a glicemiei"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth este utilizat pentru a comunica cu dispozitivele de monitorizare continuă a glicemiei"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/ro.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Sigur doriți să resetați acest transmițător?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Renunță"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Vor fi necesare maxim 10 minute pentru finalizare"; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Resetare"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Resetare transmițător finalizată"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/ru.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Сброс"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth используется для связи с устройствами непрерывного мониторинга глюкозы"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth используется для связи с устройствами непрерывного мониторинга глюкозы"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Вы уверены, что хотите сбросить этот трансмиттер?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Отмена"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Может занять до десяти минут."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Сброс"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Сброс данных трансмиттера завершен"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/sk.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Resetovať"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetovaťVysielač"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth sa používa na komunikáciu so zariadeniami pre kontinuálne snímanie glykémie."; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth sa používa na komunikáciu so zariadeniami pre kontinuálne snímanie glykémie."; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/sk.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Naozaj chcete resetovať tento vysielač?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Zrušiť"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Dokončenie bude trvať do 10 minút."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Resetovať"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Resetovanie vysielača je dokončené"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/sk.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UINavigationItem"; title = "Reset Complete"; ObjectID = "3SD-s3-7OM"; */ 2 | "3SD-s3-7OM.title" = "Obnovenie dokončené"; 3 | 4 | /* Class = "UINavigationItem"; title = "Reset Transmitter"; ObjectID = "7nc-6t-4hZ"; */ 5 | "7nc-6t-4hZ.title" = "Resetovať vysielač"; 6 | 7 | /* Class = "UITextView"; text = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk."; ObjectID = "cJ3-Gc-pnc"; */ 8 | "cJ3-Gc-pnc.text" = "Tento nástroj môže resetovať hodiny na vysielači, ktorý dosiahol dátum vypršania platnosti, čo umožňuje opätovné spustenie nových relácií senzora.\nTo môže mať neželané dôsledky pre dátové služby, ako je Clarity a Share, najmä ak používate resetovaný vysielač s rovnakým účtom.\nResetovanie sa nedá vrátiť späť.\nPoužitie na vlastné riziko."; 9 | 10 | /* Class = "UITextField"; placeholder = "Enter the 6-digit ID"; ObjectID = "G4a-ia-wQC"; */ 11 | "G4a-ia-wQC.placeholder" = "Zadajte 6-miestne ID"; 12 | 13 | /* Class = "UIButton"; normalTitle = "Reset"; ObjectID = "LBC-6R-q79"; */ 14 | "LBC-6R-q79.normalTitle" = "Resetovať"; 15 | 16 | /* Class = "UITextView"; text = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session."; ObjectID = "MbK-kj-ejl"; */ 17 | "MbK-kj-ejl.text" = "Vysielač bol úspešne resetovaný. Pripojte ho k aplikácii a začnite novú reláciu senzora."; 18 | 19 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "vNG-r7-RbP"; */ 20 | "vNG-r7-RbP.headerTitle" = "ID vysielača"; 21 | 22 | -------------------------------------------------------------------------------- /ResetTransmitter/sv.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Återställ"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "ResetTransmitter"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth används för kommunikation med kontinuerliga blodglukosmätare"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth används för kommunikation med kontinuerliga blodglukosmätare"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/sv.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Är du säker på att du vill återställa denna sändare?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Avbryt"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Det kan ta upp till 10 minuter innan allt är återställt."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Återställ"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Återställning av sändaren är nu genomförd"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/tr.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Sıfırla"; 3 | 4 | /* Bundle name */ 5 | "CFBundleName" = "Vericiyi Sıfırla"; 6 | 7 | /* Privacy - Bluetooth Always Usage Description */ 8 | "NSBluetoothAlwaysUsageDescription" = "Bluetooth, sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır"; 9 | 10 | /* Privacy - Bluetooth Peripheral Usage Description */ 11 | "NSBluetoothPeripheralUsageDescription" = "Bluetooth, sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır"; 12 | 13 | -------------------------------------------------------------------------------- /ResetTransmitter/tr.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ResetTransmitter/tr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Bu vericiyi sıfırlamak istediğinizden emin misiniz?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "İptal"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Tamamlanması 10 dakika kadar sürecektir."; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Sıfırla"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Verici Sıfırlama Tamamlandı"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/vi.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Bundle display name */ 2 | "CFBundleDisplayName" = "Khôi phục lại"; 3 | 4 | -------------------------------------------------------------------------------- /ResetTransmitter/vi.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "Bạn có chắc muốn cài lại transmitter này không?"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "Hủy bỏ"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "Cần 10 phút để hoàn thành công việc"; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "Khôi phục lại"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "Cài lại Transmitter hoàn tất"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Title of the reset confirmation sheet */ 2 | "Are you sure you want to reset this transmitter?" = "确定要重置发射器么"; 3 | 4 | /* Title of button to cancel reset */ 5 | "Cancel" = "取消"; 6 | 7 | /* Message of the reset confirmation sheet */ 8 | "It will take up to 10 minutes to complete." = "该操作可能需要10分钟"; 9 | 10 | /* Reset button title 11 | Title of button to begin reset */ 12 | "Reset" = "重置"; 13 | 14 | /* Notification title for background completion notification */ 15 | "Transmitter Reset Complete" = "发射器已重置"; 16 | 17 | -------------------------------------------------------------------------------- /ResetTransmitter/zh-Hans.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | /* Class = "UINavigationItem"; title = "Reset Complete"; ObjectID = "3SD-s3-7OM"; */ 2 | "3SD-s3-7OM.title" = "重置已完成"; 3 | 4 | /* Class = "UINavigationItem"; title = "Reset Transmitter"; ObjectID = "7nc-6t-4hZ"; */ 5 | "7nc-6t-4hZ.title" = "重置发射器"; 6 | 7 | /* Class = "UITextView"; text = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk."; ObjectID = "cJ3-Gc-pnc"; */ 8 | "cJ3-Gc-pnc.text" = "该操作将会把发射器使用时间清零,此后可以继续重新启动传感器.这可能会导致Dexcom远程数据故障,尤其是使用同一个Dexcom账户上传数据.重置可能会失败,请自行承担相关风险"; 9 | 10 | /* Class = "UITextField"; placeholder = "Enter the 6-digit ID"; ObjectID = "G4a-ia-wQC"; */ 11 | "G4a-ia-wQC.placeholder" = "输入6位数字编号"; 12 | 13 | /* Class = "UILabel"; text = "[Error goes here. And it can get very long and that's OK]"; ObjectID = "gYy-Zz-y12"; */ 14 | "gYy-Zz-y12.text" = "[发生错误,请耐心等待]"; 15 | 16 | /* Class = "UIButton"; normalTitle = "Reset"; ObjectID = "LBC-6R-q79"; */ 17 | "LBC-6R-q79.normalTitle" = "重置"; 18 | 19 | /* Class = "UITextView"; text = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session."; ObjectID = "MbK-kj-ejl"; */ 20 | "MbK-kj-ejl.text" = "发射器已重置,请重新连接,并启动传感器"; 21 | 22 | /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "vNG-r7-RbP"; */ 23 | "vNG-r7-RbP.headerTitle" = "发射器编号"; 24 | 25 | --------------------------------------------------------------------------------