mirror of
https://github.com/AU-COVIDSafe/mobile-ios.git
synced 2025-01-19 01:06:35 +00:00
60 lines
2.2 KiB
Swift
60 lines
2.2 KiB
Swift
|
//
|
||
|
// SensorArray.swift
|
||
|
//
|
||
|
// Copyright 2020 VMware, Inc.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
//
|
||
|
|
||
|
import Foundation
|
||
|
import UIKit
|
||
|
|
||
|
/// Sensor array for combining multiple detection and tracking methods.
|
||
|
public class SensorArray : NSObject, Sensor {
|
||
|
private let logger = ConcreteSensorLogger(subsystem: "Sensor", category: "SensorArray")
|
||
|
private var sensorArray: [Sensor] = []
|
||
|
private var sensorDelegates: [SensorDelegate] = []
|
||
|
public let payloadData: PayloadData
|
||
|
public static let deviceDescription = "\(UIDevice.current.name) (iOS \(UIDevice.current.systemVersion))"
|
||
|
|
||
|
public init(_ payloadDataSupplier: PayloadDataSupplier) {
|
||
|
logger.debug("init")
|
||
|
// BLE sensor for detecting and tracking proximity
|
||
|
sensorArray.append(ConcreteBLESensor(payloadDataSupplier))
|
||
|
// Payload data at initiation time for identifying this device in the logs
|
||
|
payloadData = payloadDataSupplier.payload(PayloadTimestamp())
|
||
|
super.init()
|
||
|
|
||
|
// Loggers
|
||
|
#if DEBUG
|
||
|
add(delegate: ContactLog(filename: "contacts.csv"))
|
||
|
add(delegate: StatisticsLog(filename: "statistics.csv", payloadData: payloadData))
|
||
|
add(delegate: DetectionLog(filename: "detection.csv", payloadData: payloadData))
|
||
|
_ = BatteryLog(filename: "battery.csv")
|
||
|
#endif
|
||
|
logger.info("DEVICE (payloadPrefix=\(payloadData.shortName),description=\(SensorArray.deviceDescription))")
|
||
|
}
|
||
|
|
||
|
public func add(delegate: SensorDelegate) {
|
||
|
sensorDelegates.append(delegate)
|
||
|
sensorArray.forEach { $0.add(delegate: delegate) }
|
||
|
}
|
||
|
|
||
|
public func start() {
|
||
|
logger.debug("start")
|
||
|
sensorArray.forEach { $0.start() }
|
||
|
}
|
||
|
|
||
|
public func stop() {
|
||
|
logger.debug("stop")
|
||
|
sensorArray.forEach { $0.stop() }
|
||
|
}
|
||
|
|
||
|
public func startAwakeSensor() {
|
||
|
// Location sensor is necessary for enabling background BLE advert detection
|
||
|
let awakeSensor = ConcreteAwakeSensor(rangeForBeacon: UUID(uuidString: BLESensorConfiguration.serviceUUID.uuidString))
|
||
|
sensorDelegates.forEach { awakeSensor.add(delegate: $0) }
|
||
|
sensorArray.append(awakeSensor)
|
||
|
awakeSensor.start()
|
||
|
}
|
||
|
}
|