diff --git a/Sources/SwiftRPLidar/SwiftRPLidar.swift b/Sources/SwiftRPLidar/SwiftRPLidar.swift index 3141a1b..1686f6d 100644 --- a/Sources/SwiftRPLidar/SwiftRPLidar.swift +++ b/Sources/SwiftRPLidar/SwiftRPLidar.swift @@ -27,8 +27,8 @@ struct Constants{ static let DEFAULT_MOTOR_PWM = 660 } -enum HEALTH_STATUSES { - case GOOD, WARNING, ERROR +enum HEALTH_STATUSES: UInt8 { + case GOOD = 0, WARNING, ERROR } struct SwiftRPLidar { @@ -127,24 +127,62 @@ class RPLidar{ return (raw[0], raw[2], raw[3], serialNumber) } - public func getHealth(){ - + public func getHealth() throws -> (HEALTH_STATUSES, UInt8){ + try sendCommand(Constants.GET_HEALTH.asData()) + let (dataSize, isSingle, dataType) = try readDescriptor()! + if (dataSize != Constants.HEALTH_LEN){ + + } + if (!isSingle){ + + } + if(dataType != Constants.HEALTH_TYPE){ + + } + let raw = try readResponse(dataSize) + let status = HEALTH_STATUSES(rawValue: raw[0])! + let errorCode = raw[1] << 8 + raw[2] + return (status, errorCode) } public func clearInput(){ } - public func stop(){ - + public func stop() throws{ + try sendCommand(Constants.STOP.asData()) } - public func reset(){ - + public func reset() throws{ + try sendCommand(Constants.RESET.asData()) } - public func iterMeasurements(maxBufferMeasurements: Int = 500, _ onMeasure: MeasurementHandler) { + public func iterMeasurements(maxBufferMeasurements: Int = 500, _ onMeasure: MeasurementHandler) throws { + try startMotor() + let (status, errorCode) = try getHealth() + if status == .ERROR{ + // Throw Exception + } + else if status == .WARNING { + + } + + try sendCommand(Constants.SCAN.asData()) + let (dataSize, isSingle, dataType) = try readDescriptor()! + if (dataSize != 5){ + + } + if isSingle{ + + } + if dataType != Constants.SCAN_TYPE{ + + } + for _ in 0..<500{ + let raw = try readResponse(Int(dataSize)) + + } } public func iterScans(maxBufferMeasurements: Int = 500, minLength: Int = 5, _ onScan: ScanHandler){