81 lines
2.5 KiB
Swift
81 lines
2.5 KiB
Swift
import Foundation
|
|
|
|
/**
|
|
A result from sending a key to the device.
|
|
*/
|
|
enum KeyResult: UInt8 {
|
|
|
|
/// Text content was received, although binary data was expected
|
|
case textReceived = 1
|
|
|
|
/// A socket event on the device was unexpected (not binary data)
|
|
case unexpectedSocketEvent = 2
|
|
|
|
/// The size of the payload (key id + key data, or just key) was invalid
|
|
case invalidPayloadSize = 3
|
|
|
|
/// The index of the key was out of bounds
|
|
case invalidKeyIndex = 4
|
|
|
|
/// The transmitted key data did not match the expected key
|
|
case invalidKey = 5
|
|
|
|
/// The key has been previously used and is no longer valid
|
|
case keyAlreadyUsed = 6
|
|
|
|
/// A later key has been used, invalidating this key (to prevent replay attacks after blocked communication)
|
|
case keyWasSkipped = 7
|
|
|
|
/// The key was accepted by the device, and the door will be opened
|
|
case keyAccepted = 8
|
|
|
|
/// The device produced an unknown error
|
|
case unknownDeviceError = 9
|
|
|
|
/// The request did not contain body data with the key
|
|
case noBodyData = 10
|
|
|
|
/// The body data could not be read
|
|
case corruptkeyData = 11
|
|
|
|
/// The device is not connected
|
|
case deviceNotConnected = 12
|
|
|
|
/// The device did not respond within the timeout
|
|
case deviceTimedOut = 13
|
|
}
|
|
|
|
extension KeyResult: CustomStringConvertible {
|
|
|
|
var description: String {
|
|
switch self {
|
|
case .invalidKeyIndex:
|
|
return "Invalid key id (too large)"
|
|
case .noBodyData:
|
|
return "No body data included in the request"
|
|
case .invalidPayloadSize:
|
|
return "Invalid key size"
|
|
case .corruptkeyData:
|
|
return "Key data corrupted"
|
|
case .deviceNotConnected:
|
|
return "Device not connected"
|
|
case .textReceived:
|
|
return "The device received unexpected text"
|
|
case .unexpectedSocketEvent:
|
|
return "Unexpected socket event for the device"
|
|
case .invalidKey:
|
|
return "The transmitted key was not correct"
|
|
case .keyAlreadyUsed:
|
|
return "The transmitted key was already used"
|
|
case .keyWasSkipped:
|
|
return "A newer key was already used"
|
|
case .keyAccepted:
|
|
return "Key successfully sent"
|
|
case .unknownDeviceError:
|
|
return "The device experienced an unknown error"
|
|
case .deviceTimedOut:
|
|
return "The device did not respond"
|
|
}
|
|
}
|
|
}
|