diff --git a/ShimmerBluetooth/ShimmerBluetooth/ConfigByteLayoutShimmer3.swift b/ShimmerBluetooth/ShimmerBluetooth/ConfigByteLayoutShimmer3.swift index bf91fe5..b05085c 100644 --- a/ShimmerBluetooth/ShimmerBluetooth/ConfigByteLayoutShimmer3.swift +++ b/ShimmerBluetooth/ShimmerBluetooth/ConfigByteLayoutShimmer3.swift @@ -40,7 +40,7 @@ public class ConfigByteLayoutShimmer3{ static let idxBtCommBaudRate = 30 static let idxAnalogAccelCalibration = 31 static let idxMPU9150GyroCalibration = 52 - static let idxLSM303DLHCMagCalibration = 73 + static let idxLSM303DLHCMagCalibration = 76 //static let idxLSM303DLHCAccelCalibration = 94 //94->114 static let idxConfigSetupByte4 = 128+2; diff --git a/ShimmerBluetooth/ShimmerBluetooth/MagSensor.swift b/ShimmerBluetooth/ShimmerBluetooth/MagSensor.swift index 520ac08..ea3ab28 100644 --- a/ShimmerBluetooth/ShimmerBluetooth/MagSensor.swift +++ b/ShimmerBluetooth/ShimmerBluetooth/MagSensor.swift @@ -8,6 +8,7 @@ import Foundation public class MagSensor : IMUSensor , SensorProcessing{ + public var packetIndexMagX:Int = -1 public var packetIndexMagY:Int = -1 public var packetIndexMagZ:Int = -1 @@ -15,11 +16,11 @@ public class MagSensor : IMUSensor , SensorProcessing{ public static let MAGNETOMETER_Y = "Magnetometer Y" public static let MAGNETOMETER_Z = "Magnetometer Z" var magRange = 0 - let CALIBRATION_ID = 32 + var CALIBRATION_ID = 32 var AlignmentMatrix : [[Double]] = [[]] var SensitivityMatrix : [[Double]] = [[]] var OffsetVector : [Double] = [] - + public func processData(sensorPacket: [UInt8], objectCluster: ObjectCluster) -> ObjectCluster { let x = Array(sensorPacket[packetIndexMagX..>5) & 1 + var enabled = Int(infomem[ConfigByteLayoutShimmer3.idxSensors0]>>ConfigByteLayoutShimmer3.bitShiftLSM303DLHCMagRange) & 1 if (enabled == 1){ sensorEnabled = true - } else { + } else { sensorEnabled = false } - - magRange = Int((infomem[8]>>5) & 7) - } - + public func setLowPowerMag(enable: Bool, isShimmer3withUpdatedSensors: Bool, isShimmer3Sensor: Bool, samplingRate: Double, infomem: [UInt8])-> [UInt8]{ let LowPowerMagEnabled = enable var infomemtoupdate = infomem - if(isShimmer3Sensor){ + if(HardwareVersion == Shimmer3Protocol.HardwareType.Shimmer3R.rawValue){ if(!LowPowerMagEnabled){ - if(isShimmer3withUpdatedSensors){ - if(samplingRate >= 100){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:3) - }else if(samplingRate >= 50){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:2) - }else if(samplingRate >= 20){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) - }else if(samplingRate >= 10){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + if(samplingRate <= 10){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + }else if(samplingRate <= 20){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) + }else if(samplingRate <= 50){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:2) + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:3) + } + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + } + }else { + if(isShimmer3Sensor){ + if(!LowPowerMagEnabled){ + if(isShimmer3withUpdatedSensors){ + if(samplingRate >= 100){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:3) + }else if(samplingRate >= 50){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:2) + }else if(samplingRate >= 20){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) + }else if(samplingRate >= 10){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + } }else{ + if(samplingRate >= 50){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:6) + }else if(samplingRate >= 20){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:5) + }else if(samplingRate >= 10){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:3) + } + } + }else //low power mag for shimmer3 enabled + { + if(isShimmer3withUpdatedSensors){ infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) } - }else{ - if(samplingRate >= 50){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:6) - }else if(samplingRate >= 20){ + } + }else //Shimmer2 + { + if(!LowPowerMagEnabled){ + if(samplingRate <= 1){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) + }else if(samplingRate <= 15){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) + }else if(samplingRate <= 30){ infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:5) - }else if(samplingRate >= 10){ + }else if(samplingRate <= 75){ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:6) + }else{ + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:7) + } + + }else + { + if(samplingRate >= 10){ infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) }else{ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:3) + infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) } } - }else //low power mag for shimmer3 enabled - { - if(isShimmer3withUpdatedSensors){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:0) - }else{ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) - } - } - }else //Shimmer2 - { - if(!LowPowerMagEnabled){ - if(samplingRate <= 1){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) - }else if(samplingRate <= 15){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) - }else if(samplingRate <= 30){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:5) - }else if(samplingRate <= 75){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:6) - }else{ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:7) - } - - }else - { - if(samplingRate >= 10){ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:4) - }else{ - infomemtoupdate = updateInfoMemMagRate(infomem: infomem, magRate:1) - } } } + + + return infomemtoupdate } @@ -138,16 +158,14 @@ public class MagSensor : IMUSensor , SensorProcessing{ let orivalue = infomemtoupdate[ConfigByteLayoutShimmer3.idxConfigSetupByte2] let value = infomemtoupdate[ConfigByteLayoutShimmer3.idxConfigSetupByte2] & ~UInt8(ConfigByteLayoutShimmer3.maskLSM303DLHCMagSamplingRate<