DexcomG7HeartbeatBluetoothDevice.swift 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // DexcomG7HeartbeatBluetoothDevice.swift
  3. // LoopFollow
  4. //
  5. // Created by Jonas Björkert on 2025-01-04.
  6. // Copyright © 2025 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. import os
  10. import CoreBluetooth
  11. import AVFoundation
  12. class DexcomG7HeartbeatBluetoothDevice: BluetoothDevice {
  13. private let CBUUID_Service_G7 = "F8083532-849E-531C-C594-30F1F86A4EA5"
  14. private let CBUUID_Advertisement_G7 = "FEBC"
  15. private let CBUUID_ReceiveCharacteristic_G7 = "F8083535-849E-531C-C594-30F1F86A4EA5"
  16. private var timeStampOfLastHeartBeat: Date
  17. init(bluetoothDeviceDelegate: BluetoothDeviceDelegate) {
  18. guard let selectedDevice = Storage.shared.selectedBLEDevice.value else {
  19. fatalError("No selected BLE device found in storage.")
  20. }
  21. let address = selectedDevice.id.uuidString
  22. let name = selectedDevice.name
  23. self.timeStampOfLastHeartBeat = Date(timeIntervalSince1970: 0)
  24. super.init(
  25. address: address,
  26. name: name,
  27. CBUUID_Advertisement: CBUUID_Advertisement_G7,
  28. servicesCBUUIDs: [CBUUID(string: CBUUID_Service_G7)],
  29. CBUUID_ReceiveCharacteristic: CBUUID_ReceiveCharacteristic_G7,
  30. bluetoothDeviceDelegate: bluetoothDeviceDelegate
  31. )
  32. }
  33. override func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
  34. super.centralManager(central, didDisconnectPeripheral: peripheral, error: error)
  35. self.bluetoothDeviceDelegate?.heartBeat()
  36. }
  37. override func expectedHeartbeatInterval() -> TimeInterval? {
  38. return 5 * 60 // 5 minutes in seconds
  39. }
  40. }