| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- //
- // Setup PodCommand.swift
- // OmniKit
- //
- // Created by Pete Schwamb on 2/17/18.
- // Copyright © 2018 Pete Schwamb. All rights reserved.
- //
- import Foundation
- public struct SetupPodCommand : MessageBlock {
-
- public let blockType: MessageBlockType = .setupPod
-
- let address: UInt32
- let lot: UInt32
- let tid: UInt32
- let dateComponents: DateComponents
- let packetTimeoutLimit: UInt8
-
- public static func dateComponents(date: Date, timeZone: TimeZone) -> DateComponents {
- var cal = Calendar(identifier: .gregorian)
- cal.timeZone = timeZone
- return cal.dateComponents([.day, .month, .year, .hour, .minute], from: date)
- }
-
- public static func date(from components: DateComponents, timeZone: TimeZone) -> Date? {
- var cal = Calendar(identifier: .gregorian)
- cal.timeZone = timeZone
- return cal.date(from: components)
- }
-
- // 03 13 1f08ced2 14 04 09 0b 11 0b 08 0000a640 00097c27 83e4
- public var data: Data {
- var data = Data([
- blockType.rawValue,
- 19,
- ])
- data.appendBigEndian(self.address)
-
- let year = UInt8((dateComponents.year ?? 2000) - 2000)
- let month = UInt8(dateComponents.month ?? 0)
- let day = UInt8(dateComponents.day ?? 0)
- let hour = UInt8(dateComponents.hour ?? 0)
- let minute = UInt8(dateComponents.minute ?? 0)
-
- let data2: Data = Data([
- UInt8(0x14), // Unknown
- packetTimeoutLimit,
- month,
- day,
- year,
- hour,
- minute
- ])
- data.append(data2)
- data.appendBigEndian(self.lot)
- data.appendBigEndian(self.tid)
- return data
- }
-
- public init(encodedData: Data) throws {
- if encodedData.count < 21 {
- throw MessageBlockError.notEnoughData
- }
- self.address = encodedData[2...].toBigEndian(UInt32.self)
- packetTimeoutLimit = encodedData[7]
- var components = DateComponents()
- components.month = Int(encodedData[8])
- components.day = Int(encodedData[9])
- components.year = Int(encodedData[10]) + 2000
- components.hour = Int(encodedData[11])
- components.minute = Int(encodedData[12])
- self.dateComponents = components
- self.lot = encodedData[13...].toBigEndian(UInt32.self)
- self.tid = encodedData[17...].toBigEndian(UInt32.self)
- }
-
- public init(address: UInt32, dateComponents: DateComponents, lot: UInt32, tid: UInt32, packetTimeoutLimit: UInt8 = 4) {
- self.address = address
- self.dateComponents = dateComponents
- self.lot = lot
- self.tid = tid
- self.packetTimeoutLimit = packetTimeoutLimit
- }
- }
- extension SetupPodCommand: CustomDebugStringConvertible {
- public var debugDescription: String {
- return "SetupPodCommand(address:\(Data(bigEndian: address).hexadecimalString), dateComponents:\(dateComponents), lot:\(lot), tid:\(tid), packetTimeoutLimit:\(packetTimeoutLimit))"
- }
- }
|