Fix initialiser, return statements
This commit is contained in:
@@ -40,10 +40,10 @@ func processScan(raw: Data) throws -> LidarScan {
|
||||
let inversedNewScan = (raw[0] >> 1) & 0b1
|
||||
let quality = raw[0] >> 2
|
||||
if (newScan == inversedNewScan){
|
||||
|
||||
|
||||
}
|
||||
if ((raw[1] & 0b1) != 1) {
|
||||
|
||||
|
||||
}
|
||||
let angle = Float(raw[1] >> 1) + Float(raw[2] << 7) / 64
|
||||
let distance = Float(raw[3]) + Float(raw[4] << 8) / 4
|
||||
@@ -59,8 +59,8 @@ struct LidarScan{
|
||||
|
||||
|
||||
|
||||
typealias MeasurementHandler = (_ scan: LidarScan) -> Void
|
||||
typealias ScanHandler = (_ scans: [LidarScan]) -> Void
|
||||
typealias MeasurementHandler = (_ scan: LidarScan) -> Bool
|
||||
typealias ScanHandler = (_ scans: [LidarScan]) -> Bool
|
||||
|
||||
class RPLidar{
|
||||
private var motor: Bool = false
|
||||
@@ -68,9 +68,10 @@ class RPLidar{
|
||||
private var motorRunning = false
|
||||
|
||||
|
||||
init(serialPort: SerialPort) throws {
|
||||
init(onPort serialPort: SerialPort) throws {
|
||||
self.serialPort = serialPort
|
||||
|
||||
try connect()
|
||||
try startMotor()
|
||||
}
|
||||
|
||||
deinit {
|
||||
@@ -164,7 +165,7 @@ class RPLidar{
|
||||
if status == .ERROR{
|
||||
// Throw Exception
|
||||
}
|
||||
|
||||
|
||||
else if status == .WARNING {
|
||||
|
||||
}
|
||||
@@ -180,9 +181,9 @@ class RPLidar{
|
||||
if dataType != Constants.SCAN_TYPE {
|
||||
|
||||
}
|
||||
|
||||
var read = true
|
||||
// Need to check in waiting or something...
|
||||
for _ in 0..<500{
|
||||
while read {
|
||||
let raw = try readResponse(Int(dataSize))
|
||||
if maxBufferMeasurements > 0 {
|
||||
let dataInWaiting = serialPort?.inWaiting
|
||||
@@ -192,22 +193,24 @@ class RPLidar{
|
||||
}
|
||||
}
|
||||
// TODO: Support cancelling of measurements. Would it already work though?
|
||||
try onMeasure(processScan(raw: raw))
|
||||
read = try onMeasure(processScan(raw: raw))
|
||||
}
|
||||
}
|
||||
|
||||
public func iterScans(maxBufferMeasurements: Int = 500, minLength: Int = 5, _ onScan: ScanHandler) throws {
|
||||
var scan: [LidarScan] = []
|
||||
var read = true
|
||||
try iterMeasurements{ measurement in
|
||||
if measurement.newScan {
|
||||
if scan.count > minLength {
|
||||
onScan(scan)
|
||||
read = onScan(scan)
|
||||
}
|
||||
scan = []
|
||||
}
|
||||
if measurement.quality > 0 && measurement.distance > 0 {
|
||||
scan.append(measurement)
|
||||
}
|
||||
return read
|
||||
}
|
||||
|
||||
}
|
||||
@@ -243,10 +246,10 @@ class RPLidar{
|
||||
return nil
|
||||
}
|
||||
if (descriptor.count != Constants.DESCRIPTOR_LEN){
|
||||
return
|
||||
return nil
|
||||
}
|
||||
else if (descriptor[0...1] != Data([Constants.SYNC, Constants.SYNC2])){
|
||||
return
|
||||
return nil
|
||||
}
|
||||
let isSingle = descriptor[descriptor.count - 2] == 0
|
||||
return (descriptor[2], isSingle, descriptor[descriptor.count - 1])
|
||||
@@ -257,7 +260,7 @@ class RPLidar{
|
||||
return Data()
|
||||
}
|
||||
if(data.count != dataSize){
|
||||
return
|
||||
return Data()
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user